7c9602c8 by 胡边

improve project and run it successfully

1 parent 3de48052
...@@ -3,4 +3,4 @@ ...@@ -3,4 +3,4 @@
3 from server.app import web_app 3 from server.app import web_app
4 4
5 if __name__ == "__main__": 5 if __name__ == "__main__":
6 web_app.run(host='0.0.0.0', port=80) 6 web_app.run(host='0.0.0.0', port=7788)
......
...@@ -5,8 +5,8 @@ from flask import request ...@@ -5,8 +5,8 @@ from flask import request
5 5
6 from server.database import db_adapter 6 from server.database import db_adapter
7 from server.database.models import User, UserToken 7 from server.database.models import User, UserToken
8 from server.utils import get_now 8 from server.utils import get_now, get_config
9 from server.utils.api_response import unauthorized, forbidden 9 from server.utils.api_response import unauthorized, forbidden, insecurity_request
10 10
11 11
12 def token_required(func): 12 def token_required(func):
...@@ -53,13 +53,29 @@ def admin_privilege_required(func): ...@@ -53,13 +53,29 @@ def admin_privilege_required(func):
53 return authenticate_and_call 53 return authenticate_and_call
54 54
55 55
56 def white_list_check(func):
57 """
58 check request's ip whether in config's white_list
59 """
60 def authenticate_and_call(*args, **kwargs):
61 if request.ipaddress not in get_config('white_list'):
62 return insecurity_request(message='%s' % request.ipaddress)
63 return func(*args, **kwargs)
64
65 authenticate_and_call.original = func.__name__
66 if hasattr(func, "original"):
67 authenticate_and_call.original = func.original
68 return authenticate_and_call
69
70
56 def __validate_token(): 71 def __validate_token():
57 if 'token' not in request.headers: 72 if 'token' not in request.headers:
58 return False 73 return False
59 74
60 t = db_adapter.find_first_object_by(UserToken, 75 t = db_adapter.find_first_object(UserToken,
61 token=request.headers['token']) 76 UserToken.token==request.headers['token'],
62 if not t or t.expire_date <= get_now(): 77 UserToken.expire_date<=get_now())
78 if not t:
63 return False 79 return False
64 80
65 return t.user 81 return t.user
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
3 3
4 from server.app import web_api 4 from server.app import web_api
5 from server.database import db_adapter 5 from server.database import db_adapter
6 from server.database.models import Host
7 from flask_restful import Resource 6 from flask_restful import Resource
8 7
9 8
...@@ -14,9 +13,9 @@ class TestResource(Resource): ...@@ -14,9 +13,9 @@ class TestResource(Resource):
14 13
15 class HostResource(Resource): 14 class HostResource(Resource):
16 def get(self): 15 def get(self):
17 return db_adapter.find_first_object_by(Host, id=1).dic() 16 return "passed"
18 17
19 18
20 def init_routes(): 19 def init_routes():
21 web_api.add_resource(TestResource, "/api/test") 20 web_api.add_resource(TestResource, "/api/test")
22 web_api.add_resource(HostResource, "/api/host")
...\ No newline at end of file ...\ No newline at end of file
21 web_api.add_resource(HostResource, "/api/users")
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 from server.log import log
4
3 5
4 class SQLAlchemyAdapterMetaClass(type): 6 class SQLAlchemyAdapterMetaClass(type):
5 @staticmethod 7 @staticmethod
...@@ -67,30 +69,30 @@ class SQLAlchemyAdapter(DBAdapter): ...@@ -67,30 +69,30 @@ class SQLAlchemyAdapter(DBAdapter):
67 """ Retrieve one object specified by the primary key 'pk' """ 69 """ Retrieve one object specified by the primary key 'pk' """
68 return ObjectClass.query.get(id) 70 return ObjectClass.query.get(id)
69 71
70 def find_all_objects(self, ObjectClass, *criterion): 72 def get_all_objects(self, ObjectClass, *criterion):
71 return ObjectClass.query.filter(*criterion).all() 73 return ObjectClass.query.filter(*criterion).all()
72 74
73 def find_all_objects_by(self, ObjectClass, **kwargs): 75 def get_all_objects_by(self, ObjectClass, **kwargs):
74 return ObjectClass.query.filter_by(**kwargs).all() 76 return ObjectClass.query.filter_by(**kwargs).all()
75 77
76 def find_all_objects_order_by(self, ObjectClass, limit=None, *order_by, **kwargs): 78 def get_all_objects_order_by(self, ObjectClass, limit=None, *order_by, **kwargs):
77 if limit is not None: 79 if limit is not None:
78 return ObjectClass.query.filter_by(**kwargs).order_by(*order_by).limit(limit) 80 return ObjectClass.query.filter_by(**kwargs).order_by(*order_by).limit(limit)
79 else: 81 else:
80 return ObjectClass.query.filter_by(**kwargs).order_by(*order_by).all() 82 return ObjectClass.query.filter_by(**kwargs).order_by(*order_by).all()
81 83
84 def get_first_object_by(self, ObjectClass, **kwargs):
85 return ObjectClass.query.filter_by(**kwargs).first()
86
82 def count(self, ObjectClass, *criterion): 87 def count(self, ObjectClass, *criterion):
83 return ObjectClass.query.filter(*criterion).count() 88 return ObjectClass.query.filter(*criterion).count()
84 89
85 def count_by(self, ObjectClass, **kwargs): 90 def count_by(self, ObjectClass, **kwargs):
86 return ObjectClass.query.filter_by(**kwargs).count() 91 return ObjectClass.query.filter_by(**kwargs).count()
87 92
88 def find_first_object(self, ObjectClass, *criterion): 93 def get_first_object(self, ObjectClass, *criterion):
89 return ObjectClass.query.filter(*criterion).first() 94 return ObjectClass.query.filter(*criterion).first()
90 95
91 def find_first_object_by(self, ObjectClass, **kwargs):
92 return ObjectClass.query.filter_by(**kwargs).first()
93
94 def add_object(self, inst): 96 def add_object(self, inst):
95 self.db_session.add(inst) 97 self.db_session.add(inst)
96 98
...@@ -125,3 +127,10 @@ class SQLAlchemyAdapter(DBAdapter): ...@@ -125,3 +127,10 @@ class SQLAlchemyAdapter(DBAdapter):
125 return query.delete(synchronize_session=False) 127 return query.delete(synchronize_session=False)
126 128
127 # ------------------------------ auto wrapped 'public' methods --- end ------------------------------ 129 # ------------------------------ auto wrapped 'public' methods --- end ------------------------------
130
131 def exec_sql(self, sql_str):
132 try:
133 self.session().execte(sql_str)
134 except Exception as ex:
135 log.error(ex)
136 return None
......
...@@ -46,14 +46,14 @@ args=(sys.stdout,) ...@@ -46,14 +46,14 @@ args=(sys.stdout,)
46 class=logging.handlers.TimedRotatingFileHandler 46 class=logging.handlers.TimedRotatingFileHandler
47 level=DEBUG 47 level=DEBUG
48 formatter=myFormatter 48 formatter=myFormatter
49 args=('/var/log/open-hackathon/sunnycloud.log','midnight',1,14) 49 args=('/var/log/isa.qa/isa.qa.log','midnight',1,14)
50 50
51 #define sqlLogHandler 51 #define sqlLogHandler
52 [handler_sqlLogHandler] 52 [handler_sqlLogHandler]
53 class=logging.handlers.TimedRotatingFileHandler 53 class=logging.handlers.TimedRotatingFileHandler
54 level=DEBUG 54 level=DEBUG
55 formatter=myFormatter 55 formatter=myFormatter
56 args=('/var/log/open-hackathon/sunnycloud.log','midnight',1,14) 56 args=('/var/log/isa.qa/isa.qa.log','midnight',1,14)
57 57
58 #define formatter 58 #define formatter
59 [formatter_myFormatter] 59 [formatter_myFormatter]
......
File mode changed
1 # -*- coding: utf-8 -*-
2
3 # 测试递归方法函数的使用--跟平台功能无关,但也不要删掉,谢谢!
4
5 import json
6
7
8 def restorkey(key):
9 with open("F:\\result.txt", "a") as f:
10 f.write(key)
11
12
13 def print_keyvalue_all(input_json, previous_key_str):
14
15 if isinstance(input_json, dict):
16
17 for key in input_json.keys():
18 key_str = previous_key_str + '/' + key
19 key_value = input_json.get(key)
20
21 if isinstance(key_value, dict):
22 print_keyvalue_all(key_value, key_str)
23
24 elif isinstance(key_value, list):
25 for json_array in key_value:
26 print_keyvalue_all(json_array, key_str)
27 else:
28 result = str(key_str) + " == " + str(key_value)
29 print result
30 restorkey("%s\n" % result)
31
32 elif isinstance(input_json, list):
33 for input_json_array in input_json:
34 print_keyvalue_all(input_json_array, previous_key_str)
35
36
37 if __name__ == '__main__':
38 with open('F:\\new.json') as json_file:
39 data = json.load(json_file)
40 print_keyvalue_all(data, '/')
...@@ -7,7 +7,7 @@ from datetime import timedelta ...@@ -7,7 +7,7 @@ from datetime import timedelta
7 from flask import request, g 7 from flask import request, g
8 8
9 from server.database import db_adapter 9 from server.database import db_adapter
10 from server.database import models 10 from server.database.models import User
11 from server.log import log 11 from server.log import log
12 from server.utils import get_now 12 from server.utils import get_now
13 from server.utils.api_response import ok, bad_request, internal_server_error 13 from server.utils.api_response import ok, bad_request, internal_server_error
...@@ -31,6 +31,20 @@ class UserService(object): ...@@ -31,6 +31,20 @@ class UserService(object):
31 "token": user_token.token() 31 "token": user_token.token()
32 } 32 }
33 33
34 def get_user_info(self, id):
35 return db_adapter.get_first_object_by(User, d=id)
36
37 def get_user_list(self, filter_json):
38 sql_condition = 1 == 1
39 for condition in filter_json:
40 if condition == 'begin_time':
41 sql_condition = sql_condition, User.condition > filter_json['begin_time']
42 elif condition == 'end_time':
43 sql_condition = sql_condition, User.condition < filter_json['end_time']
44 else:
45 sql_condition = sql_condition, User.condition == filter_json['condition']
46 return db_adapter.get_all_objects(User, sql_condition)
47
34 # --------------- helper private functions ---------------------# 48 # --------------- helper private functions ---------------------#
35 49
36 def __generate_api_token(self, user): 50 def __generate_api_token(self, user):
......
...@@ -3,14 +3,16 @@ ...@@ -3,14 +3,16 @@
3 3
4 from datetime import datetime 4 from datetime import datetime
5 5
6 from server.config import config
7
6 8
7 def get_now(): 9 def get_now():
8 return datetime.now() 10 return datetime.now()
9 11
10 12
11 def get_config(): 13 def get_config(key):
12 return None 14 return config[key]
13 15
14 16
15 def get_safe_config(): 17 def get_safe_config(key, default=None):
16 return None 18 return default if not config[key] else config[key]
......
...@@ -62,4 +62,11 @@ def internal_server_error(message="", ...@@ -62,4 +62,11 @@ def internal_server_error(message="",
62 return __response_with_code(500, message, friendly_message) 62 return __response_with_code(500, message, friendly_message)
63 63
64 64
65 def insecurity_request(message="",
66 friendly_message=(
67 'Invalid request ipaddress which not in'
68 'platform\'s white list.'
69 )):
70 return __response_with_code(412, message, friendly_message)
71
65 72
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2
3
4 class VM(object):
5 OS_TYPE_LINUX = 0
6 OS_TYPE_WINDOWS = 1
7
8
9 class NETWORK(object):
10 IP_TYPE_PUBLIC = 0
11 IP_TYPE_PRIVATE = 1
12
13
14 class DISK(object):
15 TYPE_SYSTEM = 0
16 TYPE_MOUNTED = 1
17
18 FORMAT_NTFS = 0
19 FORMAT_EXT4 = 1
20
21
22 class IMAGE(object):
23 TYPE_DEFAULT = 0 # Router or Monitor
24 TYPE_PROVIDER = 1 # vm images type
25 TYPE_CUSTOMIZE = 2 # created by users
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!