user-api: enable per-user audit logs fetching via API endpoint.
This commit is contained in:
parent
4c2e5ee660
commit
639508d54b
2 changed files with 55 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue