Доработки, разработка call2api

This commit is contained in:
justuser-31 2026-01-31 18:29:25 +03:00
parent 4aeb1c1bc9
commit 1e5693d3da
3 changed files with 98 additions and 17 deletions

View File

@ -1,19 +1,85 @@
from typing import Optional
import requests import requests
url = "http://127.0.0.1:8000/create_account" # Replace with actual endpoint URL
payload = { def create_account(
'token': 'test', api_url: str, api_token: str, username: str, password: str, drive_quota: int
'username': 'test', ) -> dict:
'password': 'test', """
'drive_quota': '1024' # in MB Call the create account API endpoint.
}
headers = { Args:
'Content-Type': 'application/x-www-form-urlencoded' api_url: Base URL of the API server (e.g., 'http://localhost:8000')
} api_token: Security token for API authentication
username: Username for the new account
password: Password for the new account
drive_quota: Storage quota in MB
response = requests.post(url, data=payload, headers=headers) Returns:
Dictionary with 'status_code' and 'message' keys
"""
url = f"{api_url.rstrip('/')}/create_account"
data = {
"token": api_token,
"username": username,
"password": password,
"drive_quota": str(drive_quota),
}
print("Status Code:", response.status_code) try:
print("Response Text:", response.text) response = requests.post(url, data=data)
return {"status_code": response.status_code, "message": response.text}
except requests.RequestException as e:
return {"status_code": -1, "message": f"Request failed: {str(e)}"}
def set_quota(api_url: str, api_token: str, username: str, drive_quota: int) -> dict:
"""
Call the set quota API endpoint.
Args:
api_url: Base URL of the API server (e.g., 'http://localhost:8000')
api_token: Security token for API authentication
username: Username whose quota should be updated
drive_quota: New storage quota in MB
Returns:
Dictionary with 'status_code' and 'message' keys
"""
url = f"{api_url.rstrip('/')}/set_quota"
data = {"token": api_token, "username": username, "drive_quota": str(drive_quota)}
try:
response = requests.post(url, data=data)
return {"status_code": response.status_code, "message": response.text}
except requests.RequestException as e:
return {"status_code": -1, "message": f"Request failed: {str(e)}"}
def delete_account(api_url: str, api_token: str, username: str) -> dict:
"""
Call the delete account API endpoint.
Args:
api_url: Base URL of the API server (e.g., 'http://localhost:8000')
api_token: Security token for API authentication
username: Username of the account to delete
Returns:
Dictionary with 'status_code' and 'message' keys
"""
url = f"{api_url.rstrip('/')}/delete_account"
data = {"token": api_token, "username": username}
try:
response = requests.post(url, data=data)
return {"status_code": response.status_code, "message": response.text}
except requests.RequestException as e:
return {"status_code": -1, "message": f"Request failed: {str(e)}"}
# print(set_quota("http://127.0.0.1:8000", "test", "test", 1000))
# print(delete_account("http://127.0.0.1:8000", "test", "test"))
# print(create_account("http://proxy.del.pw:50020", "test", "test", "test", 100))
print(create_account("http://proxy.del.pw:50020", "test", "ritmas", "ritmas", 100))

View File

@ -112,6 +112,7 @@ class FileServerHandler(BaseHTTPRequestHandler):
self.send_html(content) self.send_html(content)
def handle_login_page(self): def handle_login_page(self):
cursor = database.DB_CONN.cursor()
if self.path == "/login" and self.command == "POST": if self.path == "/login" and self.command == "POST":
content_length = int(self.headers.get("Content-Length", 0)) content_length = int(self.headers.get("Content-Length", 0))
post_data = self.rfile.read(content_length).decode("utf-8") post_data = self.rfile.read(content_length).decode("utf-8")
@ -119,7 +120,6 @@ class FileServerHandler(BaseHTTPRequestHandler):
username = params.get("username", [""])[0] username = params.get("username", [""])[0]
password = params.get("password", [""])[0] password = params.get("password", [""])[0]
cursor = database.DB_CONN.cursor()
cursor.execute( cursor.execute(
"SELECT password_hash FROM users WHERE username = ?", (username,) "SELECT password_hash FROM users WHERE username = ?", (username,)
) )
@ -146,10 +146,16 @@ class FileServerHandler(BaseHTTPRequestHandler):
self.send_html(content, 401) self.send_html(content, 401)
return return
# Check if user already authorized
username = self.get_session_user() username = self.get_session_user()
if username: if username:
self.send_redirect("/files") # Check if user really exist
return cursor.execute("SELECT username FROM users WHERE username = ?", (username,))
username_row = cursor.fetchone()
if username_row:
self.send_redirect("/files")
return
content = self.render_login_form() content = self.render_login_form()
self.send_html(content) self.send_html(content)
@ -191,6 +197,13 @@ class FileServerHandler(BaseHTTPRequestHandler):
used_mb = get_user_used_space(username) used_mb = get_user_used_space(username)
cursor = database.DB_CONN.cursor() cursor = database.DB_CONN.cursor()
cursor.execute("SELECT quota_mb FROM users WHERE username = ?", (username,))
available_mb_row = cursor.fetchone()
# If user not authorized
if not available_mb_row:
self.send_redirect("/login")
return
available_mb = available_mb_row[0]
cursor.execute( cursor.execute(
"UPDATE users SET used_mb = ? WHERE username = ?", (used_mb, username) "UPDATE users SET used_mb = ? WHERE username = ?", (used_mb, username)
) )
@ -230,7 +243,7 @@ class FileServerHandler(BaseHTTPRequestHandler):
<h1><a href="/">SimpliestFS</a></h1> <h1><a href="/">SimpliestFS</a></h1>
<h2>My Files</h2> <h2>My Files</h2>
<div class="quota-info"> <div class="quota-info">
Quota: {CONFIG["storage"]["default_quota_mb"]} MB | Used: {used_mb:.2f} MB Quota: {available_mb} MB | Used: {used_mb:.2f} MB
</div> </div>
<form method="POST" enctype="multipart/form-data" action="/upload"> <form method="POST" enctype="multipart/form-data" action="/upload">
<input type="file" name="file" required> <input type="file" name="file" required>

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
PyYAML
requests