提交 b00d8b0c198c65902505c13f008e5cfa31065582

作者 nheweijun
2 个父辈 63f18135 832c4f7b

2022.01.18 部署现场前

... ... @@ -72,7 +72,7 @@ def create_app():
72 72
73 73 # swagger设置
74 74 swagger_config = Swagger.DEFAULT_CONFIG
75   - swagger_config.update(configure.swagger_configure)
  75 + swagger_config.update({"title": "DMapManager"})
76 76 Swagger(app, config=swagger_config)
77 77
78 78 # 创建数据库
... ... @@ -93,7 +93,7 @@ def create_app():
93 93 config_oauth(app)
94 94
95 95 # 注册blueprint,查找BlueprintApi的子类
96   - for scan in configure.scan_module:
  96 + for scan in ["app.modules"]:
97 97 for api in find_class(scan, BlueprintApi):
98 98 app.register_blueprint(api.bp)
99 99
... ...
... ... @@ -3,7 +3,7 @@ from authlib.integrations.flask_oauth2 import current_token
3 3 from flask import abort
4 4 from app.modules.auth.oauth2 import require_oauth
5 5 from flask import request
6   -
  6 +import configure
7 7 # 认证装饰器
8 8
9 9
... ... @@ -17,25 +17,28 @@ class auth_decorator(object):
17 17
18 18 @wraps(func)
19 19 def wrapped_function(*args, **kwargs):
20   - token = request.headers.get('Authorization')
21   - if not token:
22   - abort(401)
23   - validate_token()
24   - if current_token and current_token.user and current_token.user.role:
25   - print(func.__name__)
26   - if self.permission and len(self.permission) > 0:
27   - # 判断角色是否在permission列表中
28   - role = current_token.user.role
29   - for p in self.permission:
30   - if role == p:
31   - return func(*args, **kwargs)
  20 + if configure.PermissionActive:
  21 + token = request.headers.get('Authorization')
  22 + if not token:
  23 + abort(401)
  24 + validate_token()
  25 + if current_token and current_token.user and current_token.user.role:
  26 + print(func.__name__)
  27 + if self.permission and len(self.permission) > 0:
  28 + # 判断角色是否在permission列表中
  29 + role = current_token.user.role
  30 + for p in self.permission:
  31 + if role == p:
  32 + return func(*args, **kwargs)
32 33
33   - abort(403)
  34 + abort(403)
  35 + else:
  36 + # 无permission,不校验
  37 + return func(*args, **kwargs)
34 38 else:
35   - # 无permission,不校验
36   - return func(*args, **kwargs)
  39 + abort(401) # 无token,401
37 40 else:
38   - abort(401) # 无token,401
  41 + return func(*args, **kwargs)
39 42
40 43 @require_oauth(self.scope)
41 44 def validate_token():
... ...
... ... @@ -3,7 +3,7 @@ from authlib.integrations.flask_oauth2 import current_token
3 3 from flask import abort
4 4 from app.modules.auth.oauth2 import require_oauth
5 5 from flask import request
6   -
  6 +import configure
7 7 # 认证装饰器
8 8
9 9
... ... @@ -14,16 +14,19 @@ class token_decorator(object):
14 14 def __call__(self, func):
15 15 @wraps(func)
16 16 def wrapped_function(*args, **kwargs):
17   - token = request.headers.get('Authorization')
18   - if token:
19   - validate_token()
20   - if current_token and current_token.user:
21   - return func(*args, **kwargs)
22   - else:
23   - abort(403)
  17 + if configure.PermissionActive:
  18 + token = request.headers.get('Authorization')
  19 + if token:
  20 + validate_token()
  21 + if current_token and current_token.user:
  22 + return func(*args, **kwargs)
  23 + else:
  24 + abort(403)
24 25
  26 + else:
  27 + abort(401) # 无token,401
25 28 else:
26   - abort(401) # 无token,401
  29 + return func(*args, **kwargs)
27 30
28 31 @require_oauth(self.scope)
29 32 def validate_token():
... ...
... ... @@ -6,13 +6,12 @@ from app.util import BlueprintApi
6 6 from flask import Blueprint, render_template, redirect, request, session, jsonify
7 7 from sqlalchemy import and_
8 8 from .models import *
9   -from .oauth2 import authorization, generate_user_info
  9 +from .oauth2 import authorization, generate_user_info,require_oauth
10 10 from authlib.oauth2 import OAuth2Error
11 11 from authlib.integrations.flask_oauth2 import current_token
12 12 from . import user_create, client_create, client_query, user_query, user_update, user_delete
13 13 import configure
14 14 from app.decorators.auth_decorator import auth_decorator
15   -from app.decorators.token_decorator import token_decorator
16 15
17 16
18 17 def current_user():
... ... @@ -82,7 +81,7 @@ class DataManager(BlueprintApi):
82 81
83 82 @staticmethod
84 83 @bp.route("/userinfo")
85   - @token_decorator("profile")
  84 + @require_oauth("profile")
