def save(self): DataFileManager.save( MODULE_NAME, 'user_%s' % self.id, { 'password': self.password, 'username': self.username, 'app_allowed': self.app_allowed, })
def save_config(self): """Save devices in config file.""" devices_conf = [] for device in self.devices.values(): config = device.get_config() if len(config): devices_conf.append(config) DataFileManager.save(self.name, 'devices', devices_conf)
def __run_cron(cron_type, current_time): cron_type = 'cron_%s' % cron_type DataFileManager.save('core::ModuleManager', cron_type, current_time) for module_name in __modules_data: if not __modules_data[module_name]['instance']: continue handler = getattr(__modules_data[module_name]['instance'], cron_type) # handler has implemented ? if len(handler.__code__.co_code) > 4: threading.Thread(None, handler, '%s: %s' % (cron_type, module_name)).start()
def started(self): """Register mapping url to web server""" template_folder = os.path.join(self.module_path, 'templates') app = Blueprint('Auth', __name__, url_prefix='/auth', template_folder=template_folder) # url mapping app.add_url_rule('/', 'index', view_func=self._index) app.add_url_rule('/login', 'login', view_func=self._login, methods=['GET', 'POST']) app.add_url_rule('/logout', 'logout', view_func=self._logout) app.add_url_rule('/users', 'users', view_func=self._users) app.add_url_rule('/user', 'new_user', view_func=self._user, methods=['GET', 'POST']) app.add_url_rule('/user/<user_name>', 'user', view_func=self._user, methods=['GET', 'POST']) # register to flask module = ModuleManager.get('web') if not module: self.add_critical('no module name "web"') raise FileNotFoundError module.add_blueprint(app) login_manager = LoginManager() login_manager.login_view = '%s.login' % app.name login_manager.init_app(module.flask) login_manager.user_loader(auth.load) # set url to login required exclude_login_required_url = [ 'static', login_manager.login_view ] + DataFileManager.load(self.name, 'exclude_login_required_url', []) def filter_app(get_apps_handler): def inner(): return [ app for app in get_apps_handler() if current_user.can_access(app['name']) ] return inner for endpoint, view_func in module.flask.view_functions.copy().items(): if endpoint not in exclude_login_required_url: module.flask.view_functions[endpoint] = login_required( view_func) module.get_apps = filter_app(module.get_apps)
def create_user(username, password): if not username or not password: return None user = load(username) if user: # user exist return None password = hash_password(username, password) user = User(username, password) user.save() # add in list users users = DataFileManager.load(MODULE_NAME, 'users', []) users.append(username) DataFileManager.save(MODULE_NAME, 'users', users) return user
def create_user(username, password): if not username or not password: return None user = load(username) if user: # user exist return None password = hash_password(username, password) user = User(username, password) user.save() # add in list users users = DataFileManager.load(MODULE_NAME, 'users', []) users.append(username) DataFileManager.save(MODULE_NAME, 'users' , users) return user
def started(self): """Register mapping url to web server""" template_folder = os.path.join(self.module_path, 'templates') app = Blueprint('Auth', __name__, url_prefix='/auth', template_folder=template_folder) # url mapping app.add_url_rule('/', 'index', view_func=self._index) app.add_url_rule('/login', 'login', view_func=self._login, methods=['GET', 'POST']) app.add_url_rule('/logout', 'logout', view_func=self._logout) app.add_url_rule('/users', 'users', view_func=self._users) app.add_url_rule('/user', 'new_user', view_func=self._user, methods=['GET', 'POST']) app.add_url_rule('/user/<user_name>', 'user', view_func=self._user, methods=['GET', 'POST']) # register to flask module = ModuleManager.get('web') if not module: self.add_critical('no module name "web"') raise FileNotFoundError module.add_blueprint(app) login_manager = LoginManager() login_manager.login_view = '%s.login' % app.name login_manager.init_app(module.flask) login_manager.user_loader(auth.load) # set url to login required exclude_login_required_url = [ 'static', login_manager.login_view ] + DataFileManager.load(self.name, 'exclude_login_required_url', []) def filter_app(get_apps_handler): def inner(): return [app for app in get_apps_handler() if current_user.can_access(app['name'])] return inner for endpoint, view_func in module.flask.view_functions.copy().items(): if endpoint not in exclude_login_required_url: module.flask.view_functions[endpoint] = login_required(view_func) module.get_apps = filter_app(module.get_apps)
def run_loop(): """Run loop (for update cron)""" from . import Daemon # loop import last_timestamp_cron = { i: DataFileManager.load('core::ModuleManager', 'cron_%s' % i, 0) for i in ['day', 'hour', 'min', 'month', 'week', 'year'] } while Daemon.is_running(): current_time = time.time() current_datetime = datetime.now() # cron min if 60 <= current_time - last_timestamp_cron['min']: last_timestamp_cron['min'] = current_time __run_cron('min', current_time) # cron hour if 60*60 <= current_time - last_timestamp_cron['hour']: last_timestamp_cron['hour'] = current_time __run_cron('hour', current_time) # cron day if current_datetime.today() > datetime.fromtimestamp(last_timestamp_cron['day']).today(): last_timestamp_cron['day'] = current_time __run_cron('day', current_time) # cron week last = datetime.fromtimestamp(last_timestamp_cron['week']) if current_datetime.today() != last.today() and current_datetime.weekday() == last.weekday(): last_timestamp_cron['week'] = current_time __run_cron('week', current_time) # cron month if current_datetime.month != datetime.fromtimestamp(last_timestamp_cron['month']).month: last_timestamp_cron['month'] = current_time __run_cron('month', current_time) # cron year if current_datetime.year > datetime.fromtimestamp(last_timestamp_cron['year']).year: last_timestamp_cron['year'] = current_time __run_cron('year', current_time) time.sleep(1)
def _users(self): users = DataFileManager.load(self.name, 'users', []) users.sort() return render_template('users.html', users=users)
def load(username): user_data = DataFileManager.load(MODULE_NAME, 'user_%s' % username, {}) return User(**user_data) if user_data else None
def run(self): config = DataFileManager.load(self.name, "config", {"host": "0.0.0.0", "debug": False}) config["threaded"] = True # for multiple pages simultaneously self.flask.run(**config)
def _saveToken(self): DataFileManager.save(self.module_name, "token", self._token)
def _loadToken(self): self._token = DataFileManager.load(self.module_name, "token")
def _deleteToken(self): DataFileManager.delete(self.module_name, "token") self._token = None
def load_config(self): """Load device from config file""" for device in DataFileManager.load(self.name, 'devices', []): self.add_device(*device['args'], **device['kwargs'])
def save(self): DataFileManager.save(MODULE_NAME, 'user_%s' % self.id, { 'password': self.password, 'username': self.username, 'app_allowed': self.app_allowed, })