Безопасность и публикация: убраны корпоративные следы, исправлены зависимости, SECRET_KEY обязателен
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Обязательно: сильный случайный секретный ключ
|
# Обязательно: сильный случайный секретный ключ
|
||||||
# Пример генерации: openssl rand -hex 32
|
# Пример генерации: openssl rand -hex 32
|
||||||
SECRET_KEY=change-me-in-production
|
SECRET_KEY=
|
||||||
|
|
||||||
# Базовый URL приложения (без слэша в конце), используется в QR-кодах
|
# Базовый URL приложения (без слэша в конце), используется в QR-кодах
|
||||||
BASE_URL=https://your-domain.example.com
|
BASE_URL=https://your-domain.example.com
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
Proprietary License
|
||||||
|
|
||||||
|
Copyright (c) 2026 InviteMe
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
This software and associated documentation files (the "Software") are the
|
||||||
|
proprietary and confidential information of InviteMe. The Software is protected
|
||||||
|
by copyright law and international treaties.
|
||||||
|
|
||||||
|
Unauthorized access, use, copying, modification, merger, publication,
|
||||||
|
distribution, sublicensing, sale, transfer, reverse engineering, decompilation,
|
||||||
|
or disassembly of the Software, in whole or in part, is strictly prohibited
|
||||||
|
without prior written permission from the copyright holder.
|
||||||
|
|
||||||
|
The Software is provided "AS IS", without warranty of any kind, express or
|
||||||
|
implied, including but not limited to the warranties of merchantability,
|
||||||
|
fitness for a particular purpose and noninfringement.
|
||||||
|
|
||||||
|
For licensing inquiries, please contact the copyright holder.
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
Требования: установленный Docker и Docker Compose.
|
Требования: установленный Docker и Docker Compose.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.mycloud24.ru/insight/InviteMe.git
|
git clone <URL-репозитория>
|
||||||
cd InviteMe
|
cd InviteMe
|
||||||
|
|
||||||
# Собрать и запустить
|
# Собрать и запустить
|
||||||
@@ -37,7 +37,7 @@ docker compose up -d --build
|
|||||||
Требования: Python 3.12.
|
Требования: Python 3.12.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.mycloud24.ru/insight/InviteMe.git
|
git clone <URL-репозитория>
|
||||||
cd InviteMe
|
cd InviteMe
|
||||||
|
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
@@ -101,4 +101,4 @@ InviteMe/
|
|||||||
|
|
||||||
## Лицензия
|
## Лицензия
|
||||||
|
|
||||||
Проект распространяется как есть для внутреннего использования.
|
См. файл [LICENSE](LICENSE).
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ def create_app(config_class=Config):
|
|||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_object(config_class)
|
app.config.from_object(config_class)
|
||||||
|
|
||||||
|
secret_key = app.config.get("SECRET_KEY", "")
|
||||||
|
if not secret_key or secret_key == "change-me-in-production":
|
||||||
|
raise RuntimeError(
|
||||||
|
"SECRET_KEY не задан или равен значению по умолчанию. "
|
||||||
|
"Задайте уникальный секретный ключ через переменную окружения SECRET_KEY или файл .env."
|
||||||
|
)
|
||||||
|
|
||||||
# Ensure upload directories exist
|
# Ensure upload directories exist
|
||||||
os.makedirs(app.config["PHOTO_FOLDER"], exist_ok=True)
|
os.makedirs(app.config["PHOTO_FOLDER"], exist_ok=True)
|
||||||
os.makedirs(app.config["QR_FOLDER"], exist_ok=True)
|
os.makedirs(app.config["QR_FOLDER"], exist_ok=True)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label for="ews_url" class="form-label">EWS URL</label>
|
<label for="ews_url" class="form-label">EWS URL</label>
|
||||||
<input type="text" class="form-control" id="ews_url" name="ews_url" value="{{ settings.ews_url or '' }}" placeholder="https://mail.company.com/EWS/Exchange.asmx">
|
<input type="text" class="form-control" id="ews_url" name="ews_url" value="{{ settings.ews_url or '' }}" placeholder="https://mail.company.com/EWS/Exchange.asmx">
|
||||||
<div class="form-text text-muted">URL вида <code>https://mail.integrita.ru/EWS/Exchange.asmx</code></div>
|
<div class="form-text text-muted">URL вида <code>https://mail.company.com/EWS/Exchange.asmx</code></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8 mb-3">
|
<div class="col-md-8 mb-3">
|
||||||
<label for="imap_server" class="form-label">IMAP-сервер</label>
|
<label for="imap_server" class="form-label">IMAP-сервер</label>
|
||||||
<input type="text" class="form-control" id="imap_server" name="imap_server" value="{{ settings.imap_server or '' }}" placeholder="mail.integrita.ru">
|
<input type="text" class="form-control" id="imap_server" name="imap_server" value="{{ settings.imap_server or '' }}" placeholder="imap.example.com">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 mb-3">
|
<div class="col-md-4 mb-3">
|
||||||
<label for="imap_port" class="form-label">Порт</label>
|
<label for="imap_port" class="form-label">Порт</label>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
||||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='images/inviteme_logo.png') }}">
|
<link rel="icon" type="image/png" href="{{ url_for('static', filename='images/inviteme_logo.png') }}">
|
||||||
<!-- InviteMe — crafted for mycloud24.ru -->
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark">
|
<nav class="navbar navbar-expand-lg navbar-dark">
|
||||||
@@ -81,9 +80,5 @@
|
|||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
{% block scripts %}{% endblock %}
|
{% block scripts %}{% endblock %}
|
||||||
|
|
||||||
<div class="easter-egg-star" title="о создателе">
|
|
||||||
★
|
|
||||||
<span class="ee-tooltip">crafted for mycloud24.ru</span>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ BASE_DIR = Path(__file__).resolve().parent
|
|||||||
load_dotenv(BASE_DIR / ".env")
|
load_dotenv(BASE_DIR / ".env")
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
SECRET_KEY = os.environ.get("SECRET_KEY") or "dev-secret-key-change-in-production"
|
SECRET_KEY = os.environ.get("SECRET_KEY") or ""
|
||||||
BASE_URL = os.environ.get("BASE_URL") or None
|
BASE_URL = os.environ.get("BASE_URL") or None
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
|
|||||||
+2
-2
@@ -8,9 +8,9 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "8888:8888"
|
- "8888:8888"
|
||||||
environment:
|
environment:
|
||||||
# Замени на сильный случайный ключ перед запуском в продакшене
|
# Задай сильный случайный секретный ключ перед запуском.
|
||||||
# Пример генерации: openssl rand -hex 32
|
# Пример генерации: openssl rand -hex 32
|
||||||
- SECRET_KEY=change-me-in-production
|
- SECRET_KEY=
|
||||||
- TIMEZONE=Europe/Moscow
|
- TIMEZONE=Europe/Moscow
|
||||||
volumes:
|
volumes:
|
||||||
# База SQLite и загруженные файлы хранятся вне контейнера
|
# База SQLite и загруженные файлы хранятся вне контейнера
|
||||||
|
|||||||
+4
-4
@@ -3,13 +3,13 @@ Flask-SQLAlchemy==3.1.1
|
|||||||
Flask-Limiter==4.1.1
|
Flask-Limiter==4.1.1
|
||||||
Flask-WTF==1.3.0
|
Flask-WTF==1.3.0
|
||||||
WTForms==3.2.2
|
WTForms==3.2.2
|
||||||
waitress==3.2.2
|
waitress==3.0.2
|
||||||
Werkzeug==3.0.1
|
Werkzeug==3.0.3
|
||||||
openpyxl==3.1.2
|
openpyxl==3.1.2
|
||||||
qrcode==7.4.2
|
qrcode==7.4.2
|
||||||
Pillow==10.1.0
|
Pillow==10.2.0
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.0.0
|
||||||
Jinja2==3.1.2
|
Jinja2==3.1.6
|
||||||
svglib==2.2.0
|
svglib==2.2.0
|
||||||
reportlab==5.0.1
|
reportlab==5.0.1
|
||||||
rlPyCairo==0.4.0
|
rlPyCairo==0.4.0
|
||||||
|
|||||||
@@ -3,4 +3,5 @@ from app import create_app
|
|||||||
app = create_app()
|
app = create_app()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run(host="0.0.0.0", port=5000, debug=True)
|
# debug=False для production; для разработки можно временно включить
|
||||||
|
app.run(host="127.0.0.1", port=5000, debug=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user