user-api: enable per-user audit logs fetching via API endpoint.

This commit is contained in:
Marcin Kuzminski 2017-03-28 15:49:20 +02:00
parent 4c2e5ee660
commit 639508d54b
2 changed files with 55 additions and 4 deletions

View file

@ -29,7 +29,6 @@ from rhodecode.lib.utils2 import safe_int, str2bool
from rhodecode.model.db import Session, User, Repository
from rhodecode.model.user import UserModel
log = logging.getLogger(__name__)
@ -471,3 +470,45 @@ def get_user_locks(request, apiuser, userid=Optional(OAttr('apiuser'))):
ret.append(_api_data)
return ret
@jsonrpc_method()
def get_user_audit_logs(request, apiuser, userid=Optional(OAttr('apiuser'))):
"""
Fetches all action logs made by the specified user.
This command takes the following options:
:param apiuser: This is filled automatically from the |authtoken|.
:type apiuser: AuthUser
:param userid: Sets the userid whose list of locked |repos| will be
displayed.
:type userid: Optional(str or int)
Example output:
.. code-block:: bash
id : <id_given_in_input>
result : {
[action, action,...]
}
error : null
"""
if not has_superadmin_permission(apiuser):
# make sure normal user does not pass someone else userid,
# he is not allowed to do that
if not isinstance(userid, Optional) and userid != apiuser.user_id:
raise JSONRPCError('userid is not the same as your user')
userid = Optional.extract(userid, evaluate_locals=locals())
userid = getattr(userid, 'user_id', userid)
user = get_user_or_error(userid)
ret = []
# show all user actions
for entry in UserModel().get_user_log(user, filter_term=None):
ret.append(entry)
return ret

View file

@ -1108,9 +1108,19 @@ class UserLog(Base, BaseModel):
action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
def __unicode__(self):
return u"<%s('id:%s:%s')>" % (self.__class__.__name__,
self.repository_name,
self.action)
return u"<%s('id:%s:%s')>" % (
self.__class__.__name__, self.repository_name, self.action)
def __json__(self):
return {
'user_id': self.user_id,
'username': self.username,
'repository_id': self.repository_id,
'repository_name': self.repository_name,
'user_ip': self.user_ip,
'action_date': self.action_date,
'action': self.action,
}
@property
def action_as_day(self):