Beispiel #1
0
def update_user(login: str, data: dict = None):
    """Метод обновления информации пользователя по его логину

    Arguments:
        login {str} -- login

    Keyword Arguments:
        data {dict} -- {"id":"str" or "int"} (default: {None})
        status_code {int} -- (default: {200})

    Raises:
        HTTPException: 404 -- неверный login
        HTTPException: 400 -- неверный формат данных , нет данных

    Returns:
        {json} -- обновленная карточка пользователя
    """
    global head
    if data:
        new_data = {"description": str(data["id"])}
        response = requests.put(BASE_URL + f"/people/{login}",
                                headers=head,
                                json=new_data)
        if response.status_code == 401:
            head = get_new_ticket()
            response = requests.put(BASE_URL + f"/people/{login}",
                                    headers=head,
                                    json=new_data)
    if response.status_code == 200:
        response_data = json.loads(response.text)
        return response_data
    if response.status_code == 404:
        raise HTTPException(status_code=404)
    raise HTTPException(status_code=400)
Beispiel #2
0
def add_new_user(site_id: str, item: dict):
    """
    создание пользователя в проекте
    нужно добавить автоматическое добавление в группу админа
    """
    global head
    data = make_data(item)
    response_user = requests.post(BASE_URL + "/people",
                                  headers=head,
                                  json=data)
    if response_user.status_code == 401:
        head = get_new_ticket()
        response_user = requests.post(BASE_URL + "/people",
                                      headers=head,
                                      json=data)
    new_user = {"role": "SiteManager", "id": data["id"]}
    response = requests.post(BASE_URL + f"/sites/{site_id}/members",
                             headers=head,
                             json=dict(new_user))

    # data = {
    #     "id": item["id"],
    #     "memberType": "PERSON"
    # }
    # response_group = requests.post(BASE_URL + f"/groups/{group}/members", headers=head, json=dict(data))
    return response.status_code
Beispiel #3
0
def get_all_documents(site_id: str = None):
    """
    получение списка файлов из корневой папки сайта
    исключения обработаны
    """
    global head
    if site_id == None:
        raise HTTPException(status_code=400)
    result = []
    response = requests.get(BASE_URL + "/sites", headers=head)
    if response.status_code == 401:
        head = get_new_ticket()
        response = requests.get(BASE_URL + "/sites", headers=head)
    try:
        sites = json.loads(response.text)["list"]["entries"]
        site_node = ""
        for site in sites:
            if site["entry"]["id"] == site_id:
                site_node = site["entry"]["guid"]
                break
        response = requests.get(BASE_URL + f"/nodes/{site_node}/children",
                                headers=head)
        base_folder_id = json.loads(
            response.text)["list"]["entries"][0]["entry"]["id"]
        response = requests.get(BASE_URL + f"/nodes/{base_folder_id}/children",
                                headers=head)
        files = json.loads(response.text)["list"]["entries"]
        for data in files:
            x = {"file_name": data["entry"]["name"], "id": data["entry"]["id"]}
            result.append(x)
        return result
    except:
        raise HTTPException(status_code=404)
Beispiel #4
0
def delete_document(id: str = None):
    """
    удаление файла по его id 
    """
    global head
    response = requests.delete(f"{BASE_URL}/nodes/{id}", headers=head)
    if response.status_code == 401:
        head = get_new_ticket()
        response = requests.delete(f"{BASE_URL}/nodes/{id}", headers=head)
Beispiel #5
0
def get_sites(owner_id: str = None):
    """Получение списка сайтов (проектов) пользователя по его  id

    Arguments:
        owner_id {str} -- telegramm id

    Raises:
        HTTPException: 400 -- не получен дата сет
        HTTPException: 400 -- нет id пользователя
        HTTPException: 404 -- нет сайтов у пользователя

    Returns:
        [list] -- [
            {
                "id": "SITE50977-1100293794",
                "name": "hello"
            }
        ]
    """
    global head
    # если пустое поле с owner_id
    if not owner_id:
        raise HTTPException(status_code=400)
    list_sites = []
    # получаем словарь всех сайтов с пользователями
    all_sites = requests.get(f"{BASE_URL}/sites?relations=members",
                             headers=head)
    if all_sites.status_code == 401:
        head = get_new_ticket()
        all_sites = requests.get(f"{BASE_URL}/sites?relations=members",
                                 headers=head)
    # получаем логин пользователя
    login = get_full_userdata_by_id(owner_id)["id"]
    sites = json.loads(all_sites.text)["list"]["entries"]
    # ищем сайты где пользователь состоит в списке
    result = []
    for site in sites:
        if ("relations" in site and "members" in site["relations"]
                and "list" in site["relations"]["members"]
                and "entries" in site["relations"]["members"]["list"]):
            users = site["relations"]["members"]["list"]["entries"]
            for user in users:
                if user["entry"]["id"] == login:
                    entry = {"id": "", "name": ""}
                    entry["id"] = site["entry"]["id"]
                    entry["name"] = site["entry"]["title"]
                    result.append(entry)
    if result == []:
        raise HTTPException(status_code=404)
    return result
