Przeglądaj źródła

agregado logger para seguimiento de acciones

robert2206 8 lat temu
rodzic
commit
735fabea5a
2 zmienionych plików z 57 dodań i 2 usunięć
  1. 57 2
      controllers/http_handler.py
  2. BIN
      controllers/http_handler.pyc

+ 57 - 2
controllers/http_handler.py

@@ -7,12 +7,14 @@ from werkzeug.wrappers import Response
 import os
 import os
 import jwt
 import jwt
 import json
 import json
+import logging
 
 
 RESOURCES_MAP = None
 RESOURCES_MAP = None
 JWT_SECRET_KEY = '@MjSk$2016?'
 JWT_SECRET_KEY = '@MjSk$2016?'
 JWT_HEADER = 'Authorization'
 JWT_HEADER = 'Authorization'
 JWT_HEADER_PREFIX = 'JWT'
 JWT_HEADER_PREFIX = 'JWT'
 CRYPT_CONTEXT = CryptContext(['pbkdf2_sha512', 'md5_crypt'], deprecated=['md5_crypt'])
 CRYPT_CONTEXT = CryptContext(['pbkdf2_sha512', 'md5_crypt'], deprecated=['md5_crypt'])
+LOGGER = logging.getLogger(__name__)
 
 
 with open(os.path.dirname(__file__) + '/resources.json') as resources:
 with open(os.path.dirname(__file__) + '/resources.json') as resources:
     RESOURCES_MAP = json.load(resources)
     RESOURCES_MAP = json.load(resources)
@@ -31,9 +33,11 @@ class Auth(http.Controller):
             user = request.env['res.users'].sudo().search([('login', '=', args['username']), ('active', '=', True)])
             user = request.env['res.users'].sudo().search([('login', '=', args['username']), ('active', '=', True)])
 
 
             if not user:
             if not user:
+                self.make_warn_log('invalid user received')
                 return self.make_response({'error': 'invalid user'}, 400) # bad request
                 return self.make_response({'error': 'invalid user'}, 400) # bad request
 
 
             if not self.get_crypt_context().verify(args['password'], user.password_crypt):
             if not self.get_crypt_context().verify(args['password'], user.password_crypt):
