diff --git a/src/core/client_secrets.json b/src/core/client_secrets.json index 591590c..e751d50 100644 --- a/src/core/client_secrets.json +++ b/src/core/client_secrets.json @@ -5,8 +5,7 @@ "issuer": "https://www.ssoapps.com/auth/realms/apps", "client_secret": "ce6fdb7d-fdcb-46ea-bc80-b5df9649d50b", "redirect_uris": [ - "https://www.webfm.com/home", - "http://www.webfm.com/home" + "https://www.webfm.com/home" ], "userinfo_uri": "https://www.ssoapps.com/auth/realms/apps/protocol/openid-connect/userinfo", "token_uri": "https://www.ssoapps.com/auth/realms/apps/protocol/openid-connect/token", diff --git a/src/core/config.py b/src/core/config.py index 9a54cfe..7dd22cf 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -9,13 +9,9 @@ from datetime import timedelta # Apoplication imports -APP_NAME = 'WebFM' # Configs +APP_NAME = 'WebFM' ROOT_FILE_PTH = os.path.dirname(os.path.realpath(__file__)) -# This path is submitted as the redirect URI in certain code flows. -REDIRECT_LINK = "https%3A%2F%2Fwww.webfm.com%2F" - - class Config(object): @@ -28,16 +24,16 @@ class Config(object): SQLALCHEMY_DATABASE_URI = "sqlite:///static/db/webfm.db" SQLALCHEMY_TRACK_MODIFICATIONS = False - LOGIN_PATH = "FLASK_LOGIN" # Value can be OIDC or FLASK_LOGIN + LOGIN_PATH = "OIDC" # Value can be OIDC or FLASK_LOGIN OIDC_TOKEN_TYPE_HINT = 'access_token' - APP_REDIRECT_URI = REDIRECT_LINK + APP_REDIRECT_URI = "https%3A%2F%2Fwww.webfm.com%2F" # This path is submitted as the redirect URI in certain code flows OIDC_CLIENT_SECRETS = ROOT_FILE_PTH + '/client_secrets.json' OIDC_ID_TOKEN_COOKIE_SECURE = True - OIDC_REQUIRE_VERIFIED_EMAIL = True + OIDC_REQUIRE_VERIFIED_EMAIL = False OIDC_USER_INFO_ENABLED = True OIDC_VALID_ISSUERS = [ - 'http://localhost:8080/auth/realms/apps', - 'https://localhost:443/auth/realms/apps' + 'http://www.ssoapps.com/auth/realms/apps', + 'https://www.ssoapps.com/auth/realms/apps' ] STATIC_FPTH = ROOT_FILE_PTH + "/static" diff --git a/src/core/routes/Routes.py b/src/core/routes/Routes.py index 961c520..0ef5408 100644 --- a/src/core/routes/Routes.py +++ b/src/core/routes/Routes.py @@ -1,5 +1,5 @@ # Python imports -import json, secrets +import os, json, secrets # Lib imports from flask import request, session, render_template, send_from_directory, redirect @@ -24,6 +24,7 @@ def get_window_controller(): view.ABS_THUMBS_PTH = app.config['ABS_THUMBS_PTH'] view.REMUX_FOLDER = app.config['REMUX_FOLDER'] view.FFMPG_THUMBNLR = app.config['FFMPG_THUMBNLR'] + view.logger = logger session['win_controller_id'] = id window_controllers.update( {id: controller } ) @@ -86,10 +87,10 @@ def fileManagerAction(_type, _hash = None): return redirect("/") - folder = view.get_path() - file = view.returnPathPartFromHash(hash) + folder = view.get_current_directory() + file = view.get_path_part_from_hash(_hash) fpath = os.path.join(folder, file) - logging.debug(fpath) + logger.debug(fpath) if _type == "files": return send_from_directory(folder, file) @@ -97,7 +98,7 @@ def fileManagerAction(_type, _hash = None): # NOTE: Need to actually implimint a websocket to communicate back to client that remux has completed. # As is, the remux thread hangs until completion and client tries waiting until server reaches connection timeout. # I.E....this is stupid but for now works better than nothing - return view.remuxVideo(hash, fpath) + return view.remuxVideo(_hash, fpath) if _type == "run-locally": view.openFilelocally(fpath) return msgHandler.createMessageJSON("success", msg) diff --git a/src/core/static/js/events.js b/src/core/static/js/events.js index 1930b26..ad65c21 100644 --- a/src/core/static/js/events.js +++ b/src/core/static/js/events.js @@ -20,6 +20,8 @@ document.body.onload = (eve) => { } } + + const openFile = (eve) => { let target = eve.target; let hash = target.getAttribute("app"); @@ -32,6 +34,38 @@ const openFileLocally = (eve) => { openWithLocalProgram(hash); } +// Actions for content +// document.getElementById('file-grid').ondblclick = (event) => { +// let target = event.target; +// let className = target.className; +// +// // Left click detect +// if (event.which == 1) { +// // If clicking on container +// if (className === "dir-style" || className === "video-style" || +// className === "file-style" || className === "image-style") { +// const title = target.getAttribute("title"); +// const hash = target.getAttribute("hash"); +// const parts = title.split('.'); +// const extension = "." + parts[parts.length - 1].toLowerCase(); +// +// if (className === "dir-style") { +// listFilesAjax(hash); +// } else if (className === "video-style") { +// showMedia(hash, extension, "video"); +// } else { +// showMedia(hash, extension, "file"); +// } +// } +// } +// } + + + + + + + $( "#search-files-field" ).bind( "keyup", async function(eve) { searchPage(); }); diff --git a/src/core/static/js/libs/react/babel.js b/src/core/static/js/libs/react/babel.js deleted file mode 100644 index c86b8bd..0000000 --- a/src/core/static/js/libs/react/babel.js +++ /dev/null @@ -1,61686 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["Babel"] = factory(); - else - root["Babel"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ((function(modules) { - // Check all modules for deduplicated modules - for(var i in modules) { - if(Object.prototype.hasOwnProperty.call(modules, i)) { - switch(typeof modules[i]) { - case "function": break; - case "object": - // Module can be created from a template - modules[i] = (function(_m) { - var args = _m.slice(1), fn = modules[_m[0]]; - return function (a,b,c) { - fn.apply(this, [a,b,c].concat(args)); - }; - }(modules[i])); - break; - default: - // Module is a copy of another module - modules[i] = modules[modules[i]]; - break; - } - } - } - return modules; -}([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.version = exports.buildExternalHelpers = exports.availablePresets = exports.availablePlugins = undefined; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - - exports.transform = transform; - exports.transformFromAst = transformFromAst; - exports.registerPlugin = registerPlugin; - exports.registerPlugins = registerPlugins; - exports.registerPreset = registerPreset; - exports.registerPresets = registerPresets; - exports.transformScriptTags = transformScriptTags; - exports.disableScriptTags = disableScriptTags; - - var _babelCore = __webpack_require__(290); - - var Babel = _interopRequireWildcard(_babelCore); - - var _transformScriptTags = __webpack_require__(629); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - var isArray = Array.isArray || function (arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - }; - - /** - * Loads the given name (or [name, options] pair) from the given table object - * holding the available presets or plugins. - * - * Returns undefined if the preset or plugin is not available; passes through - * name unmodified if it (or the first element of the pair) is not a string. - */ - function loadBuiltin(builtinTable, name) { - if (isArray(name) && typeof name[0] === 'string') { - if (builtinTable.hasOwnProperty(name[0])) { - return [builtinTable[name[0]]].concat(name.slice(1)); - } - return; - } else if (typeof name === 'string') { - return builtinTable[name]; - } - // Could be an actual preset/plugin module - return name; - } - - /** - * Parses plugin names and presets from the specified options. - */ - function processOptions(options) { - // Parse preset names - var presets = (options.presets || []).map(function (presetName) { - var preset = loadBuiltin(availablePresets, presetName); - - if (preset) { - // workaround for babel issue - // at some point, babel copies the preset, losing the non-enumerable - // buildPreset key; convert it into an enumerable key. - if (isArray(preset) && _typeof(preset[0]) === 'object' && preset[0].hasOwnProperty('buildPreset')) { - preset[0] = _extends({}, preset[0], { buildPreset: preset[0].buildPreset }); - } - } else { - throw new Error('Invalid preset specified in Babel options: "' + presetName + '"'); - } - return preset; - }); - - // Parse plugin names - var plugins = (options.plugins || []).map(function (pluginName) { - var plugin = loadBuiltin(availablePlugins, pluginName); - - if (!plugin) { - throw new Error('Invalid plugin specified in Babel options: "' + pluginName + '"'); - } - return plugin; - }); - - return _extends({ - babelrc: false - }, options, { - presets: presets, - plugins: plugins - }); - } - - function transform(code, options) { - return Babel.transform(code, processOptions(options)); - } - - function transformFromAst(ast, code, options) { - return Babel.transformFromAst(ast, code, processOptions(options)); - } - var availablePlugins = exports.availablePlugins = {}; - var availablePresets = exports.availablePresets = {}; - var buildExternalHelpers = exports.buildExternalHelpers = Babel.buildExternalHelpers; - /** - * Registers a named plugin for use with Babel. - */ - function registerPlugin(name, plugin) { - if (availablePlugins.hasOwnProperty(name)) { - console.warn('A plugin named "' + name + '" is already registered, it will be overridden'); - } - availablePlugins[name] = plugin; - } - /** - * Registers multiple plugins for use with Babel. `newPlugins` should be an object where the key - * is the name of the plugin, and the value is the plugin itself. - */ - function registerPlugins(newPlugins) { - Object.keys(newPlugins).forEach(function (name) { - return registerPlugin(name, newPlugins[name]); - }); - } - - /** - * Registers a named preset for use with Babel. - */ - function registerPreset(name, preset) { - if (availablePresets.hasOwnProperty(name)) { - console.warn('A preset named "' + name + '" is already registered, it will be overridden'); - } - availablePresets[name] = preset; - } - /** - * Registers multiple presets for use with Babel. `newPresets` should be an object where the key - * is the name of the preset, and the value is the preset itself. - */ - function registerPresets(newPresets) { - Object.keys(newPresets).forEach(function (name) { - return registerPreset(name, newPresets[name]); - }); - } - - // All the plugins we should bundle - registerPlugins({ - 'check-es2015-constants': __webpack_require__(66), - 'external-helpers': __webpack_require__(322), - 'inline-replace-variables': __webpack_require__(323), - 'syntax-async-functions': __webpack_require__(67), - 'syntax-async-generators': __webpack_require__(195), - 'syntax-class-constructor-call': __webpack_require__(196), - 'syntax-class-properties': __webpack_require__(197), - 'syntax-decorators': __webpack_require__(125), - 'syntax-do-expressions': __webpack_require__(198), - 'syntax-exponentiation-operator': __webpack_require__(199), - 'syntax-export-extensions': __webpack_require__(200), - 'syntax-flow': __webpack_require__(126), - 'syntax-function-bind': __webpack_require__(201), - 'syntax-function-sent': __webpack_require__(325), - 'syntax-jsx': __webpack_require__(127), - 'syntax-object-rest-spread': __webpack_require__(202), - 'syntax-trailing-function-commas': __webpack_require__(128), - 'transform-async-functions': __webpack_require__(326), - 'transform-async-to-generator': __webpack_require__(129), - 'transform-async-to-module-method': __webpack_require__(328), - 'transform-class-constructor-call': __webpack_require__(203), - 'transform-class-properties': __webpack_require__(204), - 'transform-decorators': __webpack_require__(205), - 'transform-decorators-legacy': __webpack_require__(329).default, // <- No clue. Nope. - 'transform-do-expressions': __webpack_require__(206), - 'transform-es2015-arrow-functions': __webpack_require__(68), - 'transform-es2015-block-scoped-functions': __webpack_require__(69), - 'transform-es2015-block-scoping': __webpack_require__(70), - 'transform-es2015-classes': __webpack_require__(71), - 'transform-es2015-computed-properties': __webpack_require__(72), - 'transform-es2015-destructuring': __webpack_require__(73), - 'transform-es2015-duplicate-keys': __webpack_require__(130), - 'transform-es2015-for-of': __webpack_require__(74), - 'transform-es2015-function-name': __webpack_require__(75), - 'transform-es2015-instanceof': __webpack_require__(332), - 'transform-es2015-literals': __webpack_require__(76), - 'transform-es2015-modules-amd': __webpack_require__(131), - 'transform-es2015-modules-commonjs': __webpack_require__(77), - 'transform-es2015-modules-systemjs': __webpack_require__(208), - 'transform-es2015-modules-umd': __webpack_require__(209), - 'transform-es2015-object-super': __webpack_require__(78), - 'transform-es2015-parameters': __webpack_require__(79), - 'transform-es2015-shorthand-properties': __webpack_require__(80), - 'transform-es2015-spread': __webpack_require__(81), - 'transform-es2015-sticky-regex': __webpack_require__(82), - 'transform-es2015-template-literals': __webpack_require__(83), - 'transform-es2015-typeof-symbol': __webpack_require__(84), - 'transform-es2015-unicode-regex': __webpack_require__(85), - 'transform-es3-member-expression-literals': __webpack_require__(336), - 'transform-es3-property-literals': __webpack_require__(337), - 'transform-es5-property-mutators': __webpack_require__(338), - 'transform-eval': __webpack_require__(339), - 'transform-exponentiation-operator': __webpack_require__(132), - 'transform-export-extensions': __webpack_require__(210), - 'transform-flow-comments': __webpack_require__(340), - 'transform-flow-strip-types': __webpack_require__(211), - 'transform-function-bind': __webpack_require__(212), - 'transform-jscript': __webpack_require__(341), - 'transform-object-assign': __webpack_require__(342), - 'transform-object-rest-spread': __webpack_require__(213), - 'transform-object-set-prototype-of-to-assign': __webpack_require__(343), - 'transform-proto-to-assign': __webpack_require__(344), - 'transform-react-constant-elements': __webpack_require__(345), - 'transform-react-display-name': __webpack_require__(214), - 'transform-react-inline-elements': __webpack_require__(346), - 'transform-react-jsx': __webpack_require__(215), - 'transform-react-jsx-compat': __webpack_require__(347), - 'transform-react-jsx-self': __webpack_require__(349), - 'transform-react-jsx-source': __webpack_require__(350), - 'transform-regenerator': __webpack_require__(86), - 'transform-runtime': __webpack_require__(353), - 'transform-strict-mode': __webpack_require__(216), - 'undeclared-variables-check': __webpack_require__(354) - }); - - // All the presets we should bundle - registerPresets({ - es2015: __webpack_require__(217), - es2016: __webpack_require__(218), - es2017: __webpack_require__(219), - latest: __webpack_require__(356), - react: __webpack_require__(357), - 'stage-0': __webpack_require__(358), - 'stage-1': __webpack_require__(220), - 'stage-2': __webpack_require__(221), - 'stage-3': __webpack_require__(222), - - // ES2015 preset with es2015-modules-commonjs removed - // Plugin list copied from babel-preset-es2015/index.js - 'es2015-no-commonjs': { - plugins: [__webpack_require__(83), __webpack_require__(76), __webpack_require__(75), __webpack_require__(68), __webpack_require__(69), __webpack_require__(71), __webpack_require__(78), __webpack_require__(80), __webpack_require__(72), __webpack_require__(74), __webpack_require__(82), __webpack_require__(85), __webpack_require__(66), __webpack_require__(81), __webpack_require__(79), __webpack_require__(73), __webpack_require__(70), __webpack_require__(84), [__webpack_require__(86), { async: false, asyncGenerators: false }]] - }, - - // ES2015 preset with plugins set to loose mode. - // Based off https://github.com/bkonkle/babel-preset-es2015-loose/blob/master/index.js - 'es2015-loose': { - plugins: [[__webpack_require__(83), { loose: true }], __webpack_require__(76), __webpack_require__(75), __webpack_require__(68), __webpack_require__(69), [__webpack_require__(71), { loose: true }], __webpack_require__(78), __webpack_require__(80), __webpack_require__(130), [__webpack_require__(72), { loose: true }], [__webpack_require__(74), { loose: true }], __webpack_require__(82), __webpack_require__(85), __webpack_require__(66), [__webpack_require__(81), { loose: true }], __webpack_require__(79), [__webpack_require__(73), { loose: true }], __webpack_require__(70), __webpack_require__(84), [__webpack_require__(77), { loose: true }], [__webpack_require__(86), { async: false, asyncGenerators: false }]] - } - }); - - var version = exports.version = ("6.26.0"); - - // Listen for load event if we're in a browser and then kick off finding and - // running of scripts with "text/babel" type. - if (typeof window !== 'undefined' && window && window.addEventListener) { - window.addEventListener('DOMContentLoaded', function () { - return transformScriptTags(); - }, false); - } - - /** - * Transform - - + + + {% block body_scripts_additional %} diff --git a/src/core/utils/shellfm/windows/Launcher.py b/src/core/utils/shellfm/windows/Launcher.py index 6c748e9..6e3dcac 100644 --- a/src/core/utils/shellfm/windows/Launcher.py +++ b/src/core/utils/shellfm/windows/Launcher.py @@ -33,14 +33,14 @@ class Launcher: else: command = [self.file_manager_app, file] - self.logging.debug(command) + self.logger.debug(command) DEVNULL = open(os.devnull, 'w') subprocess.Popen(command, start_new_session=True, stdout=DEVNULL, stderr=DEVNULL, close_fds=True) def remuxVideo(self, hash, file): remux_vid_pth = self.REMUX_FOLDER + "/" + hash + ".mp4" - self.logging.debug(remux_vid_pth) + self.logger.debug(remux_vid_pth) if not os.path.isfile(remux_vid_pth): self.check_remux_space() @@ -60,8 +60,8 @@ class Launcher: proc = subprocess.Popen(command) proc.wait() except Exception as e: - self.logging.debug(message) - self.logging.debug(e) + self.logger.debug(message) + self.logger.debug(e) return False return True @@ -72,7 +72,7 @@ class Launcher: proc = subprocess.Popen([self.FFMPG_THUMBNLR, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPath, "-o", hashImgPth]) proc.wait() except Exception as e: - self.logging.debug(repr(e)) + self.logger.debug(repr(e)) def check_remux_space(self): @@ -80,7 +80,7 @@ class Launcher: try: limit = int(limit) except Exception as e: - self.logging.debug(e) + self.logger.debug(e) return usage = self.getRemuxFolderUsage(self.REMUX_FOLDER) diff --git a/src/core/utils/shellfm/windows/Settings.py b/src/core/utils/shellfm/windows/Settings.py index f54a473..41a4663 100644 --- a/src/core/utils/shellfm/windows/Settings.py +++ b/src/core/utils/shellfm/windows/Settings.py @@ -10,6 +10,7 @@ from os import path class Settings: + logger = None ABS_THUMBS_PTH = None # Used for thumbnail generation and is set by passing in REMUX_FOLDER = None # Used for Remuxed files and is set by passing in FFMPG_THUMBNLR = None # Used for thumbnail generator binary and is set by passing in diff --git a/src/core/utils/shellfm/windows/View.py b/src/core/utils/shellfm/windows/View.py index 8bbb185..e6ecc29 100644 --- a/src/core/utils/shellfm/windows/View.py +++ b/src/core/utils/shellfm/windows/View.py @@ -73,10 +73,14 @@ class View(Settings, Launcher, Path): def get_path_part_from_hash(self, hash): files = self.get_files() - for file in files: - if hash == file[1]: - return file[0] - return None + file = None + + for f in files: + if hash == f[1]: + file = f[0] + break + + return file def get_files_formatted(self): files = self.hashSet(self.files), diff --git a/src/wsgi.py b/src/wsgi.py index 5681760..164776d 100644 --- a/src/wsgi.py +++ b/src/wsgi.py @@ -1,3 +1,13 @@ +import eventlet +eventlet.monkey_patch() +# +# import eventlet.debug +# from engineio.payload import Payload +# +# # Some fixers for Websockets +# eventlet.debug.hub_prevent_multiple_readers(False) +# Payload.max_decode_packets = 120 # Fix too many small packets causing error + from core import app if __name__ == '__main__':