예제 #1
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def sign_in():
    if request.method == "OPTIONS":
        return send_allowed(['GET', 'POST'])
    elif request.method == "GET":
        return render_template("login.html", user=g.user)
    else:
        data = request.get_json()
        login = data.get('login')
        password = data.get('password')
        if None in [login, password] or verify_user(login, password) is False:
            res = make_response(
                Document(
                    data={
                        'status': 'fail',
                        'message': 'Invalid credentials',
                        'data': data
                    }).to_json(), 400)
        else:
            encoded_jwt = get_jwt_payload(login, 'sender')
            res = make_response(
                Document(
                    data={
                        'status': 'success',
                        'message': 'Logged in sucessfully!',
                        'token': encoded_jwt.decode()
                    }).to_json(), 200)
            res.set_cookie('token',
                           encoded_jwt.decode(),
                           secure=True,
                           httponly=True,
                           path="/")
        res.headers['Content-Type'] = "application/json"
        return res
예제 #2
0
def delete_label(lid):
    errors = []
    links = []
    links.append(Link("labels", "/sender/dashboard", type="GET"))
    links.append(Link("label:new", "/labels", type="POST"))

    login = g.authorization.get("usr")

    if login is None:
        errors.append("Musisz się zalogować")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 401

    if not db.hexists(f"label:{lid}", "id"):
        errors.append("Taka etykieta nie istnieje")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 400

    if login != db.hget(f"label:{lid}", "sender").decode():
        errors.append("To nie Twoja etykieta")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 401

    if db.hexists(f"package:{lid}", "id"):
        errors.append("Nie możesz usunąć tej etykiety")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 401

    db.delete(f"label:{lid}")

    document = Document(links=links)
    return document.to_json(), 200
예제 #3
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def login_courier():
    if request.method == 'OPTIONS':
        return send_allowed(['POST'])
    else:
        data = request.get_json()
        login = data['login']
        password = data['password']

        if None in [login, password] or "" in [login, password]:
            res = make_response(
                Document(data={
                    'status': 'fail',
                    'message': 'Some arguments are missing :('
                }).to_json(), 400)
        elif verify_user(login, password, 'courier'):
            res_correct = {
                'status': 'success',
                'message': 'Logged in correctly',
                'token': get_jwt_payload(login, 'courier').decode()
            }
            res = make_response(Document(data=res_correct).to_json(), 200)
        else:
            res = make_response(
                Document(data={
                    'status': 'fail',
                    'message': 'Invalid credentials :('
                }).to_json(), 400)
        res.headers['Content-Type'] = "application/json"
        return res
예제 #4
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def register_courier():
    if request.method == 'OPTIONS':
        return send_allowed(['POST'])
    else:
        data = request.get_json()
        email = data['email']
        company = data['company']
        phone = data['phone']
        password = data['password']
        password_rep = data['password_rep']
        login = data['login']
        if None in [email, company, phone, password, login]:
            res = make_response(
                Document(data={
                    'status': 'fail',
                    'message': 'Some arguments are missing :('
                }).to_json(), 400)
        elif password != password_rep:
            res = make_response(
                Document(data={
                    'status': 'fail',
                    'message': 'Passwords don\'t match :('
                }).to_json(), 400)
        else:
            save_courier(login, email, company, phone, password)
            correct_data = {
                'status': 'success',
                'message': 'Registered successfully, now please log in'
            }
            res = make_response(Document(data=correct_data).to_json(), 201)
        res.headers['Content-Type'] = "application/json"
        return res
