Progress
This commit is contained in:
		@@ -1,9 +1,5 @@
 | 
				
			|||||||
from .bootstrap import bootstrap
 | 
					from .modules import bootstrap, csrf, db, login_manager, mail
 | 
				
			||||||
from .config import DevelopmentConfig as Config
 | 
					from .config import DevelopmentConfig as Config
 | 
				
			||||||
from .csrf import csrf
 | 
					 | 
				
			||||||
from .database import db
 | 
					 | 
				
			||||||
from .login_manager import login_manager
 | 
					 | 
				
			||||||
from .mail import mail
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from flask import Flask
 | 
					from flask import Flask
 | 
				
			||||||
from flask_wtf.csrf import CSRFError
 | 
					from flask_wtf.csrf import CSRFError
 | 
				
			||||||
@@ -14,7 +10,7 @@ from datetime import datetime
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from .admin.views import admin
 | 
					from .admin.views import admin
 | 
				
			||||||
from .api.views import api
 | 
					from .api.views import api
 | 
				
			||||||
from .common.views import common
 | 
					from .views import views
 | 
				
			||||||
from .quiz.views import quiz
 | 
					from .quiz.views import quiz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def create_app():
 | 
					def create_app():
 | 
				
			||||||
@@ -46,7 +42,7 @@ def create_app():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    app.register_blueprint(admin, url_prefix='/admin')
 | 
					    app.register_blueprint(admin, url_prefix='/admin')
 | 
				
			||||||
    app.register_blueprint(api, url_prefix='/api')
 | 
					    app.register_blueprint(api, url_prefix='/api')
 | 
				
			||||||
    app.register_blueprint(common)
 | 
					    app.register_blueprint(views)
 | 
				
			||||||
    app.register_blueprint(quiz)
 | 
					    app.register_blueprint(quiz)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return app
 | 
					    return app
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
from ensurepip import bootstrap
 | 
					 | 
				
			||||||
from flask_bootstrap import Bootstrap
 | 
					 | 
				
			||||||
bootstrap = Bootstrap()
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
from . import common
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@common.route('/privacy/')
 | 
					 | 
				
			||||||
def _privacy():
 | 
					 | 
				
			||||||
    return 'Privacy Policy'
 | 
					 | 
				
			||||||
@@ -4,26 +4,25 @@ load_dotenv()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class Config(object):
 | 
					class Config(object):
 | 
				
			||||||
    APP_HOST = '0.0.0.0'
 | 
					    APP_HOST = '0.0.0.0'
 | 
				
			||||||
 | 
					    DATA_FILE_DIRECTORY = os.getenv('DATA_FILE_DIRECTORY')
 | 
				
			||||||
    DEBUG = False
 | 
					    DEBUG = False
 | 
				
			||||||
    TESTING = False
 | 
					    TESTING = False
 | 
				
			||||||
    SECRET_KEY = os.getenv('SECRET_KEY')
 | 
					    SECRET_KEY = os.getenv('SECRET_KEY')
 | 
				
			||||||
    SERVER_NAME = os.getenv('SERVER_NAME')
 | 
					 | 
				
			||||||
    SESSION_COOKIE_SECURE = True
 | 
					    SESSION_COOKIE_SECURE = True
 | 
				
			||||||
    SQLALCHEMY_DATABASE_URI = 'sqlite:///data/database.db'
 | 
					    SQLALCHEMY_DATABASE_URI = 'sqlite:///data/database.db'
 | 
				
			||||||
    SQLALCHEMY_TRACK_MODIFICATIONS = False
 | 
					    SQLALCHEMY_TRACK_MODIFICATIONS = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MAIL_SERVER = os.getenv("MAIL_SERVER")
 | 
					    MAIL_SERVER = os.getenv('MAIL_SERVER')
 | 
				
			||||||
    MAIL_PORT = int(os.getenv("MAIL_PORT"))
 | 
					    MAIL_PORT = int(os.getenv('MAIL_PORT'))
 | 
				
			||||||
    MAIL_USE_TLS = False
 | 
					    MAIL_USE_TLS = False
 | 
				
			||||||
    MAIL_USE_SSL = False
 | 
					    MAIL_USE_SSL = False
 | 
				
			||||||
    MAIL_DEBUG = False
 | 
					    MAIL_DEBUG = False
 | 
				
			||||||
    MAIL_USERNAME = os.getenv("MAIL_USERNAME")
 | 
					    MAIL_USERNAME = os.getenv('MAIL_USERNAME')
 | 
				
			||||||
    MAIL_PASSWORD = os.getenv("MAIL_PASSWORD")
 | 
					    MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
 | 
				
			||||||
    MAIL_DEFAULT_SENDER = os.getenv("MAIL_DEFAULT_SENDER")
 | 
					    MAIL_DEFAULT_SENDER = os.getenv('MAIL_DEFAULT_SENDER')
 | 
				
			||||||
    MAIL_MAX_EMAILS = int(os.getenv("MAIL_MAX_EMAILS"))
 | 
					    MAIL_MAX_EMAILS = int(os.getenv('MAIL_MAX_EMAILS'))
 | 
				
			||||||
    MAIL_SUPPRESS_SEND = False
 | 
					    MAIL_SUPPRESS_SEND = False
 | 
				
			||||||
    MAIL_ASCII_ATTACHMENTS = bool(os.getenv("MAIL_ASCII_ATTACHMENTS"))
 | 
					    MAIL_ASCII_ATTACHMENTS = bool(os.getenv('MAIL_ASCII_ATTACHMENTS'))
 | 
				
			||||||
    DATA_FILE_DIRECTORY = os.getenv("DATA_FILE_DIRECTORY")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ProductionConfig(Config):
 | 
					class ProductionConfig(Config):
 | 
				
			||||||
    pass
 | 
					    pass
 | 
				
			||||||