Beispiel #6
0
def delete_user(site_id: str,
                user_id: str = None,
                login: str = None,
                email: str = None):
    """Метот удаления пользователя
    -деактивация учетной записи
    -удаление пользователя из сайта (проекта)

    Arguments:
        site_id {str} -- ID сайта

    Keyword Arguments:
        user_id {str} -- ID пользователя (default: {None})
        login {str} -- Login пользователя (default: {None})
        email {str} -- Email пользователя (default: {None})
        status_code {int} -- статус код ответа  (default: {204})

    Raises:
        HTTPException: 404 -- нет такого пользователя
    """
    if user_id:
        login = get_full_userdata_by_id(user_id)
        if login is not None:
            login = login["id"]
    if email:
        login = get_user_by_email(email)
        if login is not None:
            login = login["id"]
        global head
    payload = "{\"enabled\": false}\n"
    response = requests.put(f"{BASE_URL}/people/{login}",
                            data=payload,
                            headers=head)
    if response.status_code != 200:
        raise HTTPException(status_code=response.status_code,
                            detail=json.loads(response.text))
    if response.status_code == 401:
        head = get_new_ticket()
        response = requests.put(f"{BASE_URL}/people/{login}",
                                data=payload,
                                headers=head)
    response = requests.delete(f"{BASE_URL}/people/{login}/sites/{site_id}",
                               headers=head)
    if response.status_code == 400:
        raise HTTPException(
            status_code=400,
            detail="Невозможно удалить единственного менеджера")
Beispiel #7
0
def get_site_users(site_id: str):
    """Метод получения пользователей сайта (проекта)
    админ сайта фильтруется, так как метод отдает данные
    для интерфеса удаления пользователей сайта

    Arguments:
        site_id {str} -- Идентификатор сайта

    Raises:
        HTTPException: 404 -- на сайте нет пользователей
        HTTPException: 400 -- Неверный id сайта

    Returns:
        [list] -- [
            {
                "role": "SiteConsumer",
                "person": {
                    "firstName": "string",
                    "jobTitle": "string",
                    "emailNotificationsEnabled": false,
                    "description": "id",
                    "company": {},
                    "id": "login",
                    "enabled": true,
                    "email": "string"
                    },
                "id": "api_user"
            }]
    """
    global head
    siteId = site_id
    try:
        login = get_full_userdata_by_id(site_id.split("-")[-1])["id"]
    except BaseException:
        raise HTTPException(status_code=400, detail="Bad side id")
    response = requests.get(f"{BASE_URL}/sites/{siteId}/members", headers=head)
    if response.status_code == 401:
        head = get_new_ticket()
        response = requests.get(f"{BASE_URL}/sites/{siteId}/members",
                                headers=head)
    users = json.loads(response.text)["list"]["entries"]
    list_users = [
        user["entry"] for user in users if user["entry"]["id"] != login
    ]
    if list_users == []:
        raise HTTPException(status_code=404)
    return list_users
Beispiel #8
0
def post_document(site_id: str = None,
                  user_id: str = None,
                  url: str = None,
                  file: UploadFile = File(...)):
    """
    размещение документа на сайте с метками создателя по загруженному файлу
    пока только в корневую папку
    """
    if file.filename == '':
        if url == None:
            raise HTTPException(status_code=201, detail="Item not found")

    global head
    user = get_full_userdata_by_id(user_id)
    print("get user data done")
    get_folder_id = requests.get(
        BASE_URL + f"/sites/{site_id}/containers/documentLibrary",
        headers=head)
    if get_folder_id.status_code == 401:
        head = get_new_ticket()
        get_folder_id = requests.get(
            BASE_URL + f"/sites/{site_id}/containers/documentLibrary",
            headers=head)
    print("get folder id done")
    folder_id = json.loads(get_folder_id.text)["entry"]["id"]

    print(f"Found folder id {folder_id}")
    url = BASE_URL + f"/nodes/{folder_id}/children"
    payload = {
        'name': file.filename,
        'autoRename': 'true',
        'cm:title': file.filename,
        'cm:description': f'Добавил {user["firstName"]} {user["lastName"]}',
        'exif:manufacturer': 'Canon'
    }
    files = [('filedata', file.file.read())]
    response = requests.post(url, headers=head, data=payload, files=files)
    print(f"File write to site {response.status_code}")
    if response.status_code != 201:
        return response.status_code
    return response.status_code