예제 #5
0
def generate_token():
    access_token = request.headers.get("Access_Token")
    id_token = request.headers.get("ID_Token")

    response = requests.get(AUTH0_DOMAIN + "/.well-known/jwks.json")

    if response.status_code != 200:
        document = Document(data={"error": "Wystąpił błąd. Spróbuj ponownie później."})
        return document.to_json(), 400

    try:
        kid = get_unverified_header(access_token)["kid"]
    except Exception:
        document = Document(data={"error": "Wystąpił błąd. Spróbuj ponownie później."})
        return document.to_json(), 400

    url = AUTH0_DOMAIN + "/.well-known/jwks.json"

    jwks_client = PyJWKClient(url)

    signing_key = jwks_client.get_signing_key_from_jwt(access_token)

    try:
        data = decode(
            access_token,
            signing_key.key,
            algorithms=["RS256"],
            audience=AUTH0_AUDIENCE
        )
    except Exception as e:
        document = Document(data={"error": "Brak autoryzacji. Spróbuj ponownie później."})
        return document.to_json(), 401

    try:
        data = decode(
            id_token,
            signing_key.key,
            algorithms=["RS256"],
            audience=AUTH0_CLIENT_ID
        )
    except Exception as e:
        document = Document(data={"error": "Brak autoryzacji. Spróbuj ponownie później."})
        return document.to_json(), 401

    payload = {
        "exp": datetime.utcnow() + timedelta(days=365),
        "usr": "******",
        "name": data["name"],
        "sub": data["sub"]
    }
    token = encode(payload, JWT_SECRET, algorithm='HS256')

    document = Document(data={"token": token})
    return document.to_json(), 200
예제 #6
0
def index():
    links = []
    if g.authorization.get("usr") is None:
        links.append(Link("login", "/sender/login"))
        links.append(Link("register", "/sender/register"))
        document = Document(data={}, links=links)
        return document.to_json(), 200

    links.append(Link("login", "/sender/login", type="POST"))
    links.append(Link("registration", "/sender/register", type="POST"))
    document = Document(data={}, links=links)
    return document.to_json(), 200
예제 #7
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def sign_up():
    if request.method == "OPTIONS":
        return send_allowed(['GET', 'POST'])
    elif request.method == "GET":
        return render_template("register.html", user=g.user)
    else:
        data = request.get_json()
        firstname = data.get("firstname")
        lastname = data.get("lastname")
        login = data.get("login")
        password = data.get("password")
        rep_password = data.get("rep_password")
        email = data.get("email")
        address = data.get("address")

        if None in [firstname, lastname, login, password, email, address]:
            res = make_response(
                Document(
                    data={
                        'status': 'fail',
                        "message": 'Invalid data -- some fields are empty.'
                    }).to_json(), 400)
        elif password != rep_password:
            res = make_response(
                Document(data={
                    'status': 'fail',
                    "message": "Passwords don't match."
                }).to_json(), 400)
        elif not check_username_available(login):
            res = make_response(
                Document(data={
                    'status': 'fail',
                    'message': 'Login taken, silly :)'
                }).to_json(), 400)
        elif save_user(firstname, lastname, email, password, login, address):
            res = make_response(
                Document(
                    data={
                        'status': 'success',
                        'message':
                        'Successfully registered. Now please log in.'
                    }).to_json(), 201)
        else:
            res = make_response(
                Document(
                    data={
                        'status': 'fail',
                        'message':
                        'Did not register, unknown error happened o_O'
                    }).to_json(), 400)
        res.headers['Content-Type'] = "application/json"
        return res
예제 #8
0
def get_labels():
    data = {}
    links = []
    labels = []
    errors = []

    is_not_send = request.headers.get('is_not_send')

    if is_not_send == "True":
        is_not_send = True
    else:
        is_not_send = False

    login = g.authorization.get("usr")

    if login is None or login != "Courier":
        errors.append("Brak autoryzacji")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 401

    for key in db.scan_iter("label:*"):
        status = db.hget(f"package:{db.hget(key, 'id').decode()}", "status")
        if status is None:
            status = "Utworzona"
        else:
            status = status.decode()
        label = {}
        label = {
            "id": db.hget(key, "id").decode(),
            "name": db.hget(key, "name").decode(),
            "delivery_id": db.hget(key, "delivery_id").decode(),
            "size": db.hget(key, "size").decode(),
            "status": status,
            "sender": db.hget(key, "sender").decode()
        }
        if is_not_send:
            if (status == "Utworzona"):
                labels.append(label)
        else:
            labels.append(label)

    for label in labels:
        links.append(Link("label:" + (label["id"]), "/labels/" + label["id"]))

    data["labels"] = labels

    links.append(Link("find", "/label/{id}", templated=True))

    document = Document(data=data, links=links)
    return document.to_json(), 200