@@ -39,6 +38,6 @@ class DevelopmentConfig(Config):
 | 
				
			|||||||
class TestingConfig(DevelopmentConfig):
 | 
					class TestingConfig(DevelopmentConfig):
 | 
				
			||||||
    TESTING = True
 | 
					    TESTING = True
 | 
				
			||||||
    SESSION_COOKIE_SECURE = False
 | 
					    SESSION_COOKIE_SECURE = False
 | 
				
			||||||
    MAIL_SERVER = os.getenv("MAIL_SERVER")
 | 
					    MAIL_SERVER = os.getenv('MAIL_SERVER')
 | 
				
			||||||
    MAIL_DEBUG = True
 | 
					    MAIL_DEBUG = True
 | 
				
			||||||
    MAIL_SUPPRESS_SEND = False
 | 
					    MAIL_SUPPRESS_SEND = False
 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
from flask_wtf.csrf import CSRFProtect
 | 
					 | 
				
			||||||
csrf = CSRFProtect()
 | 
					 | 
				
			||||||
							
								
								
									
										5
									
								
								ref-test/app/data.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								ref-test/app/data.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					from . import Config
 | 
				
			||||||
 | 
					from os import path
 | 
				
			||||||
 | 
					from pathlib import Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					data = Path(Config.DATA_FILE_DIRECTORY)
 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
from flask_sqlalchemy import SQLAlchemy
 | 
					 | 
				
			||||||
db = SQLAlchemy()
 | 
					 | 
				
			||||||
@@ -1,2 +1,29 @@
 | 
				
			|||||||
# if not database_exists(Config.SQLALCHEMY_DATABASE_URI): create_database(Config.SQLALCHEMY_DATABASE_URI)
 | 
					from main import app
 | 
				
			||||||
# with app.app_context(): db.create_all()
 | 
					from . import Config
 | 
				
			||||||
 | 
					from .data import data
 | 
				
			||||||
 | 
					from .modules import db
 | 
				
			||||||
 | 
					from .tools.data import save
 | 
				
			||||||
 | 
					from .tools.logs import write
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from os import mkdir, path, system
 | 
				
			||||||
 | 
					from cryptography.fernet import Fernet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from sqlalchemy_utils import database_exists, create_database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def install_scripts():
 | 
				
			||||||
 | 
					    if not path.isdir(f'./{data}'): mkdir(f'./{data}')
 | 
				
			||||||
 | 
					    if not path.isfile(f'./{data}/config.json'): save({}, 'config.json')
 | 
				
			||||||
 | 
					    if not path.isdir(f'./{data}/logs'): mkdir(f'./{data}/logs')
 | 
				
			||||||
 | 
					    if not path.isfile(f'./{data}/logs/users.log'): write('users.log', 'Log file created.')
 | 
				
			||||||
 | 
					    if not path.isfile(f'./{data}/logs/system.log'): write('system.log', 'Log file created.')
 | 
				
			||||||
 | 
					    if not path.isfile(f'./{data}/logs/tests.log'): write('commands.log', 'Log file created.')
 | 
				
			||||||
 | 
					    if not database_exists(Config.SQLALCHEMY_DATABASE_URI):        
 | 
				
			||||||
 | 
					        create_database(Config.SQLALCHEMY_DATABASE_URI)
 | 
				
			||||||
 | 
					        write('system.log', 'No database found. Creating a new database.')
 | 
				
			||||||
 | 
					        with app.app_context(): db.create_all()
 | 
				
			||||||
 | 
					        write('system.log', 'Creating database schema.')
 | 
				
			||||||
 | 
					    if not path.isfile(f'./{data}/.encryption.key'):
 | 
				
			||||||
 | 
					        write('system.log', 'No encryption key found. Generating new encryption key.')
 | 
				
			||||||
 | 
					        with open(f'./{data}/.encryption.key', 'wb') as key_file:
 | 
				
			||||||
 | 
					            key = Fernet.generate_key()
 | 
				
			||||||
 | 
					            key_file.write(key)
 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
