Add basic auth
This commit is contained in:
25
main.py
25
main.py
@@ -1,6 +1,9 @@
|
||||
from uuid import uuid4
|
||||
from xmlrpc.server import SimpleXMLRPCServer
|
||||
import logging
|
||||
import os
|
||||
import requests.graphql
|
||||
from pygost import gost34112012256
|
||||
|
||||
|
||||
# Expose a function
|
||||
@@ -14,9 +17,18 @@ def aud_add(message):
|
||||
return 'OK'
|
||||
|
||||
|
||||
def auth_response(message, id, client):
|
||||
logging.debug(id)
|
||||
return {'error': False}
|
||||
def auth_response(challenge, server_id, is_server):
|
||||
logging.debug(challenge)
|
||||
logging.debug(server_id)
|
||||
logging.debug(is_server)
|
||||
msg = '%s%s%s' % (challenge, server_id, '12345678')
|
||||
response = gost34112012256.new(msg.encode('utf-8')).digest().hex()
|
||||
return {'error': False, 'response': response}
|
||||
|
||||
|
||||
def auth_challenge():
|
||||
logging.debug('get challenge')
|
||||
return uuid4().hex
|
||||
|
||||
|
||||
def main():
|
||||
@@ -25,6 +37,7 @@ def main():
|
||||
server.register_function(list_contents)
|
||||
server.register_function(aud_add)
|
||||
server.register_function(auth_response)
|
||||
server.register_function(auth_challenge)
|
||||
try:
|
||||
print('Use Control-C to exit')
|
||||
server.serve_forever()
|
||||
@@ -32,5 +45,11 @@ def main():
|
||||
print('Exiting')
|
||||
|
||||
|
||||
def test():
|
||||
print(requests.graphql.get_classifier())
|
||||
# print(requests.graphql.get_catalog())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
#test()
|
||||
|
||||
76
requests/catalog.py
Normal file
76
requests/catalog.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from datetime import datetime
|
||||
import classifier
|
||||
import graphql
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
|
||||
class CatalogRequestInfo:
|
||||
is_full = False
|
||||
user_id = 0
|
||||
|
||||
|
||||
class Catalog:
|
||||
CD_SERVER_COLLECTIONS_NAME = "CD-Server Collections Set"
|
||||
CD_SERVER_COLLECTIONS_VERSION = "1.0"
|
||||
CD_SERVER_COLLECTION_TYPE = "ISSUE"
|
||||
COLLECTIONS_TAG_NAME = "COLLECTIONS"
|
||||
NAME_ATTRIBUTE_NAME = "Name"
|
||||
VERSION_ATTRIBUTE_NAME = "Version"
|
||||
CREATED_ATTRIBUTE_NAME = "Created"
|
||||
FULL_ATTRIBUTE_NAME = "Full"
|
||||
COLLECTION_TAG_NAME = "COLLECTION"
|
||||
TYPE_ATTRIBUTE_NAME = "Type"
|
||||
CHARTS_TAG_NAME = "CHARTS"
|
||||
CHART_TAG_NAME = "CHART"
|
||||
METADATA_VERSION_ATTRIBUTE_NAME = "MetadataVersion"
|
||||
ID_ATTRIBUTE_NAME = "ID"
|
||||
DELETED_ATTRIBUTE_NAME = "Deleted"
|
||||
CLOSED_ATTRIBUTE_NAME = "Closed"
|
||||
FOLDERS_TAG_NAME = "FOLDERS"
|
||||
FOLDER_TAG_NAME = "FOLDER"
|
||||
REF_TAG_NAME = "REF"
|
||||
CHART_ATTRIBUTE_NAME = "Chart"
|
||||
|
||||
COLLECTION_NAME = 'CD-Server Collection'
|
||||
|
||||
request_info: CatalogRequestInfo
|
||||
|
||||
def write_catalog(self):
|
||||
date = datetime.now()
|
||||
|
||||
collections = ET.Element(self.COLLECTIONS_TAG_NAME, {
|
||||
self.NAME_ATTRIBUTE_NAME: self.COLLECTION_NAME,
|
||||
self.VERSION_ATTRIBUTE_NAME: self.CD_SERVER_COLLECTIONS_VERSION,
|
||||
self.CREATED_ATTRIBUTE_NAME: self.date_to_string(date),
|
||||
})
|
||||
if self.request_info.is_full:
|
||||
collections.set(self.FULL_ATTRIBUTE_NAME, 'true')
|
||||
if classifier.CLASSIFIER_VERSION:
|
||||
collections.set(self.METADATA_VERSION_ATTRIBUTE_NAME, classifier.CLASSIFIER_VERSION)
|
||||
|
||||
self.write_collections(collections, date)
|
||||
|
||||
return ET.tostring(collections, encoding='unicode', xml_declaration=True)
|
||||
|
||||
def date_to_string(self, date):
|
||||
return ''
|
||||
|
||||
def write_collections(self, collections, date):
|
||||
collection = ET.SubElement(collections, self.COLLECTION_TAG_NAME, {
|
||||
self.NAME_ATTRIBUTE_NAME: self.COLLECTION_NAME,
|
||||
self.CREATED_ATTRIBUTE_NAME: self.date_to_string(date),
|
||||
self.TYPE_ATTRIBUTE_NAME: self.CD_SERVER_COLLECTION_TYPE,
|
||||
})
|
||||
self.write_charts(collection)
|
||||
|
||||
def write_charts(self, collection):
|
||||
charts = ET.SubElement(collection, self.CHARTS_TAG_NAME)
|
||||
for c in []:
|
||||
self.write_chart(charts, c)
|
||||
|
||||
def write_chart(self, charts, chart):
|
||||
ch = ET.SubElement(charts, self.CHART_TAG_NAME)
|
||||
|
||||
|
||||
|
||||
|
||||
7
requests/classifier.py
Normal file
7
requests/classifier.py
Normal file
@@ -0,0 +1,7 @@
|
||||
import graphql
|
||||
|
||||
CLASSIFIER_VERSION = '8.23'
|
||||
|
||||
class Classifier:
|
||||
def get_classifier(self):
|
||||
|
||||
@@ -2,6 +2,7 @@ from datetime import datetime, timedelta
|
||||
from enumerations import ReplicationPackageStatusEnum
|
||||
from models import CorrectingReplicationOutPackage, ReplicantInfo
|
||||
from typing import List
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
|
||||
class CorrectingReplicationService:
|
||||
@@ -58,4 +59,13 @@ class CorrectingReplicationService:
|
||||
pkg.replication_timeout_date = date + delta
|
||||
return pkg
|
||||
|
||||
def get_package_xml(self) -> str:
|
||||
def get_package_xml(self, pkg: CorrectingReplicationOutPackage, request_uuid: str) -> str:
|
||||
request_xml: ET.Element = xml_service.get_common_request_xml(request_uuid)
|
||||
element = ET.SubElement(request_xml, self.PACKAGE_TAG_NAME, {
|
||||
self.PACKAGE_ID_ATTRIBUTE_NAME: pkg.package_id,
|
||||
self.SERVER_VERSION_ATTRIBUTE_NAME: '1.0.0',
|
||||
self.SERVER_ID_ATTRIBUTE_NAME: 'ipd-server',
|
||||
self.CLASSIFIER_VERSION_ATTRIBUTE_NAME: classifier.,
|
||||
})
|
||||
xml_service.set_request_uuid(request_xml, request_uuid)
|
||||
return ET.tostring(request_xml, encoding='unicode', xml_declaration=True)
|
||||
|
||||
30
requests/graphql.py
Normal file
30
requests/graphql.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from gql import gql, Client
|
||||
from gql.transport.aiohttp import AIOHTTPTransport
|
||||
|
||||
transport = AIOHTTPTransport(url="https://gql.ivazh.ru/graphql/")
|
||||
|
||||
|
||||
def get_classifier():
|
||||
client = Client(transport=transport, fetch_schema_from_transport=True)
|
||||
query = gql(
|
||||
"""
|
||||
query getClassifier {
|
||||
getClassifier(name: "ood")
|
||||
}
|
||||
"""
|
||||
)
|
||||
result = client.execute(query)
|
||||
return result['getClassifier']
|
||||
|
||||
|
||||
def get_catalog():
|
||||
client = Client(transport=transport, fetch_schema_from_transport=True)
|
||||
query = gql(
|
||||
"""
|
||||
query getCatalog {
|
||||
getCatalog(name: "ood")
|
||||
}
|
||||
"""
|
||||
)
|
||||
result = client.execute(query)
|
||||
return result['getClassifier']
|
||||
@@ -1,5 +1,6 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class Messages(Enum):
|
||||
REQUEST_EXECUTED_PARTITIALY = 1
|
||||
REQUEST_FAILED = 2
|
||||
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
gql~=3.4.0
|
||||
pygost~=5.11
|
||||
Reference in New Issue
Block a user