예제 #9
0
def login():
    form_values = request.json
    if form_values is None:
        return {"error": "Brak JSON"}

    login = form_values.get("login")
    password = form_values.get("password")
    auth0 = form_values.get("auth0")

    links = []
    errors = []
    links.append(Link("login", "/sender/login", type="POST"))
    links.append(Link("registration", "/sender/register", type="POST"))

    if not is_database_available():
        errors.append("Błąd połączenia z bazą danych")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 500

    if auth0 is None:
        if not login or not password:
            errors.append("Brak loginu lub hasła")
            document = Document(data={"errors": errors}, links=links)
            return document.to_json(), 400

        if not verify_user(login, password):
            errors.append("Błędny login lub hasło")
            document = Document(data={"errors": errors}, links=links)
            return document.to_json(), 400

    links = []
    data = {}
    links.append(Link("labels", "/sender/dashboard", type="GET"))
    links.append(Link("label:new", "/labels", type="POST"))

    if not db.hexists(f"user:{login}", "auth0"):
        db.hset(f"user:{login}", "auth0", "True")
        db.hset(f"user:{login}", "name", form_values.get("name"))
        db.hset(f"user:{login}", "email", form_values.get("email"))

    payload = {
        "exp": datetime.utcnow() + timedelta(seconds=JWT_TIME),
        "usr": login
    }
    token = encode(payload, JWT_SECRET, algorithm='HS256')
    data["status"] = "logged"
    data["token"] = token
    document = Document(data=data, links=links)
    return document.to_json(), 200
예제 #10
0
def dashboard():
    data = {}
    links = []
    labels = []
    errors = []

    login = g.authorization.get("usr")
    links.append(Link("find", "/labels/{id}", templated=True))
    links.append(Link("label:new", "/labels", type="POST"))

    if login is None:
        errors.append("Brak autoryzacji")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 401

    for key in db.scan_iter("label:*"):
        if db.hget(key, "sender").decode() == login:

            status = db.hget(f"package:{db.hget(key, 'id').decode()}",
                             "status")
            if status is None:
                status = "Utworzona"
            else:
                status = status.decode()
            label = {}
            label = {
                "id": db.hget(key, "id").decode(),
                "name": db.hget(key, "name").decode(),
                "delivery_id": db.hget(key, "delivery_id").decode(),
                "size": db.hget(key, "size").decode(),
                "status": status
            }

            labels.append(label)

    items = []
    for label in labels:
        item_links = []
        link_info = Link("info", "/labels/" + label["id"], type="GET")
        item_links.append(link_info)
        if label["status"] == "Utworzona":
            link_delete = Link("delete",
                               "/labels/" + label["id"],
                               type="DELETE")
            item_links.append(link_delete)
        items.append(Embedded(data=label, links=item_links))

    document = Document(embedded={'labels': Embedded(data=items)}, links=links)
    return document.to_json(), 200
예제 #11
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def update_parcel_status(parcel_id):
    try:
        if g.user is not {} and g.user['role'] == 'courier':
            if request.method == 'OPTIONS':
                return send_allowed(['PUT'])
            else:
                parent_link = [Link('parcel:parent', '/courier/parcels')]
                data = request.get_json()
                sender_login = data['sender']
                current_parcel = db.hget(f"user:{sender_login}:parcel",
                                         f"parcel_{parcel_id}")
                if current_parcel is not None:
                    db.hdel(f"user:{sender_login}:parcel",
                            f"parcel_{parcel_id}")
                    current_parcel = json.loads(current_parcel.decode())
                    current_parcel['status'] = data['status']
                    db.hset(f"user:{sender_login}:parcel",
                            f"parcel_{parcel_id}", json.dumps(current_parcel))
                    res = make_response(
                        Document(data={
                            'status': 'success',
                            'message': 'Parcel updated successfully'
                        },
                                 links=parent_link).to_json(), 200)
                else:
                    res = make_response(
                        Document(data={
                            'status': 'fail',
                            'message': 'Requested package not found.'
                        },
                                 links=parent_link).to_json(), 400)
        else:
            res = make_response(
                Document(
                    data={
                        'status': 'fail',
                        'message': 'You\'re not allowed to view this page.'
                    }).to_json(), 401)
    except Exception as e:
        print(e)
        res = make_response(
            Document(
                data={
                    'status': 'fail',
                    'message': 'You\'re not allowed to view this page.'
                }).to_json(), 401)
    res.headers['Content-Type'] = "application/json"
    return res
