Update app.py
Browse files
app.py
CHANGED
|
@@ -14,11 +14,11 @@ import string
|
|
| 14 |
app = Flask(__name__)
|
| 15 |
app.secret_key = os.getenv("FLASK_SECRET_KEY", "supersecretkey")
|
| 16 |
DATA_FILE = 'cloud_data.json'
|
| 17 |
-
REPO_ID = "Eluza133/Z1e1u"
|
| 18 |
HF_TOKEN_WRITE = os.getenv("HF_TOKEN")
|
| 19 |
HF_TOKEN_READ = os.getenv("HF_TOKEN_READ") or HF_TOKEN_WRITE
|
| 20 |
ADMIN_PASSWORD = "87132morflot"
|
| 21 |
-
MAX_STORAGE_GB = 500
|
| 22 |
|
| 23 |
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
|
| 24 |
logging.basicConfig(level=logging.INFO)
|
|
@@ -35,7 +35,6 @@ def load_data():
|
|
| 35 |
return {'users': {}, 'files': {}}
|
| 36 |
data.setdefault('users', {})
|
| 37 |
data.setdefault('files', {})
|
| 38 |
-
# Обновляем структуру данных для существующих пользователей
|
| 39 |
for token, user_data in data['users'].items():
|
| 40 |
if 'folders' not in user_data:
|
| 41 |
files = user_data.get('files', [])
|
|
@@ -48,9 +47,8 @@ def load_data():
|
|
| 48 |
}
|
| 49 |
if 'files' in user_data:
|
| 50 |
del user_data['files']
|
| 51 |
-
# Добавляем storage_used, если его нет
|
| 52 |
if 'storage_used' not in user_data:
|
| 53 |
-
user_data['storage_used'] = 0
|
| 54 |
logging.info("Данные успешно загружены")
|
| 55 |
return data
|
| 56 |
except Exception as e:
|
|
@@ -354,7 +352,7 @@ def register():
|
|
| 354 |
data['users'][token] = {
|
| 355 |
'created_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
|
| 356 |
'folders': {'root': {'name': 'root', 'files': [], 'subfolders': {}}},
|
| 357 |
-
'storage_used': 0
|
| 358 |
}
|
| 359 |
save_data(data)
|
| 360 |
flash(f'Ваш токен: {token}. Сохраните его!')
|
|
@@ -400,6 +398,7 @@ def login():
|
|
| 400 |
data = load_data()
|
| 401 |
if token in data['users'] and len(token) == 13:
|
| 402 |
session['token'] = token
|
|
|
|
| 403 |
return redirect(url_for('dashboard'))
|
| 404 |
else:
|
| 405 |
flash('Неверный токен! Токен должен быть 13 символов.')
|
|
@@ -431,13 +430,10 @@ def login():
|
|
| 431 |
<p style="margin-top: 20px;">Нет токена? <a href="{{ url_for('register') }}">Зарегистрируйтесь</a></p>
|
| 432 |
</div>
|
| 433 |
<script>
|
| 434 |
-
document.getElementById('login-form').onsubmit = (e)
|
| 435 |
const token = e.target.querySelector('input[name="token"]').value;
|
| 436 |
localStorage.setItem('token', token);
|
| 437 |
};
|
| 438 |
-
// Автоматический переход, если токен есть
|
| 439 |
-
const token = localStorage.getItem('token');
|
| 440 |
-
if (token) window.location = '/dashboard';
|
| 441 |
</script>
|
| 442 |
</body>
|
| 443 |
</html>
|
|
@@ -458,8 +454,12 @@ def get_folder(data, token, folder_path):
|
|
| 458 |
@app.route('/dashboard/<path:folder_path>', methods=['GET', 'POST'])
|
| 459 |
def dashboard(folder_path='root'):
|
| 460 |
if 'token' not in session:
|
| 461 |
-
|
| 462 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 463 |
|
| 464 |
token = session['token']
|
| 465 |
data = load_data()
|
|
@@ -469,8 +469,8 @@ def dashboard(folder_path='root'):
|
|
| 469 |
return redirect(url_for('login'))
|
| 470 |
|
| 471 |
current_folder = get_folder(data, token, folder_path)
|
| 472 |
-
storage_used = data['users'][token]['storage_used']
|
| 473 |
-
max_storage_bytes = MAX_STORAGE_GB * 1024 * 1024 * 1024
|
| 474 |
storage_percent = (storage_used / max_storage_bytes) * 100 if max_storage_bytes > 0 else 0
|
| 475 |
storage_used_gb = storage_used / (1024 * 1024 * 1024)
|
| 476 |
storage_remaining_gb = MAX_STORAGE_GB - storage_used_gb
|
|
@@ -506,7 +506,7 @@ def dashboard(folder_path='root'):
|
|
| 506 |
|
| 507 |
elif 'upload_files' in request.files:
|
| 508 |
files = request.files.getlist('files')
|
| 509 |
-
total_size = sum(f.content_length for f in files if f)
|
| 510 |
if storage_used + total_size > max_storage_bytes:
|
| 511 |
flash('Недостаточно места для загрузки файлов!')
|
| 512 |
else:
|
|
@@ -516,7 +516,7 @@ def dashboard(folder_path='root'):
|
|
| 516 |
temp_path = os.path.join('uploads', filename)
|
| 517 |
os.makedirs('uploads', exist_ok=True)
|
| 518 |
file.save(temp_path)
|
| 519 |
-
file_size = os.path.getsize(temp_path)
|
| 520 |
|
| 521 |
api = HfApi()
|
| 522 |
file_path = f"cloud_files/{token}/{folder_path}/{filename}"
|
|
@@ -534,7 +534,7 @@ def dashboard(folder_path='root'):
|
|
| 534 |
'path': file_path,
|
| 535 |
'type': get_file_type(filename),
|
| 536 |
'upload_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
|
| 537 |
-
'size': file_size
|
| 538 |
}
|
| 539 |
current_folder['files'].append(file_info)
|
| 540 |
data['users'][token]['storage_used'] += file_size
|
|
@@ -692,6 +692,10 @@ def dashboard(folder_path='root'):
|
|
| 692 |
};
|
| 693 |
xhr.send(formData);
|
| 694 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
| 695 |
</script>
|
| 696 |
</body>
|
| 697 |
</html>
|
|
|
|
| 14 |
app = Flask(__name__)
|
| 15 |
app.secret_key = os.getenv("FLASK_SECRET_KEY", "supersecretkey")
|
| 16 |
DATA_FILE = 'cloud_data.json'
|
| 17 |
+
REPO_ID = "Eluza133/Z1e1u"
|
| 18 |
HF_TOKEN_WRITE = os.getenv("HF_TOKEN")
|
| 19 |
HF_TOKEN_READ = os.getenv("HF_TOKEN_READ") or HF_TOKEN_WRITE
|
| 20 |
ADMIN_PASSWORD = "87132morflot"
|
| 21 |
+
MAX_STORAGE_GB = 500
|
| 22 |
|
| 23 |
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
|
| 24 |
logging.basicConfig(level=logging.INFO)
|
|
|
|
| 35 |
return {'users': {}, 'files': {}}
|
| 36 |
data.setdefault('users', {})
|
| 37 |
data.setdefault('files', {})
|
|
|
|
| 38 |
for token, user_data in data['users'].items():
|
| 39 |
if 'folders' not in user_data:
|
| 40 |
files = user_data.get('files', [])
|
|
|
|
| 47 |
}
|
| 48 |
if 'files' in user_data:
|
| 49 |
del user_data['files']
|
|
|
|
| 50 |
if 'storage_used' not in user_data:
|
| 51 |
+
user_data['storage_used'] = 0
|
| 52 |
logging.info("Данные успешно загружены")
|
| 53 |
return data
|
| 54 |
except Exception as e:
|
|
|
|
| 352 |
data['users'][token] = {
|
| 353 |
'created_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
|
| 354 |
'folders': {'root': {'name': 'root', 'files': [], 'subfolders': {}}},
|
| 355 |
+
'storage_used': 0
|
| 356 |
}
|
| 357 |
save_data(data)
|
| 358 |
flash(f'Ваш токен: {token}. Сохраните его!')
|
|
|
|
| 398 |
data = load_data()
|
| 399 |
if token in data['users'] and len(token) == 13:
|
| 400 |
session['token'] = token
|
| 401 |
+
localStorage.setItem('token', token); # Сохраняем токен в localStorage
|
| 402 |
return redirect(url_for('dashboard'))
|
| 403 |
else:
|
| 404 |
flash('Неверный токен! Токен должен быть 13 символов.')
|
|
|
|
| 430 |
<p style="margin-top: 20px;">Нет токена? <a href="{{ url_for('register') }}">Зарегистрируйтесь</a></p>
|
| 431 |
</div>
|
| 432 |
<script>
|
| 433 |
+
document.getElementById('login-form').onsubmit = function(e) {
|
| 434 |
const token = e.target.querySelector('input[name="token"]').value;
|
| 435 |
localStorage.setItem('token', token);
|
| 436 |
};
|
|
|
|
|
|
|
|
|
|
| 437 |
</script>
|
| 438 |
</body>
|
| 439 |
</html>
|
|
|
|
| 454 |
@app.route('/dashboard/<path:folder_path>', methods=['GET', 'POST'])
|
| 455 |
def dashboard(folder_path='root'):
|
| 456 |
if 'token' not in session:
|
| 457 |
+
token = request.cookies.get('token') or localStorage.getItem('token')
|
| 458 |
+
if token and token in load_data()['users']:
|
| 459 |
+
session['token'] = token
|
| 460 |
+
else:
|
| 461 |
+
flash('Пожалуйста, войдите!')
|
| 462 |
+
return redirect(url_for('login'))
|
| 463 |
|
| 464 |
token = session['token']
|
| 465 |
data = load_data()
|
|
|
|
| 469 |
return redirect(url_for('login'))
|
| 470 |
|
| 471 |
current_folder = get_folder(data, token, folder_path)
|
| 472 |
+
storage_used = data['users'][token]['storage_used']
|
| 473 |
+
max_storage_bytes = MAX_STORAGE_GB * 1024 * 1024 * 1024
|
| 474 |
storage_percent = (storage_used / max_storage_bytes) * 100 if max_storage_bytes > 0 else 0
|
| 475 |
storage_used_gb = storage_used / (1024 * 1024 * 1024)
|
| 476 |
storage_remaining_gb = MAX_STORAGE_GB - storage_used_gb
|
|
|
|
| 506 |
|
| 507 |
elif 'upload_files' in request.files:
|
| 508 |
files = request.files.getlist('files')
|
| 509 |
+
total_size = sum(f.content_length for f in files if f)
|
| 510 |
if storage_used + total_size > max_storage_bytes:
|
| 511 |
flash('Недостаточно места для загрузки файлов!')
|
| 512 |
else:
|
|
|
|
| 516 |
temp_path = os.path.join('uploads', filename)
|
| 517 |
os.makedirs('uploads', exist_ok=True)
|
| 518 |
file.save(temp_path)
|
| 519 |
+
file_size = os.path.getsize(temp_path)
|
| 520 |
|
| 521 |
api = HfApi()
|
| 522 |
file_path = f"cloud_files/{token}/{folder_path}/{filename}"
|
|
|
|
| 534 |
'path': file_path,
|
| 535 |
'type': get_file_type(filename),
|
| 536 |
'upload_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
|
| 537 |
+
'size': file_size
|
| 538 |
}
|
| 539 |
current_folder['files'].append(file_info)
|
| 540 |
data['users'][token]['storage_used'] += file_size
|
|
|
|
| 692 |
};
|
| 693 |
xhr.send(formData);
|
| 694 |
};
|
| 695 |
+
window.onload = () => {
|
| 696 |
+
const token = localStorage.getItem('token');
|
| 697 |
+
if (!token) return; // Не перенаправляем автоматически
|
| 698 |
+
};
|
| 699 |
</script>
|
| 700 |
</body>
|
| 701 |
</html>
|