Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

106 строки
3.4 KiB

  1. from fastapi import APIRouter, Depends
  2. from sqlalchemy.exc import IntegrityError
  3. #from db import get_session
  4. from exceptions import InvalidPermissions, InvalidUserName, UsernameAlreadyTaken
  5. from models.user import UserCreate, User
  6. from core.actions import get_user_by_name
  7. from core.security import manager,is_admin
  8. from fastapi.requests import Request
  9. #from security import common_parameters
  10. from fastapi import Security
  11. import subprocess
  12. import os, sys, json
  13. router = APIRouter(
  14. prefix="/user"
  15. )
  16. # @router.post('/register', response_model=UserResponse, status_code=201)
  17. # def register(user: UserCreate, db=Depends(get_session)) -> UserResponse:
  18. # """
  19. # Registers a new user
  20. # """
  21. # try:
  22. # user = create_user(user.username, user.password, db)
  23. # return UserResponse.from_orm(user)
  24. # except IntegrityError:
  25. # raise UsernameAlreadyTaken
  26. #user=Security(manager, scopes=["required", "is_admin"]),
  27. @router.get('/profili')
  28. def get_profili(active_user=Depends(manager)) :
  29. # Open a file
  30. path = "/conf/etc/useradmin/usersdefault"
  31. return (path_to_dict(path))
  32. #return UserResponse.from_orm(username)
  33. @router.get('/{username}')
  34. def read_user(username,user=Security(manager, scopes=["required", "is_admin"]),active_user=Depends(manager)) :
  35. print (user)
  36. print ("Active " + active_user.username + "required " +username )
  37. """
  38. Shows information about the user
  39. """
  40. user = get_user_by_name(active_user.username)
  41. print ("Get info user " + user.username)
  42. if user is None:
  43. raise InvalidUserName
  44. # Only allow admins and oneself to access this information
  45. if username != active_user.username and not active_user.is_admin:
  46. raise InvalidPermissions
  47. ruser = get_user_by_name(username)
  48. return {"dettaglio": f"is admin {ruser.is_admin}"}
  49. # @router.get("/private")
  50. # def private_route(user=Depends(manager)):
  51. # print (user)
  52. # ruser = get_user_by_name(user.username)
  53. # return {"detail": f"Welcome {ruser.is_admin}"}
  54. def path_to_dict(path):
  55. lst = []
  56. d = {'name': 'profiles'}
  57. if os.path.isdir(path):
  58. for x in os.listdir(path):
  59. print (x)
  60. lst.append(x.rsplit( ".", 1 )[ 0 ] )
  61. d['list'] = lst
  62. return d
  63. @router.get('/{username}')
  64. def read_user(username,user=Security(manager, scopes=["required", "is_admin"]),active_user=Depends(manager)) :
  65. print ("Active " + active_user.username + "required " +username )
  66. """
  67. Shows information about the user
  68. """
  69. user = get_user_by_name(active_user.username)
  70. print ("Get info user " + user.username)
  71. if user is None:
  72. raise InvalidUserName
  73. # Only allow admins and oneself to access this information
  74. if username != active_user.username and not active_user.is_admin:
  75. raise InvalidPermissions
  76. ruser = get_user_by_name(username)
  77. return {"dettaglio": f"is admin {ruser.is_admin}"}
  78. @router.delete("/{username}")
  79. def delete_user(username: str,user=Security(manager, scopes=["required", "is_admin"]),active_user=Depends(manager)):
  80. proc = subprocess.Popen(['perl', '/var/opt/FastAPI/delusr.pl', username ], stdout=subprocess.PIPE)
  81. stdout_value = proc.communicate()[0]
  82. stdout_value=stdout_value.decode('UTF-8')
  83. response = {"return_code": stdout_value.split(';')[0], "return_str" : stdout_value.split(';')[1] }
  84. return response
  85. #return {"ok": True}