예제 #12
0
def add_package():
    links = []
    errors = []

    login = g.authorization.get("usr")

    if login is None or login != "Courier":
        errors.append("Brak autoryzacji")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 401

    label_id = request.json['label_id']

    if label_id is None:
        errors.append("Brak etykiety")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 400

    links = []
    links.append(Link("packages", "/pacakges", type="GET"))
    links.append(Link("find", "/pacakges/{id}", templated=True, type="GET"))

    if not is_database_available():
        errors.append("Błąd połączenia z bazą danych")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 500

    if not db.hexists(f"label:{label_id}", "id"):
        errors.append("Taka etykieta nie istnieje")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 404

    status = db.hget(f"package:{label_id}", "status")
    if status is not None:
        errors.append("Istnieje paczka utworzona z tej etykiety")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 404

    label = {
        "id": db.hget(f"label:{label_id}", "id").decode(),
        "name": db.hget(f"label:{label_id}", "name").decode(),
        "delivery_id": db.hget(f"label:{label_id}", "delivery_id").decode(),
        "size": db.hget(f"label:{label_id}", "size").decode(),
        "sender": db.hget(f"label:{label_id}", "sender").decode()
    }

    success = create_package(label)

    if not success:
        errors.append("Błąd tworzenia etykiety")
        document = Document(data={"errors": errors}, links=links)
        return document.to_json(), 500
    document = Document(links=links)
    return document.to_json(), 200


    document = Document(links=links)
    return document.to_json(), 200
예제 #13
0
파일: api.py 프로젝트: kareman/swiftenv-api
def version_detail(name):
    version = Version.objects.get(version=name)
    links = [Link(rel, url) for (rel, url) in version.binaries.items()]
    return Document(data={
        'version': version.version
    },
                    links=Collection(*links)).to_dict()
예제 #14
0
파일: app.py 프로젝트: Wydzials/AlPaczka
def delete_sender_package(username, id):
    if username != g.get("username") or g.get("username") == COURIER_NAME:
        return error("Unauthorized", "Brak dostępu.", 401)

    is_package_sender = db.sismember(f"user_packages:{username}",
                                     f"package:{id}")

    if not db.hget(f"package:{id}", "recipient"):
        return error("Package not found", "Nie znaleziono paczki")

    if not is_package_sender:
        return error("Unauthorized", "Brak dostępu.", 401)

    if not db.hget(f"package:{id}", "status") == "label":
        return error("Package in transit cannot be deleted",
                     "Nie można usunąć, paczka jest już w drodze.")

    db.srem(f"user_packages:{username}", f"package:{id}")
    db.delete(f"package:{id}")

    log("Deleted package: " + id + " from sender: " + username)

    links = [Link("package:create", "/sender/" + g.username + "/packages")]
    document = Document(data={"status": "ok"}, links=links)
    return document.to_json()
예제 #15
0
def add_user():
    if request.method == 'OPTIONS':
        return allowed_methods(['POST'])

    firstname = request.json.get('firstname')
    lastname = request.json.get('lastname')
    username = request.json.get('username')
    password = request.json.get('password')
    email = request.json.get('email')
    address = request.json.get('address')
    pl = 'ąćęłńóśźż'
    PL = 'ĄĆĘŁŃÓŚŹŻ'
    if not re.compile(f'[A-Z{PL}][a-z{pl}]+').match(firstname):
        return create_message_response("Invalid firstname", 400)
    if not re.compile(f'[A-Z{PL}][a-z{pl}]+').match(lastname):
        return create_message_response("Invalid lastname", 400)
    if not re.compile('[a-z]{3,12}').match(username):
        return create_message_response("Invalid username", 400)
    if not re.compile('.{8,}').match(password.strip()):
        return create_message_response("Invalid password", 400)
    if not re.compile(
            '(?:[A-Za-z0-9!#$%&\'*+/=?^_`{​​|}​​~-]+(?:\\.[A-Za-z0-9!#$%&\'*+/=?^_`{​​|}​​~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){​​3}​​(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\\])'
    ).match(email.strip()):
        return create_message_response("Invalid email", 400)
    if address is None:
        return create_message_response("Empty address", 400)
    if user_exists(username):
        return create_message_response("Username already exists", 400)
    if not save_user(username, firstname, lastname, address, password, email):
        return create_message_response("An error occurred", 500)

    links = [Link('next', '/auth/login')]
    data = {'message': 'Account created'}
    document = Document(data=data, links=links)
    return document.to_json()
