Exemple #1
0
 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)
Exemple #5
0
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)
Exemple #10
0
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 _users(self):
     users = DataFileManager.load(self.name, 'users', [])
     users.sort()
     return render_template('users.html', users=users)
 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,
     })
def load(username):
    user_data = DataFileManager.load(MODULE_NAME, 'user_%s' % username, {})
    return User(**user_data) if user_data else None