Ver Fonte

kerbros验证文件下载

liweiquan há 2 anos atrás
pai
commit
d08b24bcd5

+ 2 - 0
app/core/datasource/hive.py

@@ -2,6 +2,7 @@ import os
 from app.core.datasource.datasource import DataSourceBase
 from pyhive import hive
 from pyhive.exc import DatabaseError
+from app.utils.get_kerberos import get_kerberos_to_local
 from configs.logging import logger
 from utils import flat_map
 
@@ -44,6 +45,7 @@ class HiveDS(DataSourceBase):
             if self.kerberos == 0:
                 conn = hive.Connection(host=self.host, port=self.port, username=self.username, database=self.database_name)
             else:
+                get_kerberos_to_local(self.keytab)
                 os.system(f'kiinit -kt {self.keytab} {self.principal}')
                 conn = hive.Connection(host=self.host, database=self.database_name, port=self.port,  auth="KERBEROS", kerberos_service_name=self.kerberos_service_name)
 

+ 5 - 2
app/routers/files.py

@@ -1,7 +1,7 @@
 import io
 import json
 import time
-import uuid
+from datetime import datetime, timedelta, timezone
 import app.crud as crud
 from fastapi import APIRouter, File, UploadFile, Form, Depends
 from sqlalchemy.orm import Session
@@ -57,9 +57,12 @@ def upload_file(file: UploadFile = File(...), project_id: str=Form(...), file_ty
 def get_directory(project_id: str, user_id: str, file_type: str):
     files = minio_client.ls_file(f'{project_id}/{file_type}/')
     res = []
+    td = timedelta(hours=8)
+    tz = timezone(td)
     for file in files:
         timestamp = file.object_name.split('_',1)[0].split('/')[-1]
-        time_str = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(timestamp)))
+        dt = datetime.fromtimestamp(int(timestamp), tz)
+        time_str = dt.strftime('%Y-%m-%d %H:%M:%S')
         dag_name = file.object_name.split('_',1)[1]
         res.append({'name':time_str+'-'+dag_name, 'uri':file.object_name,'timestamp':timestamp})
     res.sort(key=lambda x: x['timestamp'],reverse=True)

+ 13 - 2
app/utils/get_kerberos.py

@@ -1,2 +1,13 @@
-def get_kerberos_to_local():
-    print("====")
+from configs.logging import logger
+import os
+from app.common.minio import minio_client
+
+
+def get_kerberos_to_local(uri: str):
+    file_name = uri.split("/")[-1]
+    f_exists = os.path.exists('./configs/'+file_name)
+    if not f_exists:
+        res = minio_client.get_file(uri)
+        with open('./configs/'+file_name,'wb') as f:
+            f.write(res)
+        logger.info(f'{file_name}不存在, 已通过minio下载至本地')

BIN
configs/1665836013_user.keytab


+ 0 - 1
server.py

@@ -21,7 +21,6 @@ from app.utils.get_kerberos import get_kerberos_to_local
 from utils.sx_log import format_print
 
 format_print()
-get_kerberos_to_local()
 
 Base.metadata.create_all(bind=engine)
 app = FastAPI(docs_url='/jpt/docs', redoc_url='/jpt/redoc', title="DAG管理系统")