예제 #16
0
def get_labels_by_sender():
    if g.authorization is None:
        return create_message_response("Unauthorized", 401)
    username = g.authorization.get('sub')
    keys = db.keys(pattern='label*')
    data = []
    label_json = {}
    for key in keys:
        sender = db.hget(key, "sender").decode()
        if username == sender or g.authorization.get('role') == 'courier':
            label_id = key.decode().split(":")[1]
            link = Link('self', '/labels/' + label_id)
            addressee = db.hget(key, "addressee").decode()
            size = db.hget(key, "size").decode()
            po_box_id = db.hget(key, "POBoxId").decode()
            sent = db.hget(key, "sent").decode()
            label_json = {
                "id": label_id,
                "sender": sender,
                "addressee": addressee,
                "size": size,
                "poBox": po_box_id,
                "sent": sent,
            }
            data.append(Embedded(data=label_json, links=[link]))

    links = [Link('self', '/labels/{id}', templated=True)]
    document = Document(embedded={'data': Embedded(data=data)}, links=links)
    return document.to_json()
예제 #17
0
def add_label():
    if g.authorization is None:
        return create_message_response("Unauthorized", 401)
    sender = g.authorization.get('sub')
    size = request.json.get('size')
    addressee = request.json.get('addressee')
    po_box_id = request.json.get('POBoxId')
    if addressee is None:
        return create_message_response("Invalid addressee", 400)
    if size not in ('XS', 'S', 'M', 'L', 'XL'):
        return create_message_response("Invalid size", 400)
    if po_box_id is None:
        return create_message_response("Invalid PO box id", 400)
    label_id = uuid.uuid4()
    db.hset(f"label:{label_id}", "sender", f"{sender}")
    db.hset(f"label:{label_id}", "addressee", f"{addressee}")
    db.hset(f"label:{label_id}", "size", f"{size}")
    db.hset(f"label:{label_id}", "POBoxId", f"{po_box_id}")
    db.hset(f"label:{label_id}", "sent", "false")

    data = {
        "id": str(label_id),
        "sender": sender,
        "addressee": addressee,
        "size": size,
        "POBoxId": po_box_id,
        "sent": "false"
    }
    links = [Link('self', '/labels/' + str(label_id))]
    document = Document(data=data, links=links)
    return document.to_json()
예제 #18
0
def package_create():
    if g.authorization is None or g.authorization.get('role') != 'courier':
        return create_message_response("Unauthorized", 401)

    label_id = request.json.get('labelId')
    if not db.hexists(f"label:{label_id}", "size"):
        return create_message_response("Label not Found", 404)

    if not db.hget(f"label:{label_id}", "sent").decode() == 'false':
        return create_message_response("Label already sent", 400)

    db.hset(f"label:{label_id}", "sent", 'true')

    package_id = str(uuid.uuid4())

    db.hset(f"package:{package_id}", "packageId", f"{package_id}")
    db.hset(f"package:{package_id}", "labelId", f"{label_id}")
    db.hset(f"package:{package_id}", "status", "IN_TRANSIT")

    data = {
        "packageId": package_id,
        "labelId": label_id,
        "status": "IN_TRANSIT"
    }

    links = [Link('self', '/packages/{id}', templated=True)]
    document = Document(embedded={'data': Embedded(data=data)}, links=links)
    return document.to_json()
예제 #19
0
def sender_get_label(label_uuid):
    if request.method == 'OPTIONS':
        return allowed_methods(['GET', 'PUT', 'DELETE'])
    if g.authorization is None:
        return create_message_response("Unauthorized", 401)
    if not db.hexists(f"label:{label_uuid}", "size"):
        return create_message_response("Label not Found", 404)
    username = g.authorization.get('sub')
    if not g.authorization.get('role') == 'courier' or db.hget(
            f"label:{label_uuid}", "sender").decode() == username:
        return create_message_response("Label not found", 404)
    receiver = db.hget(f"label:{label_uuid}", "receiver").decode()
    size = db.hget(f"label:{label_uuid}", "size").decode()
    po_box_id = db.hget(f"label:{label_uuid}", "POBoxId").decode()
    sent = db.hget(f"label:{label_uuid}", "sent").decode()
    data = {
        "labelId": label_uuid,
        "username": username,
        "receiver": receiver,
        "size": size,
        "POBoxId": po_box_id,
        "sent": sent
    }
    links = [Link('self', '/labels/' + label_uuid)]
    document = Document(data=data, links=links)
    return document.to_json()
