wip
This commit is contained in:
parent
539d6a6416
commit
f939933a7c
9 changed files with 62 additions and 59 deletions
BIN
__pycache__/config.cpython-313.pyc
Normal file
BIN
__pycache__/config.cpython-313.pyc
Normal file
Binary file not shown.
|
@ -108,6 +108,17 @@ def create_app(config_name='development'):
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
print(f"Could not import API blueprint: {e}")
|
print(f"Could not import API blueprint: {e}")
|
||||||
|
|
||||||
|
# Register template filters - IMPORTANT FOR MARKDOWN FILTER
|
||||||
|
from app.core.template_filters import bp as filters_bp
|
||||||
|
app.register_blueprint(filters_bp)
|
||||||
|
|
||||||
|
# Register template filters directly if the blueprint method doesn't work
|
||||||
|
from app.core.template_filters import markdown_filter, ip_network_filter, ip_address_filter, get_ip_network
|
||||||
|
app.jinja_env.filters['markdown'] = markdown_filter
|
||||||
|
app.jinja_env.filters['ip_network'] = ip_network_filter
|
||||||
|
app.jinja_env.filters['ip_address'] = ip_address_filter
|
||||||
|
app.jinja_env.globals['get_ip_network'] = get_ip_network
|
||||||
|
|
||||||
# Create database tables
|
# Create database tables
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
try:
|
try:
|
||||||
|
|
Binary file not shown.
BIN
app/core/__pycache__/template_filters.cpython-313.pyc
Normal file
BIN
app/core/__pycache__/template_filters.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
|
@ -103,79 +103,37 @@
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<!-- Applications -->
|
<!-- Applications -->
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header d-flex align-items-center">
|
<div class="card-header">
|
||||||
<h3 class="card-title">Applications</h3>
|
<h3 class="card-title">Applications</h3>
|
||||||
<div class="ms-auto">
|
<div class="card-actions">
|
||||||
<a href="{{ url_for('dashboard.app_new', server_id=server.id) }}" class="btn btn-sm btn-primary">
|
<a href="{{ url_for('dashboard.app_new', server_id=server.id) }}" class="btn btn-primary">
|
||||||
<i class="ti ti-plus me-1"></i> Add Application
|
<span class="ti ti-plus me-2"></span> Add Application
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% if server.apps %}
|
{% if server.apps %}
|
||||||
<div class="accordion" id="applicationAccordion">
|
<div class="row row-cards">
|
||||||
{% for app in server.apps %}
|
{% for app in server.apps %}
|
||||||
<div class="accordion-item">
|
<div class="col-md-6 col-lg-4">
|
||||||
<h2 class="accordion-header" id="heading{{ app.id }}">
|
<div class="card">
|
||||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
<div class="card-body">
|
||||||
data-bs-target="#collapse{{ app.id }}" aria-expanded="false" aria-controls="collapse{{ app.id }}">
|
<h3 class="card-title">
|
||||||
<span class="me-2">{{ app.name }}</span>
|
<a href="{{ url_for('dashboard.app_view', app_id=app.id) }}">{{ app.name }}</a>
|
||||||
|
</h3>
|
||||||
{% if app.ports %}
|
{% if app.ports %}
|
||||||
<div class="ms-auto d-flex">
|
<div class="mt-2">
|
||||||
|
<span class="badge bg-blue me-1">Ports:</span>
|
||||||
{% for port in app.ports %}
|
{% for port in app.ports %}
|
||||||
<span class="badge bg-primary me-1">{{ port.port_number }}/{{ port.protocol }}</span>
|
<span class="badge bg-azure me-1">{{ port.port_number }}/{{ port.protocol }}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="collapse{{ app.id }}" class="accordion-collapse collapse" aria-labelledby="heading{{ app.id }}"
|
|
||||||
data-bs-parent="#applicationAccordion">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<div class="d-flex justify-content-end mb-2">
|
|
||||||
<a href="{{ url_for('dashboard.app_edit', app_id=app.id) }}"
|
|
||||||
class="btn btn-sm btn-outline-primary me-2">
|
|
||||||
<i class="ti ti-edit"></i> Edit
|
|
||||||
</a>
|
|
||||||
<button type="button" class="btn btn-sm btn-outline-danger"
|
|
||||||
onclick="confirmDeleteApp({{ app.id }}, '{{ app.name }}')">
|
|
||||||
<i class="ti ti-trash"></i> Delete
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Ports -->
|
|
||||||
{% if app.ports %}
|
|
||||||
<div class="mb-3">
|
|
||||||
<h5>Ports</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-vcenter table-sm">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Port</th>
|
|
||||||
<th>Protocol</th>
|
|
||||||
<th>Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for port in app.ports %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ port.port_number }}</td>
|
|
||||||
<td>{{ port.protocol }}</td>
|
|
||||||
<td>{{ port.description }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- Documentation -->
|
|
||||||
{% if app.documentation %}
|
{% if app.documentation %}
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
<h5>Documentation</h5>
|
<h5>Documentation</h5>
|
||||||
<div class="markdown-body">
|
<div class="markdown-body">
|
||||||
{{ app.documentation|markdown }}
|
{{ app.documentation|markdown|safe }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
28
config.py
Normal file
28
config.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
"""Base config."""
|
||||||
|
SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-key-placeholder')
|
||||||
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||||
|
WTF_CSRF_ENABLED = True
|
||||||
|
SESSION_COOKIE_SECURE = False # Set to True in production with HTTPS
|
||||||
|
|
||||||
|
class DevelopmentConfig(Config):
|
||||||
|
"""Development config."""
|
||||||
|
DEBUG = True
|
||||||
|
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL', 'sqlite:///app.db')
|
||||||
|
SQLALCHEMY_ECHO = True
|
||||||
|
|
||||||
|
class ProductionConfig(Config):
|
||||||
|
"""Production config."""
|
||||||
|
DEBUG = False
|
||||||
|
TESTING = False
|
||||||
|
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL', 'sqlite:///app.db')
|
||||||
|
SESSION_COOKIE_SECURE = True
|
||||||
|
REMEMBER_COOKIE_SECURE = True
|
||||||
|
|
||||||
|
class TestingConfig(Config):
|
||||||
|
"""Testing config."""
|
||||||
|
TESTING = True
|
||||||
|
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
|
||||||
|
WTF_CSRF_ENABLED = False
|
BIN
instance/app.db
Normal file
BIN
instance/app.db
Normal file
Binary file not shown.
10
wsgi.py
10
wsgi.py
|
@ -1,7 +1,13 @@
|
||||||
|
import os
|
||||||
from app import create_app
|
from app import create_app
|
||||||
|
|
||||||
# Create application instance - production
|
# Set the environment variable for database URL if needed
|
||||||
|
# os.environ['DATABASE_URL'] = 'your_production_database_url'
|
||||||
|
|
||||||
|
# Create a production application
|
||||||
app = create_app('production')
|
app = create_app('production')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run()
|
# This is only used for development
|
||||||
|
# In production, a WSGI server would import this file
|
||||||
|
app.run(host='0.0.0.0', port=5000)
|
Loading…
Add table
Add a link
Reference in a new issue