+                self.make_warn_log('invalid password received')
                 return self.make_response({'error': 'invalid password'}, 400) # bad request
                 return self.make_response({'error': 'invalid password'}, 400) # bad request
 
 
             payload = {
             payload = {
@@ -45,8 +49,10 @@ class Auth(http.Controller):
 
 
             user.write({'jwt_token': encoded})
             user.write({'jwt_token': encoded})
 
 
+            self.make_info_log('to send token')
             return self.make_response({'token': encoded})
             return self.make_response({'token': encoded})
         except Exception, e:
         except Exception, e:
+            self.make_error_log('Fields required to generate token')
             return self.make_response({'error': 'fields required'}, 400) # bad request
             return self.make_response({'error': 'fields required'}, 400) # bad request
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -58,15 +64,19 @@ class Auth(http.Controller):
             user = request.env['res.users'].sudo().search([('jwt_token', '=', args['token'])])
             user = request.env['res.users'].sudo().search([('jwt_token', '=', args['token'])])
 
 
             if not user:
             if not user:
+                self.make_warn_log('Invalid token received')
                 return self.make_response({'error' : 'invalid token'}, 400) # bad request
                 return self.make_response({'error' : 'invalid token'}, 400) # bad request
 
 
             decoded = jwt.decode(args['token'], JWT_SECRET_KEY, algorithms = ['HS256'])
             decoded = jwt.decode(args['token'], JWT_SECRET_KEY, algorithms = ['HS256'])
 
 
             if not self.get_crypt_context().verify(decoded['password'], user.password_crypt):
             if not self.get_crypt_context().verify(decoded['password'], user.password_crypt):
+                self.make_warn_log('Invalid token received')
                 return self.make_response({'error' : 'invalid token'}, 400) # bad request
                 return self.make_response({'error' : 'invalid token'}, 400) # bad request
 
 
+            self.make_info_log('Token received is valid')
             return self.make_response({'token': 'valid'})
             return self.make_response({'token': 'valid'})
         except Exception, e:
         except Exception, e:
+            self.make_error_log('Token not received')
             return self.make_response({'error': 'token required'}, 400) # bad request
             return self.make_response({'error': 'token required'}, 400) # bad request
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -81,6 +91,25 @@ class Auth(http.Controller):
     def make_response(self, data, status = 200):
     def make_response(self, data, status = 200):
         return Response(json.dumps(data), status = status, content_type = 'application/json')
         return Response(json.dumps(data), status = status, content_type = 'application/json')
 
 
+    # --------------------------------------------------------------------------
+    # Make log for warnings
+    # --------------------------------------------------------------------------
+    def make_warn_log(self, log):
+        LOGGER.warning(log)
+
+    # --------------------------------------------------------------------------
+    # Make log for infos
+    # --------------------------------------------------------------------------
+    def make_info_log(self, log):
+        LOGGER.error(log)
+
+    # --------------------------------------------------------------------------
+    # Make log for errors
+    # --------------------------------------------------------------------------
+    def make_error_log(self, log):
+        LOGGER.error(log)
+
+
 '''
 '''
     Class for manage rest api interaction
     Class for manage rest api interaction
 '''
 '''
@@ -117,6 +146,7 @@ class ApiManager(http.Controller):
         if http_verb == 'DELETE':
         if http_verb == 'DELETE':
             return self.http_delete(resource, uid)
             return self.http_delete(resource, uid)
 
 
+        self.make_warn_log('Request method not allowed')
         return self.make_response({'error': 'method not allowed'}, 405) # method not allowed
         return self.make_response({'error': 'method not allowed'}, 405) # method not allowed
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -134,6 +164,7 @@ class ApiManager(http.Controller):
         for item in result:
         for item in result:
             data.append(item.dump())
             data.append(item.dump())
 
 
+        self.make_info_log('To send data response')
         return self.make_response(data);
         return self.make_response(data);
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -149,6 +180,7 @@ class ApiManager(http.Controller):
         if not result.exists():
         if not result.exists():
             return self.make_response({'error': 'cannot be deleted'})
             return self.make_response({'error': 'cannot be deleted'})
 
 
+        self.make_info_log('To delete object')
         return self.make_response({'response': result.unlink()})
         return self.make_response({'response': result.unlink()})
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -172,8 +204,10 @@ class ApiManager(http.Controller):
 
 
             module = request.env['ir.module.module'].sudo().search([('name', '=', module_name)])
             module = request.env['ir.module.module'].sudo().search([('name', '=', module_name)])
 
 
+            self.make_info_log('To check resource availability')
             return True if module.state == 'installed' and len(module) != 0 else False
             return True if module.state == 'installed' and len(module) != 0 else False
         except Exception, e:
         except Exception, e:
+            self.make_error_log('Requested resource is not available')
             return False;
             return False;
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -181,7 +215,7 @@ class ApiManager(http.Controller):
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
     def valid_token(self):
     def valid_token(self):
         try:
         try:
-            print request.httprequest.headers
+            # print request.httprequest.user_agent.browser
 
 
             auth_header = request.httprequest.headers[JWT_HEADER]
             auth_header = request.httprequest.headers[JWT_HEADER]
 
 
@@ -203,9 +237,10 @@ class ApiManager(http.Controller):
             if not self.get_crypt_context().verify(decoded['password'], user.password_crypt):
             if not self.get_crypt_context().verify(decoded['password'], user.password_crypt):
                 return False
                 return False
 
 
+            self.make_info_log('Token is valid')
             return True
             return True
         except Exception, e:
         except Exception, e:
-            print e
+            self.make_error_log('Token is not valid')
             return False
             return False
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -219,8 +254,10 @@ class ApiManager(http.Controller):
             for i in range(len(RESOURCES_MAP[resource]['filters'])):
             for i in range(len(RESOURCES_MAP[resource]['filters'])):
                 filters.append(tuple(RESOURCES_MAP[resource]['filters'][i]))
                 filters.append(tuple(RESOURCES_MAP[resource]['filters'][i]))
 
 
+            self.make_info_log('Successfully resource inflated')
             return (model, filters)
             return (model, filters)
         except Exception, e:
         except Exception, e:
+            self.make_error_log('Cannot inflate resource')
             return (None, None)
             return (None, None)
 
 
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
@@ -228,3 +265,21 @@ class ApiManager(http.Controller):
     # --------------------------------------------------------------------------
     # --------------------------------------------------------------------------
     def get_crypt_context(self):
     def get_crypt_context(self):
         return CRYPT_CONTEXT
         return CRYPT_CONTEXT
+
+    # --------------------------------------------------------------------------
+    # Make log for warnings
+    # --------------------------------------------------------------------------
+    def make_warn_log(self, log):
+        LOGGER.warning(log)
+
+    # --------------------------------------------------------------------------
+    # Make log for infos
+    # --------------------------------------------------------------------------
+    def make_info_log(self, log):
+        LOGGER.error(log)
+
+    # --------------------------------------------------------------------------
+    # Make log for errors
+    # --------------------------------------------------------------------------
+    def make_error_log(self, log):
+        LOGGER.error(log)

BIN
controllers/http_handler.pyc