예제 #20
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def send_allowed(methods):
    if 'OPTIONS' not in methods:
        methods.append("OPTIONS")
    response = make_response(Document().to_json(), 204)
    response.headers['Allow'] = ', '.join(methods)

    return response
예제 #21
0
파일: app.py 프로젝트: Wydzials/AlPaczka
def change_status(id):
    if g.username != COURIER_NAME:
        return error("Unauthorized", "Brak dostępu.", 401)

    json_data = request.json
    if not json_data:
        return error("No JSON provided",
                     "Niepoprawne żądanie, brak zawartości JSON.")

    status = json_data.get("status")
    if status not in ["label", "in transit", "delivered", "collected"]:
        return error("Invalid status type", "Nieprawidłowy status paczki.")

    package = "package:" + id
    if not db.hexists(package, "status"):
        return error("Package not found",
                     "Nie znaleziono paczki o danym identyfikatorze.")

    if status != db.hget(package, "status"):
        sender = db.hget(package, "sender")
        recipient = db.hget(package, "recipient")
        box_id = db.hget(package, "box_id")
        db.publish(
            f"user:{sender}",
            f"Nowy status paczki dla adresata '{recipient}', nadanej do skrytki numer {box_id}!\nOdśwież stronę, aby zobaczyć zmiany."
        )
        db.hset(package, "status", status)

    links = [Link("packages", "/courier/packages")]
    document = Document(data={"package": db.hgetall(package)}, links=links)
    return document.to_json()
예제 #22
0
파일: mysql.py 프로젝트: SChudakov/database
 def get(self, database_name, table_name):
     try:
         connection.select_db(database_name)
         cursor = connection.cursor()
         cursor.execute(f'select * from {table_name}')
         return Document(data={'rows': list(cursor.fetchall())}).to_dict()
     except Exception as e:
         raise InvalidUsage(str(e), 400)
예제 #23
0
파일: app.py 프로젝트: Salabim-mb/lab_web
def get_package_list():
    try:
        if g.user is not {} and g.user['role'] == 'courier':
            if request.method == 'OPTIONS':
                return send_allowed(['GET'])
            else:
                parcel_keys = db.keys("user:*:parcel")
                decoded_parcels = []
                links = []
                for parcel_key in parcel_keys:
                    parcel_key = parcel_key.decode()
                    parcel_list = db.hgetall(parcel_key)
                    for parcel in parcel_list:
                        decoded_parcel = json.loads(
                            parcel_list[parcel].decode("UTF-8"))
                        sender = parcel_key.replace('user:'******'')  # strip beginning
                        sender = sender.replace(':parcel', '')  # strip end
                        decoded_parcel['sender'] = sender
                        decoded_parcels.append(decoded_parcel)
                        links.append(
                            Link(f'parcel:{decoded_parcel["id"]}',
                                 f"/courier/package/{decoded_parcel['id']}"))
                res = make_response(
                    Document(data={
                        'status': 'success',
                        'parcels': decoded_parcels
                    },
                             links=links).to_json(), 200)
        else:
            res = make_response(
                Document(
                    data={
                        'status': 'fail',
                        'message': 'You\'re not allowed to view this page.'
                    }).to_json(), 401)
    except Exception as e:
        print(e)
        res = make_response(
            Document(
                data={
                    'status': 'fail',
                    'message': 'You\'re not allowed to view this page.'
                }).to_json(), 401)
    res.headers['Content-Type'] = "application/json"
    return res