86 85 def api_me():
87 86 try:
88 87 return jsonify(generate_user_info(current_token.user, current_token.scope))
... ...
... ... @@ -5,15 +5,13 @@
5 5
6 6
7 7 from ..models import Database,db,Table,TableVacuate,DES
8   -
9   -
10   -
11 8 from app.util.component.ApiTemplate import ApiTemplate
12 9 from app.util.component.PGUtil import PGUtil
13 10 import configure
14 11 from osgeo.ogr import DataSource
15 12 from flask import current_app
16 13 from authlib.integrations.flask_oauth2 import current_token
  14 +from app.util.component.UserCheck import UserCheck
17 15
18 16
19 17 class Api(ApiTemplate):
... ... @@ -24,9 +22,8 @@ class Api(ApiTemplate):
24 22 try:
25 23
26 24 database = db.session.query(Database).filter_by(guid=self.para.get("guid")).one_or_none()
27   - if database.creator != current_token.user.username:
28   - raise Exception("缺乏权限!")
29   -
  25 + #验证权限
  26 + UserCheck.verify(database.creator,current_token.user.username)
30 27 if configure.VACUATE_DB_URI:
31 28 va_ds: DataSource = PGUtil.open_pg_data_source(1, configure.VACUATE_DB_URI)
32 29 else:
... ...
... ... @@ -5,14 +5,12 @@
5 5
6 6 from ..models import Database,db,DES
7 7 from contextlib import closing
8   -
9 8 from sqlalchemy import create_engine
10   -
11 9 import datetime
12 10 from . import database_alias_check
13   -
14 11 from app.util.component.ApiTemplate import ApiTemplate
15   -
  12 +from authlib.integrations.flask_oauth2 import current_token
  13 +from app.util.component.UserCheck import UserCheck
16 14 from app.util.component.PGUtil import PGUtil
17 15 class Api(ApiTemplate):
18 16 api_name = "修改数据库"
... ... @@ -28,8 +26,8 @@ class Api(ApiTemplate):
28 26 database = Database.query.filter_by(guid=guid)
29 27 dbase:Database = database.one_or_none()
30 28
31   - if dbase.creator != "":
32   - raise Exception("缺乏权限!")
  29 + #验证权限
  30 + UserCheck.verify(dbase.creator,current_token.user.username)
33 31
34 32 update_dict={}
35 33
... ... @@ -40,7 +38,6 @@ class Api(ApiTemplate):
40 38 res["msg"] = "请填写参数!"
41 39 return res
42 40
43   -
44 41 if alias:
45 42 # 检测一波别名
46 43 check_alias = database_alias_check.Api().result
... ...
... ... @@ -74,7 +74,7 @@ class DataManager(BlueprintApi):
74 74 @staticmethod
75 75 @bp.route('/GetMeta', methods=['POST'])
76 76 @swag_from(get_meta.Api.api_doc)
77   - @auth_decorator(configure.DataPermission)
  77 + # @auth_decorator(configure.DataPermission)
