diff --git a/docs/api/api.rst b/docs/api/api.rst --- a/docs/api/api.rst +++ b/docs/api/api.rst @@ -168,7 +168,6 @@ INPUT:: "repoid" : "" "userid" : "", "locked" : "" - } OUTPUT:: @@ -178,6 +177,40 @@ OUTPUT:: error : null +show_ip +------- + +Shows IP address as seen from RhodeCode server, together with all +defined IP addresses for given user. +This command can be executed only using api_key belonging to user with admin +rights. + +INPUT:: + + id : + api_key : "" + method : "show_ip" + args : { + "userid" : "", + } + +OUTPUT:: + + id : + result : { + "ip_addr_server": ", + "user_ips": [ + { + "ip_addr": "", + "ip_range": ["", ""], + }, + ... + ] + } + + error : null + + get_user -------- diff --git a/rhodecode/controllers/api/__init__.py b/rhodecode/controllers/api/__init__.py --- a/rhodecode/controllers/api/__init__.py +++ b/rhodecode/controllers/api/__init__.py @@ -86,6 +86,9 @@ class JSONRPCController(WSGIController): """ + def _get_ip_addr(self, environ): + return _get_ip_addr(environ) + def _get_method_args(self): """ Return `self._rpc_args` to dispatched controller method @@ -99,7 +102,7 @@ class JSONRPCController(WSGIController): controller and if it exists, dispatch to it. """ start = time.time() - ip_addr = self._get_ip_addr(environ) + ip_addr = self.ip_addr = self._get_ip_addr(environ) self._req_id = None if 'CONTENT_LENGTH' not in environ: log.debug("No Content-Length") diff --git a/rhodecode/controllers/api/api.py b/rhodecode/controllers/api/api.py --- a/rhodecode/controllers/api/api.py +++ b/rhodecode/controllers/api/api.py @@ -38,7 +38,7 @@ from rhodecode.model.repo import RepoMod from rhodecode.model.user import UserModel from rhodecode.model.users_group import UsersGroupModel from rhodecode.model.permission import PermissionModel -from rhodecode.model.db import Repository, RhodeCodeSetting +from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap log = logging.getLogger(__name__) @@ -140,9 +140,6 @@ class ApiController(JSONRPCController): errors that happens """ - def _get_ip_addr(self, environ): - from rhodecode.lib.base import _get_ip_addr - return _get_ip_addr(environ) @HasPermissionAllDecorator('hg.admin') def pull(self, apiuser, repoid): @@ -215,6 +212,22 @@ class ApiController(JSONRPCController): ) @HasPermissionAllDecorator('hg.admin') + def show_ip(self, apiuser, userid): + """ + Shows IP address as seen from RhodeCode server, together with all + defined IP addresses for given user + + :param apiuser: + :param userid: + """ + user = get_user_or_error(userid) + ips = UserIpMap.query().filter(UserIpMap.user == user).all() + return dict( + ip_addr_server=self.ip_addr, + user_ips=ips + ) + + @HasPermissionAllDecorator('hg.admin') def get_user(self, apiuser, userid): """" Get a user by username