예제 #24
0
파일: app.py 프로젝트: Wydzials/AlPaczka
def register():
    data = request.json

    if not data:
        return {"error": "No JSON provided"}, 400

    names_and_errors = {
        "username": "******",
        "firstname": "imienia",
        "lastname": "nazwiska",
        "email": "adresu email",
        "address": "adresu",
        "password": "******",
        "password2": "potwierdzenia hasła"
    }

    errors = []
    errors_pl = []
    fields = {}

    for name in names_and_errors:
        fields[name] = data.get(name)
        if not fields[name]:
            errors.append("No " + name + " provided.")
            errors_pl.append(f"Nie podano {names_and_errors[name]}.")

    if fields["password"] != fields["password2"]:
        errors.append("Passwords does not match")
        errors_pl.append("Hasła nie są takie same.")

    if fields["username"] and not re.fullmatch(r"^[a-z]{3,20}",
                                               fields["username"]):
        errors.append("Username must contain only 3-20 lowercase letters")
        errors_pl.append(
            "Nazwa użytkownika musi składać się z 3-20 małych liter.")

    if fields["username"] and db.hexists(f"user:{fields['username']}",
                                         "password"):
        errors.append("Username is taken")
        errors_pl.append("Nazwa użytkownika jest zajęta.")

    if len(errors) > 0:
        return error(errors, errors_pl)

    db.hset(f"user:{fields['username']}", "firstname", fields["firstname"])
    db.hset(f"user:{fields['username']}", "lastname", fields["lastname"])
    db.hset(f"user:{fields['username']}", "address", fields["address"])
    db.hset(f"user:{fields['username']}", "email", fields["email"])

    password = fields["password"].encode()
    hashed = hashpw(password, gensalt(5))
    db.hset(f"user:{fields['username']}", "password", hashed)
    db.sadd("users", fields["username"])

    links = [Link("sender:login", "/sender/login")]

    document = Document(links=links)
    return document.to_json(), 201
예제 #25
0
파일: mysql.py 프로젝트: SChudakov/database
 def delete(self, database_name):
     try:
         cursor = connection.cursor()
         cursor.execute(f'DROP DATABASE {database_name}')
         return Document(data={
             'message': 'Database deleted successfully'
         }).to_dict()
     except Exception as e:
         raise InvalidUsage(str(e), 400)
예제 #26
0
파일: mysql.py 프로젝트: SChudakov/database
 def post(self, database_name, table_name):
     try:
         connection.select_db(database_name)
         cursor = connection.cursor()
         description = request.args.get('description')
         cursor.execute(f'create table {table_name} ({description})')
         return Document(data={
             'message': 'Table created successfully'
         }).to_dict()
     except Exception as e:
         raise InvalidUsage(str(e), 400)
예제 #27
0
파일: mysql.py 프로젝트: SChudakov/database
 def delete(self, database_name, table_name):
     try:
         connection.select_db(database_name)
         cursor = connection.cursor()
         cursor.execute(f'drop table {table_name}')
         return Document(
             data={
                 'message': f'Table {table_name} dropped successfully'
             }).to_dict()
     except Exception as e:
         raise InvalidUsage(str(e), 400)
예제 #28
0
파일: mysql.py 프로젝트: SChudakov/database
 def post(self, database_name, table_name):
     try:
         connection.select_db(database_name)
         cursor = connection.cursor()
         values = request.args.get('values')
         cursor.execute(f"insert into {table_name} VALUES ({values})")
         return Document(data={
             'message': 'Row inserted successfully'
         }).to_dict()
     except Exception as e:
         raise InvalidUsage(str(e), 400)
예제 #29
0
파일: mysql.py 프로젝트: SChudakov/database
 def get(self):
     cursor = connection.cursor()
     cursor.execute('show databases')
     databases = list(map(lambda x: x[0], cursor.fetchall()))
     links = list()
     for database in databases:
         links.append(link.Link(database, f'/mysql/database/{database}'))
     return Document(data={
         'databases': databases
     },
                     links=link.Collection(*links)).to_dict()
예제 #30
0
파일: mysql.py 프로젝트: SChudakov/database
 def delete(self, database_name, table_name):
     try:
         connection.select_db(database_name)
         cursor = connection.cursor()
         where = request.args.get('where')
         cursor.execute(f'delete from {table_name} where {where}')
         return Document(data={
             'message': 'Rows deleted successfully'
         }).to_dict()
     except Exception as e:
         raise InvalidUsage(str(e), 400)