|
- from fastapi import APIRouter
- from fastapi.param_functions import Depends
- from fastapi.security import OAuth2PasswordRequestForm
- from fastapi_login.exceptions import InvalidCredentialsException
-
-
-
- import xml.dom.minidom
- from binascii import unhexlify
- from ldap3.protocol.formatters.formatters import format_sid
- import argparse
- import json
- import ldap3
- import logging
- import os
- import ssl
- import sys
- import hashlib
- import binascii
- from datetime import datetime, timedelta
- import subprocess
-
- #from db import get_session
- from core.actions import get_user_by_name
- from core.security import manager
- from core.ldap import LDAPConsole
-
- from models.httpresponse import httpResponse400, httpResponse200, httpResponse500
- from models.mnuser import mnuser, post_mnuser
-
- router = APIRouter(
- prefix="/majornet"
- )
-
- def cast_to_dict(cid):
- out = {}
- for key, value in cid.items():
- if type(value) == bytes:
- out[key] = str(value)
- elif type(value) == list:
- if len(value) == 1:
- value = value[0]
- if type(value) == bytes:
- out[key] = str(value)
- elif type(value) == datetime:
- out[key] = value.strftime('%Y-%m-%d %T')
- elif type(value) == timedelta:
- # Output format to change
- out[key] = value.seconds
- else:
- out[key] = value
- else:
- newlist = []
- for element in value:
- if type(element) == bytes:
- newlist.append(str(element))
- elif type(element) == datetime:
- newlist.append(element.strftime('%Y-%m-%d %T'))
- elif type(element) == timedelta:
- # Output format to change
- newlist.append(element.seconds)
- out[key] = newlist
- elif type(value) == datetime:
- out[key] = value.strftime('%Y-%m-%d %T')
- elif type(value) == timedelta:
- # Output format to change
- out[key] = value.seconds
- else:
- out[key] = value
- return out
-
-
- def dict_get_paths(d):
- paths = []
- for key in d.keys():
- if type(d[key]) == dict:
- paths = [[key]+p for p in dict_get_paths(d[key])]
- else:
- paths.append([key])
- return paths
-
-
- def dict_path_access(d, path):
- for key in path:
- if key in d.keys():
- d = d[key]
- else:
- return None
- return d
-
-
-
-
-
-
-
-
-
-
- data = {}
- import os
- USE_LDAP = os.getenv("FASTAPI_LDAP_ENABLED", "false").lower() == "true"
-
- try:
- from ..core.ldap import LDAPConsole
- except Exception:
- LDAPConsole = None
-
- lc = LDAPConsole(debug=True) if (USE_LDAP and LDAPConsole) else None
-
-
-
- @router.get("/users/",tags=["MajorNet"], responses={200: {"model": httpResponse200}, 400: {"model": httpResponse400}, 500: {"model": httpResponse500}})
- async def get_majornet_users(current_user= Depends(manager)):
-
- response = lc.queryallusers("ou=users", attributes=['displayName','mail','uid'])
- data = {}
- for cn in response:
- path = cn.split(',')[::-1]
- tmp = data
- for key in path[:-1]:
- if key in tmp.keys():
- tmp = tmp[key]
- else:
- tmp[key] = {}
- tmp = tmp[key]
- tmp[path[-1]] = cast_to_dict(response[cn])
-
- json_data = json.dumps(data, indent=4)
- return data
-
- #,current_user= Depends(manager)
- #,current_user: Depends(manager)
- # response_model=post_mnuser,
- @router.post("/users/add_user/", response_model=post_mnuser, tags=["MajorNet"])
- async def majornet_add_user(mnuser:str, mnpasswd:str, mndisplayname:str, mnmail="", mnprofile= "default",current_user= Depends(manager) ):
- #print (current_user.username)
- #print (mnuser+" "+mnpasswd+" "+mndisplayname+" "+mnprofile)
- proc = subprocess.Popen(['perl', '/var/opt/FastAPI/addusr.pl', mnuser, mnpasswd , mndisplayname, mnmail ], stdout=subprocess.PIPE)
- stdout_value = proc.communicate()[0]
-
- stdout_value=stdout_value.decode('UTF-8')
- response = {"return_code": stdout_value.split(';')[0], "return_str" : stdout_value.split(';')[1] }
- return response
|