78 78 def get_meta():
79 79 """
80 80 数据Meta
... ...
... ... @@ -7,7 +7,7 @@
7 7 from ..models import *
8 8
9 9 import traceback
10   -
  10 +from .util.SchemaAdapter import SchemaAdapter
11 11 from osgeo.ogr import DataSource,Layer,FeatureDefn,FieldDefn,Feature
12 12 from osgeo import gdal,ogr
13 13 import os
... ... @@ -51,6 +51,15 @@ class Api(ApiTemplate):
51 51 db.session.commit()
52 52
53 53 res["data"] = "下载任务已提交!"
  54 +
  55 + # 提示信息
  56 + res["msg"] = "下载格式为shp时,属性名长度超过10个字符将截取为10个字符,binary类型的属性将改成integer类型且值为0。"
  57 + # table_names = self.para.get("table_name").split(",")
  58 + #
  59 + # for tn in table_names:
  60 + # table = Table.query.filter_by()
  61 +
  62 + res["msg"] = ""
54 63 res["result"] = True
55 64
56 65 except Exception as e:
... ... @@ -64,11 +73,11 @@ class Api(ApiTemplate):
64 73 task_writer = None
65 74
66 75 # 设置编码
67   - encoding = para.get("encoding")
68   - if encoding:
69   - gdal.SetConfigOption("SHAPE_ENCODING", encoding)
70   - else:
71   - gdal.SetConfigOption("SHAPE_ENCODING", "UTF-8")
  76 + # encoding = para.get("encoding")
  77 + # if encoding:
  78 + # gdal.SetConfigOption("SHAPE_ENCODING", encoding)
  79 + # else:
  80 + # gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
72 81
73 82 try:
74 83
... ... @@ -133,10 +142,14 @@ class Api(ApiTemplate):
133 142
134 143
135 144 fid = layer.GetFIDColumn()
136   - pg_layer: Layer = data_source.CreateLayer(table_name, layer.GetSpatialRef(), layer.GetGeomType(),["ENCODING=UTF-8"])
  145 + pg_layer: Layer = data_source.CreateLayer(table_name, layer.GetSpatialRef(), layer.GetGeomType(),["ENCODING=GBK"])
  146 +
137 147 schema = [sche for sche in layer.schema if not sche.name.__eq__(fid)]
  148 + # 忽略binary字段
  149 + SchemaAdapter.neglect_binary(schema)
138 150
139 151 pg_layer.CreateFields(schema)
  152 +
140 153 layer.ResetReading()
141 154
142 155 count = 0
... ... @@ -147,6 +160,11 @@ class Api(ApiTemplate):
147 160 StructurePrint().print("{}图层已下载{}个对象".format(table_name, count))
148 161
149 162 data_source.Destroy()
  163 +
  164 + #增加cpg文件
  165 + with open(dirpath + "/{}.cpg".format(table_name),"w") as f:
  166 + f.write("GBK")
  167 +
150 168 ZipUtil.create_zip(os.path.join(parent, "file_tmp", table_name+"_"+uuid_) + ".zip", [dirpath])
151 169 return "http://" + configure.deploy_ip_host + "/API/IO/Download/{}".format(table_name+"_"+uuid_ + ".zip")
152 170
... ... @@ -208,6 +226,11 @@ class Api(ApiTemplate):
208 226 return data
209 227
210 228
  229 + def msg(self):
  230 + pass
  231 +
  232 +
  233 +
211 234 api_doc={
212 235 "tags":["IO接口"],
213 236 "description":"下载数据",
... ... @@ -215,10 +238,10 @@ class Api(ApiTemplate):
215 238 {"name": "table_name",
216 239 "in": "formData",
217 240 "type":"string","description":"支持多图层下载,以逗号相隔","required":"true"},
218   - {"name": "encoding",
219   - "in": "formData",
220   - "type": "string",
221   - "enum":["GBK","UTF-8"]},
  241 + # {"name": "encoding",
  242 + # "in": "formData",
  243 + # "type": "string",
  244 + # "enum":["GBK","UTF-8"]},
222 245 {"name": "download_type",
223 246 "in": "formData",
224 247 "type": "string",
... ...
... ... @@ -13,7 +13,7 @@ import json
13 13 from app.util.component.ApiTemplate import ApiTemplate
14 14 from .get_meta import Api as MetaApi
15 15 from threading import Thread
16   -from ..util.EntryDataVacuate import EntryDataVacuate
  16 +from .util.EntryDataVacuate import EntryDataVacuate
17 17
18 18 class Api(ApiTemplate):
19 19
... ...
... ... @@ -104,7 +104,7 @@ class EntryDataVacuate:
104 104 dir_path = os.path.dirname(dir_path)
105 105 i+=1
106 106 if i<30:
107   - # shutil.rmtree(dir_path,True)
  107 + shutil.rmtree(dir_path,True)
108 108 StructurePrint().print("删除文件成功!")
109 109 else:
110 110 raise Exception("找不到文件!")
... ...
  1 +# coding=utf-8
  2 +#author: 4N
  3 +#createtime: 2022/1/17
  4 +#email: nheweijun@sina.com
  5 +from osgeo import ogr
  6 +
  7 +class SchemaAdapter:
  8 + @classmethod
  9 + def neglect_binary(cls,schema):
  10 + for sche in schema:
  11 + if sche.GetType() == ogr.OFTBinary:
  12 + sche.SetType(ogr.OFTInteger)
  13 +
  14 + return schema
\ No newline at end of file
... ...
... ... @@ -4,11 +4,10 @@
4 4
5 5 from ..models import Columns
6 6 import datetime
7   -
8   -
9 7 from app.models import db
10 8 from app.util.component.ApiTemplate import ApiTemplate
11   -
  9 +from authlib.integrations.flask_oauth2 import current_token
  10 +from app.util.component.UserCheck import UserCheck
12 11
13 12 class Api(ApiTemplate):
14 13 api_name = "修改属性"
... ... @@ -24,8 +23,8 @@ class Api(ApiTemplate):
24 23 if not column:
25 24 raise Exception("数据不存在!")
26 25
27   - if column.relate_table.relate_database.creator != "":
28   - raise Exception("缺乏权限!")
  26 + #验证权限
  27 + UserCheck.verify(column.relate_table.relate_database.creator,current_token.user.username)
29 28
30 29 try:
31 30 if self.para.get("column_alias"):
... ...
... ... @@ -2,21 +2,16 @@
2 2 #createtime: 2021/1/27
3 3 #email: nheweijun@sina.com
4 4
5   -
6   -
7   -import traceback
8 5 from ..models import Table,Database,DES
9   -
10   -
11 6 from osgeo.ogr import DataSource
12   -
13   -
14 7 from app.models import db
15 8 from app.util.component.ApiTemplate import ApiTemplate
16   -
17 9 from app.util.component.PGUtil import PGUtil
18 10 import configure
19 11 from flask import current_app
  12 +from authlib.integrations.flask_oauth2 import current_token
  13 +from app.util.component.UserCheck import UserCheck
  14 +
20 15 class Api(ApiTemplate):
21 16 api_name = "删除表"
22 17 def process(self):
... ... @@ -37,11 +32,12 @@ class Api(ApiTemplate):
37 32
38 33
39 34 table = table.one_or_none()
40   -
41   -
42   -
43 35 # 删除真实数据
44 36 database = Database.query.filter_by(guid=table.database_guid).one_or_none()
  37 +
  38 + #验证权限
  39 + UserCheck.verify(database.creator,current_token.user.username)
  40 +
45 41 if not database:
46 42 res["result"]=False
47 43 res["msg"]= "数据库不存在!"
... ...
... ... @@ -2,16 +2,14 @@
2 2 #createtime: 2021/1/27
3 3 #email: nheweijun@sina.com
4 4
5   -
6   -
7 5 from ..models import *
8   -
9 6 import json
10   -
11 7 from sqlalchemy.orm import Session
12 8 import datetime
13 9 from app.util.component.ApiTemplate import ApiTemplate
14 10 from app.util.component.PGUtil import PGUtil
  11 +from authlib.integrations.flask_oauth2 import current_token
  12 +from app.util.component.UserCheck import UserCheck
15 13
16 14 class Api(ApiTemplate):
17 15 api_name = "修改表信息"
... ... @@ -34,8 +32,8 @@ class Api(ApiTemplate):
34 32 res["msg"]= "数据不存在!"
35 33 return res
36 34
37   - if table.relate_database.creator != "":
38   - raise Exception("缺乏权限!")
  35 + #验证权限
  36 + UserCheck.verify(table.relate_database.creator,current_token.user.username)
39 37
40 38 if self.para.__contains__("catalog_guid"):
41 39 if catalog_guid is None:
... ...
... ... @@ -2,16 +2,11 @@
2 2 #createtime: 2021/1/27
3 3 #email: nheweijun@sina.com
4 4
5   -
6   -
7 5 import traceback
8 6 from ..models import Table,Database,Columns,db,TableVacuate,Task,Process,DES
9   -
10 7 from osgeo.ogr import DataSource,FeatureDefn,FieldDefn,Layer
11   -
12 8 import datetime
13 9 import uuid
14   -
15 10 from sqlalchemy.orm import Session
16 11 from app.util.component.SQLUtil import SQLUtil
17 12 from app.util.component.PGUtil import PGUtil
... ... @@ -22,7 +17,8 @@ from app.util.component.TaskController import TaskController
22 17 from app.util.component.TaskWriter import TaskWriter
23 18 import multiprocessing
24 19 import configure
25   -
  20 +from authlib.integrations.flask_oauth2 import current_token
  21 +from app.util.component.UserCheck import UserCheck
26 22 class Api(ApiTemplate):
27 23 api_name = "数据刷新"
28 24 def process(self):
... ... @@ -32,6 +28,9 @@ class Api(ApiTemplate):
32 28 database_guid = self.para.get("database_guid")
33 29 database = Database.query.filter_by(guid=database_guid).one_or_none()
34 30
  31 + #验证权限
  32 + UserCheck.verify(database.creator,current_token.user.username)
  33 +
35 34 if database.creator != "":
36 35 raise Exception("缺乏权限!")
37 36
... ...
... ... @@ -21,10 +21,10 @@ from app.util.component.TaskController import TaskController
21 21 from app.util.component.TaskWriter import TaskWriter
22 22 from osgeo.ogr import DataSource,Layer,Geometry
23 23 from osgeo import ogr
  24 +from authlib.integrations.flask_oauth2 import current_token
  25 +from app.util.component.UserCheck import UserCheck
24 26
25 27
26   -from sqlalchemy.orm import Session
27   -
28 28
29 29 class Api(ApiTemplate):
30 30
... ... @@ -42,8 +42,8 @@ class Api(ApiTemplate):
42 42 if not table:
43 43 raise Exception("数据不存在!")
44 44
45   - if table.relate_database.creator != "":
46   - raise Exception("缺乏权限!")
  45 + #验证权限
  46 + UserCheck.verify(table.relate_database.creator,current_token.user.username)
47 47
48 48 pg_ds :DataSource= PGUtil.open_pg_data_source(0,DES.decode(table.relate_database.sqlalchemy_uri))
49 49 layer = pg_ds.GetLayerByName(table.name)
... ...
... ... @@ -14,7 +14,8 @@ import uuid
14 14 import configure
15 15 from osgeo.ogr import DataSource,Layer,Geometry
16 16 from osgeo import ogr
17   -
  17 +from authlib.integrations.flask_oauth2 import current_token
  18 +from app.util.component.UserCheck import UserCheck
18 19 from app.util.component.VacuateConf import VacuateConf
19 20 from app.util.component.TaskController import TaskController
20 21 from app.util.component.TaskWriter import TaskWriter
... ... @@ -40,8 +41,8 @@ class Api(ApiTemplate):
40 41 if not table:
41 42 raise Exception("数据不存在!")
42 43
43   - if table.relate_database.creator != "":
44   - raise Exception("缺乏权限!")
  44 + #验证权限
  45 + UserCheck.verify(table.relate_database.creator,current_token.user.username)
45 46
46 47 # 判断图层是否存在
47 48
... ...
... ... @@ -4,10 +4,9 @@
4 4 #email: nheweijun@sina.com
5 5
6 6 from ..models import db,Task
7   -
8   -
9 7 from app.util.component.ApiTemplate import ApiTemplate
10   -
  8 +from authlib.integrations.flask_oauth2 import current_token
  9 +from app.util.component.UserCheck import UserCheck
11 10
12 11 class Api(ApiTemplate):
13 12 api_name = "删除任务"
... ... @@ -18,29 +17,19 @@ class Api(ApiTemplate):
18 17 res = {}
19 18 try:
20 19 task_guid = self.para.get("task_guid")
21   - state = self.para.get("state")
22   - creator = self.para.get("creator")
  20 + task = Task.query.filter_by(guid=task_guid).one_or_none()
  21 +
  22 + if not task:
  23 + raise Exception("任务不存在!")
  24 +
  25 + #验证权限
  26 + UserCheck.verify(task.creator,current_token.user.username)
23 27
24   - tasks = Task.query
25   - if task_guid:
26   - tasks = tasks.filter_by(guid=task_guid)
27   - if state:
28   - state = int(state)
29   - tasks = tasks.filter_by(state=state)
30   - if creator:
31   - tasks = tasks.filter_by(creator=creator)
32   - tasks = tasks.all()
  28 + db.session.delete(task)
  29 + db.session.commit()
33 30
34   - if not tasks:
35   - res["result"] = False
36   - res["msg"] = "数据不存在!"
37   - return res
38   - else:
39   - for task in tasks:
40   - db.session.delete(task)
41   - db.session.commit()
42   - res["msg"] = "删除成功!"
43   - res["result"] = True
  31 + res["msg"] = "删除成功!"
  32 + res["result"] = True
44 33 except Exception as e:
45 34 db.session.rollback()
46 35 raise e
... ... @@ -53,12 +42,6 @@ class Api(ApiTemplate):
53 42 {"name": "task_guid",
54 43 "in": "formData",
55 44 "type": "string"},
56   - {"name": "state",
57   - "in": "formData",
58   - "type": "string"},
59   - {"name": "creator",
60   - "in": "formData",
61   - "type": "string"},
62 45
63 46 ],
64 47 "responses": {
... ...
... ... @@ -13,6 +13,8 @@ import platform
13 13 import json
14 14 import datetime
15 15 import uuid
  16 +from authlib.integrations.flask_oauth2 import current_token
  17 +from app.util.component.UserCheck import UserCheck
16 18 class Api(ApiTemplate):
17 19 api_name = "停止任务"
18 20 def para_check(self):
... ... @@ -23,6 +25,12 @@ class Api(ApiTemplate):
23 25 try:
24 26 task_guid = self.para.get("task_guid")
25 27 task = Task.query.filter_by(guid=task_guid).one_or_none()
  28 + if not task:
  29 + raise Exception("任务不存在!")
  30 +
  31 + #验证权限
  32 + UserCheck.verify(task.creator,current_token.user.username)
  33 +
26 34 pid = task.task_pid
27 35 try:
28 36 if platform.system().lower().__contains__("windows"):
... ...
... ... @@ -19,6 +19,7 @@ class Api(ApiTemplate):
19 19 catalogs = ServiceCatalog.query.all()
20 20 res["data"]=[]
21 21
  22 +
22 23 # 获取全部影像服务
23 24 image_engines = ServiceEngine.query.filter_by(type="ImageServer").all()
24 25 image_services = []
... ... @@ -30,6 +31,8 @@ class Api(ApiTemplate):
30 31 else:
31 32 image_services.extend(response.json()["data"]["list"])
32 33
  34 +
  35 +
33 36 for cata in catalogs:
34 37 catalog_guids = [c.guid for c in ServiceCatalog.query.filter(ServiceCatalog.path.like("%" + cata.guid + "%")).all()]
35 38 service_count = Service.query.filter(Service.catalog_guid.in_(catalog_guids)).count()
... ... @@ -47,7 +50,7 @@ class Api(ApiTemplate):
47 50 res["data"].append(cata_json)
48 51
49 52 res["result"] = True
50   -
  53 + res["service_count"] = len(image_services) + Service.query.count()
51 54 except Exception as e:
52 55 raise e
53 56 return res
... ...
... ... @@ -6,6 +6,8 @@
6 6
7 7 from app.util.component.ApiTemplate import ApiTemplate
8 8 import requests
  9 +from authlib.integrations.flask_oauth2 import current_token
  10 +from app.util.component.UserCheck import UserCheck
9 11
10 12 class Api(ApiTemplate):
11 13
... ... @@ -15,6 +17,14 @@ class Api(ApiTemplate):
15 17 # 返回结果
16 18 res = {}
17 19 try:
  20 +
  21 + user_req: requests.Response = requests.post("{}/API/Service/Info".format(self.para.get("url")),
  22 + data={"guid":self.para.get("guid")})
  23 + if not user_req.json().get("result"):
  24 + raise Exception("服务不存在!")
  25 + # 验证权限
  26 + UserCheck.verify(user_req.json().get("data").get("service").get("creator"), current_token.user.username)
  27 +
18 28 url = "{}/API/Service/Delete".format(self.para.get("url"))
19 29 response:requests.Response = requests.post(url,data=self.para)
20 30 if not response.json().get("result"):
... ...
... ... @@ -6,6 +6,8 @@
6 6
7 7 from app.util.component.ApiTemplate import ApiTemplate
8 8 import requests
  9 +from authlib.integrations.flask_oauth2 import current_token
  10 +from app.util.component.UserCheck import UserCheck
9 11
10 12 class Api(ApiTemplate):
11 13
... ... @@ -15,6 +17,14 @@ class Api(ApiTemplate):
15 17 # 返回结果
16 18 res = {}
17 19 try:
  20 +
  21 + user_req: requests.Response = requests.post("{}/API/Service/Info".format(self.para.get("url")),
  22 + data={"guid":self.para.get("guid")})
  23 + if not user_req.json().get("result"):
  24 + raise Exception("服务不存在!")
  25 + # 验证权限
  26 + UserCheck.verify(user_req.json().get("data").get("service").get("creator"), current_token.user.username)
  27 +
18 28 url = "{}/API/Service/Edit".format(self.para.get("url"))
19 29 response:requests.Response = requests.post(url,data=self.para)
20 30 if not response.json().get("result"):
... ...
... ... @@ -7,9 +7,13 @@
7 7 from app.util.component.ApiTemplate import ApiTemplate
8 8 import uuid
9 9 from ..models import Service,MapService,db,ServiceFunction
10   -
11   -
  10 +import requests
  11 +import configure
  12 +import json
12 13 import datetime
  14 +from authlib.integrations.flask_oauth2 import current_token
  15 +from app.util.component.UserCheck import UserCheck
  16 +
13 17 class Api(ApiTemplate):
14 18
15 19 api_name = "修改MapService服务"
... ... @@ -22,9 +26,14 @@ class Api(ApiTemplate):
22 26 try:
23 27 guid = self.para.get("guid")
24 28 functions = self.para.get("functions")
25   - service = Service.query.filter_by(guid=guid)
  29 + service :Service = Service.query.filter_by(guid=guid)
26 30 this_time = datetime.datetime.now()
27 31
  32 + if not service:
  33 + raise Exception("服务不存在!")
  34 +
  35 + #验证权限
  36 + UserCheck.verify(service.creator,current_token.user.username)
28 37
29 38 service_update = {"update_time":this_time}
30 39 map_service_update = {}
... ... @@ -35,7 +44,20 @@ class Api(ApiTemplate):
35 44 if key in ["name","tile","project","capabilities"]:
36 45 map_service_update[key] = self.para.get(key)
37 46
38   -
  47 + para = {"name":self.para.get("name"),
  48 + "title":self.para.get("title"),
  49 + "type":"mapserver",
  50 + "capabilities":2,
  51 + "project":self.para.get("project")}
  52 +
  53 + map_service_register_url = "{}/dmap/api/manager/regservice".format(configure.vector_engine)
  54 + resp: requests.Response = requests.post(map_service_register_url,data=json.dumps(para),
  55 + headers={'Content-Type':'application/json'},timeout=3
  56 + )
  57 + resp.encoding="utf-8"
  58 + resp_json = resp.json()
  59 + if not resp_json["status"]=="1":
  60 + raise Exception("调用矢量服务的修改服务接口失败!")
39 61
40 62 # 修改功能
41 63 if functions:
... ...
... ... @@ -8,7 +8,9 @@ from app.models import db
8 8 from app.modules.service.models import Service
9 9 from app.modules.service.models import TileService
10 10 from app.modules.service.models import MapService
11   -import requests
  11 +from authlib.integrations.flask_oauth2 import current_token
  12 +from app.util.component.UserCheck import UserCheck
  13 +
12 14 class Api(ApiTemplate):
13 15
14 16 api_name = "服务删除"
... ... @@ -24,10 +26,12 @@ class Api(ApiTemplate):
24 26
25 27 #删除本地服务
26 28 if s_type in ["切片服务","地图服务"]:
27   - service = Service.query.filter_by(guid=guid).one_or_none()
28   -
  29 + service:Service = Service.query.filter_by(guid=guid).one_or_none()
29 30 if service:
30 31
  32 + # 验证权限
  33 + UserCheck.verify(service.creator, current_token.user.username)
  34 +
31 35 try:
32 36 if service.type.__eq__("切片服务"):
33 37 #调用接口
... ... @@ -37,6 +41,7 @@ class Api(ApiTemplate):
37 41 if service.type.__eq__("地图服务"):
38 42 map_service = MapService.query.filter_by(service_guid=guid).one_or_none()
39 43 db.session.delete(map_service)
  44 +
40 45 service_functions = service.relate_service_functions.all()
41 46 for function in service_functions:
42 47 db.session.delete(function)
... ...
... ... @@ -7,6 +7,7 @@ from app.util.component.ApiTemplate import ApiTemplate
7 7 from app.modules.service.models import Service
8 8 import requests
9 9
  10 +
10 11 class Api(ApiTemplate):
11 12 api_name = "修改服务"
12 13 def process(self):
... ...
... ... @@ -17,14 +17,14 @@ class DataManager(BlueprintApi):
17 17
18 18 service_type = ["切片服务"]
19 19
20   - @staticmethod
21   - @bp.route('/UploadOverview', methods=['POST'])
22   - @swag_from(upload_oview.Api.api_doc)
23   - def api_upload_oview():
24   - """
25   - 上传缩略图
26   - """
27   - return upload_oview.Api().result
  20 + # @staticmethod
  21 + # @bp.route('/UploadOverview', methods=['POST'])
  22 + # @swag_from(upload_oview.Api.api_doc)
  23 + # def api_upload_oview():
  24 + # """
  25 + # 上传缩略图
  26 + # """
  27 + # return upload_oview.Api().result
