changeset 3126:703070153bc1 beta

added API method for checking IP
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 31 Dec 2012 01:51:30 +0100
parents 9b92cf5a0cca
children 71ce052f8b6b
files docs/api/api.rst rhodecode/controllers/api/__init__.py rhodecode/controllers/api/api.py
diffstat 3 files changed, 55 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/docs/api/api.rst	Sun Dec 30 23:06:03 2012 +0100
+++ b/docs/api/api.rst	Mon Dec 31 01:51:30 2012 +0100
@@ -168,7 +168,6 @@
                 "repoid" : "<reponame or repo_id>"
                 "userid" : "<user_id or username>",
                 "locked" : "<bool true|false>"
-                
               }
 
 OUTPUT::
@@ -178,6 +177,40 @@
     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 : <id_for_response>
+    api_key : "<api_key>"
+    method :  "show_ip"
+    args :    {
+                "userid" : "<user_id or username>",
+              }
+
+OUTPUT::
+
+    id : <id_given_in_input>
+    result : {
+                 "ip_addr_server": <ip_from_clien>",
+                 "user_ips": [
+                                {
+                                   "ip_addr": "<ip_with_mask>",
+                                   "ip_range": ["<start_ip>", "<end_ip>"],
+                                },
+                                ...
+                             ]
+             }
+    
+    error :  null
+
+
 get_user
 --------
 
--- a/rhodecode/controllers/api/__init__.py	Sun Dec 30 23:06:03 2012 +0100
+++ b/rhodecode/controllers/api/__init__.py	Mon Dec 31 01:51:30 2012 +0100
@@ -86,6 +86,9 @@
 
      """
 
+    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 @@
         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")
--- a/rhodecode/controllers/api/api.py	Sun Dec 30 23:06:03 2012 +0100
+++ b/rhodecode/controllers/api/api.py	Mon Dec 31 01:51:30 2012 +0100
@@ -38,7 +38,7 @@
 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 @@
     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 @@
             )
 
     @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