Beispiel #9
0
def post_user(item: User):
    """
    создается админская запись 
    создается группа 
    запись добавляется в группу
    """
    # item.password = item.login + "123"
    data = make_data(item.__values__)

    global head
    make_user = requests.post(BASE_URL + "/people", headers=head, json=data)
    if make_user.status_code == 401:
        head = get_new_ticket()
        make_user = requests.post(BASE_URL + "/people",
                                  headers=head,
                                  json=data)
    if make_user.status_code == 201:
        print(f"make user status code {make_user.status_code}")
        body = {
            "id": "GROUP_" + item.login,
            "displayName": "GROUP_" + item.login,
            "parentIds": []
        }
        resp = requests.post(BASE_URL + "/groups", headers=head, json=body)
        print(resp.text)
        if resp.status_code == 201:
            user_data = {"id": item.login, "memberType": "PERSON"}
            group = "GROUP_" + item.login
            response = requests.post(BASE_URL + f"/groups/{group}/members",
                                     headers=head,
                                     json=user_data)
            print(response.text)
    if make_user.status_code == 409:
        print(f"make user status code {make_user.status_code}")
        raise HTTPException(status_code=409, detail="user exist")
    print(f"make user status code {make_user.status_code}")
    resp = json.loads(resp.text)["entry"]
    item.group["id"] = resp["id"]
    item.group["name"] = resp["id"]
    return item
Beispiel #10
0
def delete_site(id: str):
    """Метод удаления сайта

    Arguments:
        id {str} -- сайт id

    Raises:
        HTTPException: 404 - сайт не найден
        HTTPException: остальные ошибки

    Returns:
        None
    """
    global head
    response = requests.delete(f"{BASE_URL}/sites/{id}", headers=head)
    if response.status_code == 401:
        head = get_new_ticket()
        response = requests.delete(f"{BASE_URL}/sites/{id}", headers=head)
    if response.status_code == 404:
        raise HTTPException(status_code=404)
    if response.status_code != 204:
        raise HTTPException(status_code=response.status_code)
Beispiel #11
0
def post_documents(site_id: str,
                   user_id: str,
                   file_url: str = None):  #file:UploadFile = File(...)
    """
    размещение документа на сайте с метками создателя по ссылке на яндекс диск
    пока только в корневую папку
    """
    global head
    if file_url == None:
        return 400
    user = get_full_userdata_by_id(user_id)
    files_ya = get_files(file_url)
    get_folder_id = requests.get(
        BASE_URL + f"/sites/{site_id}/containers/documentLibrary",
        headers=head)
    if get_folder_id.status_code == 401:
        head = get_new_ticket()
        get_folder_id = requests.get(
            BASE_URL + "/sites/SITE9id/containers/documentLibrary",
            headers=head)
    folder_id = json.loads(get_folder_id.text)["entry"]["id"]
    print(f"Found folder id {folder_id}")
    files_result = []
    for one in files_ya:
        url = BASE_URL + f"/nodes/{folder_id}/children"
        payload = {
            'name': one["name"],
            'autoRename': 'true',
            'cm:title': one["name"],
            'cm:description':
            f'Добавил {user["firstName"]} {user["lastName"]}',
            'exif:manufacturer': 'Canon'
        }
        files = [('filedata', open(one["path"], 'rb'))]
        response = requests.post(url, headers=head, data=payload, files=files)
        print(f"File write to site {response.status_code}")
        if response.status_code != 201:
            return response.status_code
        file_shema = {
            "title": one["name"],
            "file_url": file_url,
            "file": {
                "id": 0,
                "content": "string",
                "name": "string",
                "original_name": one["name"]
            }
        }
        files_result.append(file_shema)
    # site_folders = requests.get(BASE_URL + f"/sites/{site_id}/containers", headers=head)
    # site_folders = json.loads(site_folders.text)["list"]["entries"]
    # folders = []
    # for folder in site_folders:
    #     x = {
    #         "id": folder["entry"]["id"],
    #         "folderName": folder["entry"]["folderId"]
    #     }
    #     folders.append(x)
    body = {
        "id": user_id,
        "group_id": "None",
        "site_id": site_id,
        "tags": [{
            "id": 0,
            "title": "string"
        }]
    }
    raise HTTPException(status_code=201, detail=[body, files_result])
Beispiel #12
0
#!/bin/env python
from fastapi import FastAPI, File, UploadFile, HTTPException
import requests
from requests import Response
from fastapi.exceptions import ErrorList
from fastapi.responses import PlainTextResponse
import json
import uvicorn
from shemas import Group, Members, Site, User
from auth import get_new_ticket
from finder import get_full_userdata_by_id, get_user_by_email, get_user_by_login, get_users_by_site_id, get_user_groups_by_login
from file_dowloader import get_files
import re

app = FastAPI(debug=True)
head = get_new_ticket()
BASE_URL = "http://84.201.164.96:8080/alfresco/api/-default-/public/alfresco/versions/1"


def make_data(data):
    data_body = {
        "id": data["login"],
        "firstName": data["first_name"],
        "lastName": data["last_name"],
        "email": data["email"],
        "password": data["password"],
        "description": data["id"],
        "properties": {}
    }
    return data_body