28 28
29 29
30 30 @staticmethod
... ...
... ... @@ -14,6 +14,9 @@ from .util.ProjectFile import ProjectFile
14 14 import json
15 15 from requests import Response
16 16 import configure
  17 +from authlib.integrations.flask_oauth2 import current_token
  18 +from app.util.component.UserCheck import UserCheck
  19 +
17 20 class Api(ApiTemplate):
18 21
19 22 api_name = "修改切片服务"
... ... @@ -23,6 +26,11 @@ class Api(ApiTemplate):
23 26 try:
24 27 guid = self.para.get("guid")
25 28 service = Service.query.filter_by(guid=guid)
  29 + if not service:
  30 + raise Exception("服务不存在!")
  31 + #验证权限
  32 + UserCheck.verify(service.creator,current_token.user.username)
  33 +
26 34 this_time = datetime.datetime.now()
27 35
28 36 service_update = {"update_time":this_time}
... ...
... ... @@ -27,7 +27,6 @@ class FileProcess:
27 27 StructurePrint().print(store_file)
28 28
29 29 file.save(store_file)
30   -
31 30 if platform.system().lower() == 'linux':
32 31 #设置为444权限
33 32 os.chmod(store_file, stat.S_IRUSR + stat.S_IRGRP + stat.S_IROTH)
... ...
  1 +# coding=utf-8
  2 +#author: 4N
  3 +#createtime: 2022/1/14
  4 +#email: nheweijun@sina.com
  5 +
  6 +import configure
  7 +class UserCheck:
  8 +
  9 + @classmethod
  10 + def verify(cls,owner,operator):
  11 + if configure.PermissionActive:
  12 + if configure.PermissionActive and operator != "admin" and owner !=operator:
  13 + raise Exception("缺乏权限!")
