improve project and run it successfully
Showing
11 changed files
with
110 additions
and
47 deletions
... | @@ -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] |
... | ... |
server/others/__init__.py
0 → 100644
File mode changed
server/others/test_dg.py
0 → 100644
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 | ||
... | ... |
-
Please register or sign in to post a comment