mirror of
https://github.com/fcwu/docker-ubuntu-vnc-desktop
synced 2025-12-06 08:22:31 +01:00
119 lines
2.9 KiB
Python
119 lines
2.9 KiB
Python
__all__ = ['auth']
|
|
__version__ = '0.1'
|
|
|
|
|
|
from flask_login import (LoginManager,
|
|
login_required,
|
|
login_user,
|
|
current_user,
|
|
login_fresh,
|
|
logout_user,
|
|
AnonymousUserMixin,
|
|
)
|
|
from functools import wraps
|
|
from db.sql import User as DbUser
|
|
import sha
|
|
|
|
|
|
def noauth(func):
|
|
@wraps(func)
|
|
def with_logging(*args, **kwargs):
|
|
return func(*args, **kwargs)
|
|
return with_logging
|
|
|
|
|
|
class Auth(object):
|
|
def init_app(self, app, method):
|
|
self._login_manager = LoginManager()
|
|
self._login_manager.session_protection = "basic"
|
|
self._login_manager.init_app(app)
|
|
self._login_manager.user_loader(self._load_user)
|
|
self._login_manager.anonymous_user = Anonymous
|
|
self.login_required = login_required
|
|
self.login_fresh = login_fresh
|
|
self.current_user = current_user
|
|
|
|
def login(self, **kargs):
|
|
if 'username' in kargs and 'password' in kargs:
|
|
u = User.get(kargs['username'], kargs['password'])
|
|
if u is None:
|
|
return None
|
|
login_user(u, remember=kargs['remember'])
|
|
return u
|
|
return None
|
|
|
|
def unauthorized_handler(self, func):
|
|
self._login_manager.unauthorized_handler(func)
|
|
|
|
@staticmethod
|
|
def _load_user(userid):
|
|
u = User.get(userid, None)
|
|
return u
|
|
|
|
def logout(self, username):
|
|
User.delete(username)
|
|
return logout_user()
|
|
|
|
|
|
class User(object):
|
|
_users = {}
|
|
|
|
def __init__(self, userid):
|
|
self._userid = userid
|
|
self._is_admin = False
|
|
|
|
@classmethod
|
|
def get(cls, u, password):
|
|
if password is None:
|
|
if u in cls._users:
|
|
return cls._users[u]
|
|
return None
|
|
if not cls.authenticate(u, password):
|
|
return None
|
|
user = User(u)
|
|
if u == 'admin':
|
|
user._is_admin = True
|
|
cls._users[u] = user
|
|
return user
|
|
|
|
@classmethod
|
|
def authenticate(cls, u, password):
|
|
users = DbUser.select().where(DbUser.user == u)
|
|
if users.count() <= 0:
|
|
return False
|
|
if users[0].password == sha.new(password).hexdigest():
|
|
return True
|
|
return False
|
|
|
|
@classmethod
|
|
def delete(cls, u):
|
|
if u in cls._users:
|
|
del cls._users[u]
|
|
|
|
def is_authenticated(self):
|
|
return True
|
|
|
|
def is_active(self):
|
|
return True
|
|
|
|
def is_anonymous(self):
|
|
return False
|
|
|
|
def is_admin(self):
|
|
return self._is_admin
|
|
|
|
def get_id(self):
|
|
return self._userid
|
|
|
|
def username(self):
|
|
return self._userid
|
|
|
|
|
|
class Anonymous(AnonymousUserMixin):
|
|
def __init__(self):
|
|
self._userid = 'Anonymous'
|
|
|
|
def username(self):
|
|
return self._userid
|
|
|
|
auth = Auth()
|