... ...
... ... @@ -6,7 +6,7 @@
6 6 import zipfile
7 7 import os
8 8 import uuid
9   -
  9 +import platform,stat
10 10 class ZipUtil:
11 11
12 12 @classmethod
... ... @@ -69,7 +69,6 @@ class ZipUtil:
69 69
70 70 os.chdir(os.path.dirname(store_path))
71 71 zip_file.close()
72   -
73 72 return store_path
74 73
75 74
... ...
... ... @@ -3,30 +3,22 @@ import logging
3 3 # 程序部署ip:host
4 4 deploy_ip_host = "172.26.40.105:8840"
5 5 # 系统数据库
6   -
7   -
8 6 SQLALCHEMY_DATABASE_URI = "postgresql://postgres:chinadci@172.26.60.100:5432/dmap_manager"
9 7
10   -
11 8 # 指定精华表所在位置(必须为空间库),设置为None则存放在各自的实体库中
12 9 #VACUATE_DB_URI = None
13 10 VACUATE_DB_URI = SQLALCHEMY_DATABASE_URI
14 11
15   -zookeeper = "172.26.99.168:2181"
16   -
17   -
18 12 #切片引擎
19 13 tile_engine = "http://172.26.99.160:6060"
20 14 #矢量引擎
21 15 vector_engine = "http://172.26.99.160:6060"
22 16
23   -
24 17 # 固定配置不需要修改
25   -swagger_configure = {"title": "DMapManager"}
26 18 entry_data_thread = 3
27   -scan_module = ["app.modules"] # API所在的模块
28 19 SECRET_KEY = b'_5#y2L"F4Q8z\n\xec]/'
29 20 # 权限
  21 +PermissionActive = False
