diff --git a/linux-requirements.txt b/linux-requirements.txt index 756b651..2dd87cf 100644 --- a/linux-requirements.txt +++ b/linux-requirements.txt @@ -3,6 +3,7 @@ certifi==2022.12.7 charset-normalizer==3.0.1 click==7.1.2 dnspython==1.16.0 +ecdsa==0.18.0 email-validator==1.1.2 eventlet==0.30.1 Flask==1.1.2 @@ -26,6 +27,7 @@ pyasn1-modules==0.2.8 pycairo==1.23.0 PyGObject==3.42.2 pyparsing==2.4.7 +pywebpush==1.14.0 pyxdg==0.28 requests==2.28.2 rsa==4.7 diff --git a/src/core/__builtins__.py b/src/core/__builtins__.py index 30e4e11..19bc464 100644 --- a/src/core/__builtins__.py +++ b/src/core/__builtins__.py @@ -11,6 +11,7 @@ from flask import session # Application imports from core import app from core.utils import Logger +from core.utils import MessageHandler # Get simple message processor @@ -51,7 +52,7 @@ builtins.BG_IMGS_PATH = ROOT_FILE_PTH + "/static/imgs/backgrounds/" builtins.BG_FILE_TYPE = (".webm", ".mp4", ".gif", ".jpg", ".png", ".webp") builtins.valid_fname_pat = re.compile(r"[a-z0-9A-Z-_\[\]\(\)\| ]{4,20}") builtins.logger = Logger().get_logger() - +builtins.json_message = MessageHandler() # NOTE: Need threads defined befor instantiating diff --git a/src/core/__init__.py b/src/core/__init__.py index fb9ce5b..cafddee 100644 --- a/src/core/__init__.py +++ b/src/core/__init__.py @@ -6,7 +6,11 @@ from flask import Flask from flask_oidc import OpenIDConnect # Flask Login Path from flask_bcrypt import Bcrypt -from flask_login import current_user, login_user, logout_user, LoginManager +from flask_login import current_user +from flask_login import login_user +from flask_login import logout_user +from flask_login import LoginManager + app = Flask(__name__) app.config.from_object("core.config.ProductionConfig") @@ -36,10 +40,14 @@ app.jinja_env.globals['oidc_isAdmin'] = oidc_isAdmin app.jinja_env.globals['TITLE'] = app.config["TITLE"] -from core.models import db, User, Favorites +from core.models import db +from core.models import User +from core.models import Favorites + db.init_app(app) with app.app_context(): db.create_all() -from core.forms import RegisterForm, LoginForm +from core.forms import RegisterForm +from core.forms import LoginForm from core import routes diff --git a/src/core/config.py b/src/core/config.py index acd6569..bdb3b7f 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -1,14 +1,14 @@ # System import -import os, secrets +import os +import secrets from datetime import timedelta - # Lib imports - # Apoplication imports + # Configs APP_NAME = 'WebFM' ROOT_FILE_PTH = os.path.dirname(os.path.realpath(__file__)) @@ -44,8 +44,8 @@ class Config(object): # We are overiding some of the the shellmen view settings with these to make it all work with flask. # These are passed along to the shellmen view from the Routes file upon the window controller creation. ABS_THUMBS_PTH = f"{STATIC_FPTH}/imgs/thumbnails" # Used for thumbnail generation - REMUX_FOLDER = f"{STATIC_FPTH}/remuxs" # Remuxed files folder - FFMPG_THUMBNLR = f"{STATIC_FPTH}/ffmpegthumbnailer" # Thumbnail generator binary + REMUX_FOLDER = f"{STATIC_FPTH}/remuxs" # Remuxed files folder + FFMPG_THUMBNLR = f"{STATIC_FPTH}/ffmpegthumbnailer" # Thumbnail generator binary diff --git a/src/core/forms.py b/src/core/forms.py index 12ba62b..3fe3127 100644 --- a/src/core/forms.py +++ b/src/core/forms.py @@ -1,9 +1,19 @@ from flask_wtf import FlaskForm -from wtforms import StringField, PasswordField, SubmitField -from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError + +from wtforms import StringField +from wtforms import PasswordField +from wtforms import SubmitField + +from wtforms.validators import DataRequired +from wtforms.validators import Length +from wtforms.validators import Email +from wtforms.validators import EqualTo +from wtforms.validators import ValidationError + from core import User + class RegisterForm(FlaskForm): username = StringField('Username', validators=[DataRequired(), Length(min=4, max=24)]) email = StringField('Email', validators=[DataRequired(), Email()]) diff --git a/src/core/models.py b/src/core/models.py index 2429bf0..1360f85 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -1,11 +1,12 @@ # System imports # Lib imports +from flask_login import UserMixin from flask_sqlalchemy import SQLAlchemy # App imports -from . import app, login_manager -from flask_login import UserMixin +from . import app +from . import login_manager db = SQLAlchemy(app) diff --git a/src/core/routes/CRUD.py b/src/core/routes/CRUD.py index 52c7ffd..c3770c6 100644 --- a/src/core/routes/CRUD.py +++ b/src/core/routes/CRUD.py @@ -9,7 +9,6 @@ from flask_uploads import ALL from flask_uploads import configure_uploads from flask_uploads import UploadSet - # App imports # Get from __init__ from core import app @@ -17,10 +16,6 @@ from core import db from core import Favorites from core import oidc -from core.utils import MessageHandler # Get simple message processor - -json_message = MessageHandler() - @app.route('/api/delete/<_hash>', methods=['GET', 'POST']) diff --git a/src/core/routes/Favorites.py b/src/core/routes/Favorites.py index 5f76298..b449e21 100644 --- a/src/core/routes/Favorites.py +++ b/src/core/routes/Favorites.py @@ -7,10 +7,6 @@ from flask import request from core import app from core import db from core import Favorites # Get from __init__ -from core.utils import MessageHandler # Get simple message processor - - -json_message = MessageHandler() diff --git a/src/core/routes/Images.py b/src/core/routes/Images.py index fe832d7..ea94ade 100644 --- a/src/core/routes/Images.py +++ b/src/core/routes/Images.py @@ -6,17 +6,15 @@ import shutil # Lib imports from flask import request - # App imports # Get from __init__ from core import app - -from core.utils import MessageHandler # Get simple message processor from core.utils.tmdbscraper import scraper # Get media art scraper -json_message = MessageHandler() -tmdb = scraper.get_tmdb_scraper() + +tmdb = scraper.get_tmdb_scraper() + @app.route('/api/get-background-poster-trailer', methods=['GET', 'POST']) diff --git a/src/core/routes/Routes.py b/src/core/routes/Routes.py index e162009..7fd581c 100644 --- a/src/core/routes/Routes.py +++ b/src/core/routes/Routes.py @@ -5,21 +5,16 @@ import os from flask import redirect from flask import request from flask import render_template +from flask import session from flask import send_from_directory # App imports - # Get from __init__ + # Get from __init__ from core import app from core import db from core import Favorites from core import oidc -from core.utils import MessageHandler # Get simple message processor - - - -json_message = MessageHandler() - @app.route('/', methods=['GET', 'POST']) @@ -34,7 +29,6 @@ def home(): message = 'Must use GET request type...') - @app.route('/api/list-files/<_hash>', methods=['GET', 'POST']) def listFiles(_hash = None): if request.method == 'POST': @@ -75,7 +69,6 @@ def listFiles(_hash = None): return json_message.create("danger", msg) - @app.route('/api/file-manager-action/<_type>/<_hash>', methods=['GET', 'POST']) def fileManagerAction(_type, _hash = None): view = get_view() diff --git a/src/core/routes/pages/Flask_Login.py b/src/core/routes/pages/Flask_Login.py index 6d33a83..1b1ae2e 100644 --- a/src/core/routes/pages/Flask_Login.py +++ b/src/core/routes/pages/Flask_Login.py @@ -1,15 +1,24 @@ # Python imports # Lib imports -from flask import request, render_template, flash, redirect, url_for -from flask_login import current_user, login_user, logout_user +from flask import request +from flask import render_template +from flask import flash +from flask import redirect +from flask import url_for + +from flask_login import current_user +from flask_login import login_user +from flask_login import logout_user # App imports -from core import app, bcrypt, db, User, LoginForm -from core.utils import MessageHandler # Get simple message processor +from core import app +from core import bcrypt +from core import db +from core import User +from core import LoginForm -msgHandler = MessageHandler() @app.route('/app-login', methods=['GET', 'POST']) def app_login(): diff --git a/src/core/routes/pages/Flask_Register.py b/src/core/routes/pages/Flask_Register.py index 21398e6..dc25a88 100644 --- a/src/core/routes/pages/Flask_Register.py +++ b/src/core/routes/pages/Flask_Register.py @@ -1,16 +1,21 @@ # Python imports # Lib imports -from flask import request, render_template, url_for, redirect, flash +from flask import render_template +from flask import url_for +from flask import redirect +from flask import flash # App imports -from core import app, bcrypt, db, current_user, RegisterForm # Get from __init__ + # Get from __init__ +from core import app +from core import bcrypt +from core import db +from core import current_user +from core import RegisterForm from core.models import User -from core.utils import MessageHandler # Get simple message processor -msgHandler = MessageHandler() - @app.route('/app-register', methods=['GET', 'POST']) def app_register(): diff --git a/src/core/routes/pages/OIDC_Login.py b/src/core/routes/pages/OIDC_Login.py index b9f4a9b..1c087ee 100644 --- a/src/core/routes/pages/OIDC_Login.py +++ b/src/core/routes/pages/OIDC_Login.py @@ -1,17 +1,19 @@ # Python imports # Lib imports -from flask import request, redirect, flash - +from flask import request +from flask import redirect +from flask import flash # App imports -from ... import app, oidc +from ... import app +from ... import oidc + @app.route('/oidc-login', methods=['GET', 'POST']) @oidc.require_login def oidc_login(): - print(request) return redirect("/") diff --git a/src/core/routes/pages/OIDC_Register.py b/src/core/routes/pages/OIDC_Register.py index a5b02cd..6ac2924 100644 --- a/src/core/routes/pages/OIDC_Register.py +++ b/src/core/routes/pages/OIDC_Register.py @@ -1,15 +1,19 @@ # Python imports # Lib imports -from flask import request, render_template, url_for, redirect, flash +from flask import request +from flask import render_template +from flask import url_for +from flask import redirect +from flask import flash # App imports -from ... import app, oidc, db # Get from __init__ -from ...utils import MessageHandler # Get simple message processor + # Get from __init__ +from ... import app +from ... import oidc +from ... import db -msgHandler = MessageHandler() - @app.route('/oidc-register', methods=['GET', 'POST']) def oidc_register(): diff --git a/src/core/static/js/color-mode-toggler.js b/src/core/static/js/libs/color-mode-toggler.js similarity index 100% rename from src/core/static/js/color-mode-toggler.js rename to src/core/static/js/libs/color-mode-toggler.js diff --git a/src/core/static/js/cookie-manager.js b/src/core/static/js/libs/cookie-manager.js similarity index 100% rename from src/core/static/js/cookie-manager.js rename to src/core/static/js/libs/cookie-manager.js diff --git a/src/core/static/js/ajax.js b/src/core/static/js/webfm/ajax.js similarity index 100% rename from src/core/static/js/ajax.js rename to src/core/static/js/webfm/ajax.js diff --git a/src/core/static/js/backgrounds-manager.js b/src/core/static/js/webfm/backgrounds-manager.js similarity index 100% rename from src/core/static/js/backgrounds-manager.js rename to src/core/static/js/webfm/backgrounds-manager.js diff --git a/src/core/static/js/context-menu.js b/src/core/static/js/webfm/context-menu.js similarity index 89% rename from src/core/static/js/context-menu.js rename to src/core/static/js/webfm/context-menu.js index 487e99a..518e067 100644 --- a/src/core/static/js/context-menu.js +++ b/src/core/static/js/webfm/context-menu.js @@ -15,11 +15,13 @@ const setPosition = ({ top, left }) => { }; -window.addEventListener("click", e => { +document.body.addEventListener("click", e => { if(menuVisible) toggleMenu("hide"); }); -window.addEventListener("contextmenu", e => { +document.body.addEventListener("contextmenu", e => { + e.preventDefault(); + let target = e.target; let elm = target; while (elm.nodeName != "BODY") { @@ -50,6 +52,7 @@ window.addEventListener("contextmenu", e => { left: posX, top: posY }; + setPosition(origin); return false; }); diff --git a/src/core/static/js/events-privileged.js b/src/core/static/js/webfm/events-privileged.js similarity index 100% rename from src/core/static/js/events-privileged.js rename to src/core/static/js/webfm/events-privileged.js diff --git a/src/core/static/js/events.js b/src/core/static/js/webfm/events.js similarity index 100% rename from src/core/static/js/events.js rename to src/core/static/js/webfm/events.js diff --git a/src/core/static/js/post-ajax.js b/src/core/static/js/webfm/post-ajax.js similarity index 100% rename from src/core/static/js/post-ajax.js rename to src/core/static/js/webfm/post-ajax.js diff --git a/src/core/static/js/privileged-logic.js b/src/core/static/js/webfm/privileged-logic.js similarity index 100% rename from src/core/static/js/privileged-logic.js rename to src/core/static/js/webfm/privileged-logic.js diff --git a/src/core/static/js/react-ui-logic.js b/src/core/static/js/webfm/react-ui-logic.js similarity index 98% rename from src/core/static/js/react-ui-logic.js rename to src/core/static/js/webfm/react-ui-logic.js index 8221959..750150b 100644 --- a/src/core/static/js/react-ui-logic.js +++ b/src/core/static/js/webfm/react-ui-logic.js @@ -53,9 +53,7 @@ class FilesList extends React.Component { for (let file of files) { const name = file[0]; - if (name == "000.jpg") { - continue - } + if (name == "000.jpg") { continue } const hash = file[1]; const fsize = file[2]; diff --git a/src/core/static/js/ui-logic.js b/src/core/static/js/webfm/ui-logic.js similarity index 100% rename from src/core/static/js/ui-logic.js rename to src/core/static/js/webfm/ui-logic.js diff --git a/src/core/static/js/video-events.js b/src/core/static/js/webfm/video-events.js similarity index 100% rename from src/core/static/js/video-events.js rename to src/core/static/js/webfm/video-events.js diff --git a/src/core/templates/layout.html b/src/core/templates/layout.html index d404a03..e6611dc 100644 --- a/src/core/templates/layout.html +++ b/src/core/templates/layout.html @@ -117,10 +117,10 @@ {% block body_scripts_additional %} {% endblock body_scripts_additional%} - - - - + + + + {% endblock %} diff --git a/src/core/templates/pages/index.html b/src/core/templates/pages/index.html index 5b8aaac..27f7bdf 100644 --- a/src/core/templates/pages/index.html +++ b/src/core/templates/pages/index.html @@ -14,6 +14,7 @@ {% endblock body_header_additional %} {% block body_content_additional %} +
{% block favorites_modal %} @@ -26,16 +27,16 @@ {% block body_scripts_additional %} - - - - - + + + + + {% if oidc_loggedin() and oidc_isAdmin() %} - - + + {% endif %} - + {% endblock body_scripts_additional %} diff --git a/src/core/utils/Logger.py b/src/core/utils/Logger.py index fed0b0e..e981a29 100644 --- a/src/core/utils/Logger.py +++ b/src/core/utils/Logger.py @@ -1,5 +1,6 @@ # Python imports -import os, logging +import os +import logging # Application imports diff --git a/src/core/utils/MessageHandler.py b/src/core/utils/MessageHandler.py index 45d6e3a..1db3ba2 100644 --- a/src/core/utils/MessageHandler.py +++ b/src/core/utils/MessageHandler.py @@ -6,6 +6,7 @@ import json # Application imports + class MessageHandler: def __init__(self): print("MessageHandler initialized...")