from flask_login import LoginManager
 | 
					 | 
				
			||||||
login_manager = LoginManager()
 | 
					 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
from flask_mail import Mail
 | 
					 | 
				
			||||||
mail = Mail()
 | 
					 | 
				
			||||||
							
								
								
									
										10
									
								
								ref-test/app/modules.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ref-test/app/modules.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					from flask_bootstrap import Bootstrap
 | 
				
			||||||
 | 
					bootstrap = Bootstrap()
 | 
				
			||||||
 | 
					from flask_wtf.csrf import CSRFProtect
 | 
				
			||||||
 | 
					csrf = CSRFProtect()
 | 
				
			||||||
 | 
					from flask_sqlalchemy import SQLAlchemy
 | 
				
			||||||
 | 
					db = SQLAlchemy()
 | 
				
			||||||
 | 
					from flask_login import LoginManager
 | 
				
			||||||
 | 
					login_manager = LoginManager()
 | 
				
			||||||
 | 
					from flask_mail import Mail
 | 
				
			||||||
 | 
					mail = Mail()
 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
from flask import Blueprint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
foo = Blueprint(
 | 
					 | 
				
			||||||
    name='foo',
 | 
					 | 
				
			||||||
    import_name=__name__
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@foo.route('/')
 | 
					 | 
				
			||||||
def testing():
 | 
					 | 
				
			||||||
    return 'Testing'
 | 
					 | 
				
			||||||
							
								
								
									
										11
									
								
								ref-test/app/tools/data.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ref-test/app/tools/data.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					from .. import Config
 | 
				
			||||||
 | 
					from ..data import data_dir
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def load(filename:str):
 | 
				
			||||||
 | 
					    with open(f'./{data_dir}/{filename}') as file:
 | 
				
			||||||
 | 
					        return json.load(file)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def save(data:dict, filename:str):
 | 
				
			||||||
 | 
					    with open(f'./{data_dir}/{filename}', 'w') as file:
 | 
				
			||||||
 | 
					        json.dump(data, file, indent=4)
 | 
				
			||||||
							
								
								
									
										11
									
								
								ref-test/app/tools/logs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ref-test/app/tools/logs.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					from .. import Config
 | 
				
			||||||
 | 
					from ..data import data
 | 
				
			||||||
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def read(filename:str):
 | 
				
			||||||
 | 
					    with open(f'./{data}/logs/{filename}') as file:
 | 
				
			||||||
 | 
					        return file.readlines()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def write(filename:str, message:str):
 | 
				
			||||||
 | 
					    with open(f'./{data}/logs/{filename}', 'a+') as file:
 | 
				
			||||||
 | 
					        file.write(f'{datetime.now().strftime("%Y-%m-%d-%X")}: {message}\n')
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
from flask import Blueprint
 | 
					from flask import Blueprint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
common = Blueprint(
 | 
					views = Blueprint(
 | 
				
			||||||
    name='common',
 | 
					    name='common',
 | 
				
			||||||
    import_name=__name__,
 | 
					    import_name=__name__,
 | 
				
			||||||
    template_folder='templates',
 | 
					    template_folder='templates',
 | 
				
			||||||
							
								
								
									
										5
									
								
								ref-test/app/views/privacy.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								ref-test/app/views/privacy.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					from . import views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@views.route('/privacy/')
 | 
				
			||||||
 | 
					def _privacy():
 | 
				
			||||||
 | 
					    return 'Privacy Policy'
 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
#!/bin/env python
 | 
					#!/bin/env python
 | 
				
			||||||
from distutils.log import debug
 | 
					 | 
				
			||||||
from app import create_app
 | 
					from app import create_app
 | 
				
			||||||
app = create_app()
 | 
					app = create_app()
 | 
				
			||||||
if __name__ == '__main__': app.run()
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    from app.install import install_scripts
 | 
				
			||||||
 | 
					    install_scripts()
 | 
				
			||||||
 | 
					    app.run()
 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
from flask import Flask
 | 
					 | 
				
			||||||
from .deeper import t
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def create_app():
 | 
					 | 
				
			||||||
    app = Flask(__name__)
 | 
					 | 
				
			||||||
    app.register_blueprint(t)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return app
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
from flask import Blueprint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
t = Blueprint(name='test', import_name=__name__)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from . import foo
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
from . import t
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@t.route('/')
 | 
					 | 
				
			||||||
def _t():
 | 
					 | 
				
			||||||
    return 'Test'
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
from subfolder import create_app
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
app = create_app()
 | 
					 | 
				
			||||||
app.run()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user