30 22 UserPermission = ['admin']
31 23 MonitorPermission = ['admin']
32 24 DataPermission = ['admin', 'dataman']
... ...
... ... @@ -10,8 +10,8 @@ import threading
10 10
11 11 import time
12 12
13   -
14   -
  13 +from osgeo import ogr
  14 +from osgeo.ogr import *
15 15
16 16 # session:Session = get_db_session("postgresql://postgres:chinadci@172.26.99.168:5432/postgres")
17 17 # bbox="113.2470703125 22.840576171875,113.258056640625 22.8515625"
... ... @@ -69,13 +69,41 @@ if __name__ == '__main__':
69 69 # print(zoo.connected)
70 70 # print(zoo.get_children("/rpc"))
71 71
72   - if __name__ == '__main__':
73   - import re
  72 + fn = "PG: user=postgres password=chinadci host=172.26.99.160 port=5432 dbname=ceshi "
  73 + driver = ogr.GetDriverByName("PostgreSQL")
  74 + if driver is None:
  75 + raise Exception("打开PostgreSQL驱动失败,可能是当前GDAL未支持PostgreSQL驱动!")
  76 + ds = driver.Open(fn, 1)
74 77
75   - line = "广州市区"
76   - pattern = r"的区"
77   - matchObj = re.search(pattern, line)
78   - if matchObj:
79   - print("y")
80   - else:
81   - print("n")
\ No newline at end of file
  78 + layer:Layer = ds.GetLayerByName("shiyqzd_500_bdc")
  79 +
  80 +
  81 + driver2 = ogr.GetDriverByName("ESRI Shapefile")
  82 + data_source: DataSource = driver2.CreateDataSource("H://t3.shp")
  83 +
  84 +
  85 + fid = layer.GetFIDColumn()
  86 + pg_layer: Layer = data_source.CreateLayer("t", layer.GetSpatialRef(), layer.GetGeomType(),["ENCODING=GBK"])
  87 +
  88 + #可能有问题,不支持binary
  89 + schema = [sche for sche in layer.schema if not sche.name.__eq__(fid)]
  90 +
  91 + schema_chage = []
  92 + for sche in schema:
  93 + ss :FieldDefn = sche
  94 + if ss.GetType() == ogr.OFTBinary :
  95 + print(ss.name)
  96 + ss.SetType(ogr.OFTInteger)
  97 + schema_chage.append(ss)
  98 +
  99 + pg_layer.CreateFields(schema_chage)
  100 +
  101 +
  102 + count =0
  103 + for feature in layer:
  104 + pg_layer.CreateFeature(feature)
  105 + count+=1
  106 + if count==1000:
  107 + break
  108 +
  109 + data_source.Destroy()
\ No newline at end of file
... ...
注册登录 后发表评论