Module lib.server.user

Class used to manage a username and a password

Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
# pylint:disable=consider-using-f-string
""" Class used to manage a username and a password """
import tools.logger
import tools.jsonconfig
import tools.encryption
import tools.strings
import tools.info

EMPTY_PASSWORD = b"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" # empty password

class UserConfig(tools.jsonconfig.JsonConfig):
        """ User configuration """
        def __init__(self):
                """ Constructor """
                tools.jsonconfig.JsonConfig.__init__(self)
                self.user = b""
                self.password = EMPTY_PASSWORD
                if self.load() is False:
                        self.save()

class User:
        """ Singleton class to manage the user. Only one user can be defined """
        instance = None
        login_state = [None]

        @staticmethod
        def init():
                """ Constructor """
                if User.instance is None:
                        User.instance = UserConfig()

        @staticmethod
        def get_login_state():
                """ Indicates if login success or failed detected """
                result = User.login_state[0]
                User.login_state[0] = None
                return result

        @staticmethod
        def check(user, password, log=True, display=True, activity=True):
                """ Check the user and password """
                User.init()
                if user is not None:
                        user = user.lower()
                else:
                        user = b""

                if password is None:
                        password = b""

                if User.instance.user == b"":
                        if activity:
                                tools.info.set_last_activity()
                        return True
                elif user == User.instance.user:
                        if tools.encryption.gethash(password) == User.instance.password:
                                if activity:
                                        tools.info.set_last_activity()
                                if log is True:
                                        User.login_state[0] = True
                                return True
                        else:
                                if log is True:
                                        User.login_state[0] = False
                                        tools.logger.syslog("Login failed, wrong password for user '%s'"%tools.strings.tostrings(user), display=display)
                else:
                        if user != b"":
                                if log is True:
                                        User.login_state[0] = False
                                        tools.logger.syslog("Login failed, unkwnon user '%s'"%tools.strings.tostrings(user), display=display)
                return False

        @staticmethod
        def is_empty():
                """ If no user defined """
                User.init()
                if User.instance.user == b"":
                        return True
                else:
                        return False

        @staticmethod
        def get_user():
                """ Get the user """
                User.init()
                return User.instance.user

        @staticmethod
        def change(user, current_password, new_password, renew_password):
                """ Change the user and password, check if the password is correct before to do this """
                User.init()
                user = user.lower()

                if User.check(user, current_password):
                        if new_password == renew_password:
                                if new_password == b"":
                                        User.instance.user     = b""
                                        User.instance.password = EMPTY_PASSWORD
                                else:
                                        User.instance.user     = user
                                        User.instance.password = tools.encryption.gethash(new_password)
                                User.instance.save()
                                return True
                        else:
                                return None
                return False

Classes

class User

Singleton class to manage the user. Only one user can be defined

Expand source code
class User:
        """ Singleton class to manage the user. Only one user can be defined """
        instance = None
        login_state = [None]

        @staticmethod
        def init():
                """ Constructor """
                if User.instance is None:
                        User.instance = UserConfig()

        @staticmethod
        def get_login_state():
                """ Indicates if login success or failed detected """
                result = User.login_state[0]
                User.login_state[0] = None
                return result

        @staticmethod
        def check(user, password, log=True, display=True, activity=True):
                """ Check the user and password """
                User.init()
                if user is not None:
                        user = user.lower()
                else:
                        user = b""

                if password is None:
                        password = b""

                if User.instance.user == b"":
                        if activity:
                                tools.info.set_last_activity()
                        return True
                elif user == User.instance.user:
                        if tools.encryption.gethash(password) == User.instance.password:
                                if activity:
                                        tools.info.set_last_activity()
                                if log is True:
                                        User.login_state[0] = True
                                return True
                        else:
                                if log is True:
                                        User.login_state[0] = False
                                        tools.logger.syslog("Login failed, wrong password for user '%s'"%tools.strings.tostrings(user), display=display)
                else:
                        if user != b"":
                                if log is True:
                                        User.login_state[0] = False
                                        tools.logger.syslog("Login failed, unkwnon user '%s'"%tools.strings.tostrings(user), display=display)
                return False

        @staticmethod
        def is_empty():
                """ If no user defined """
                User.init()
                if User.instance.user == b"":
                        return True
                else:
                        return False

        @staticmethod
        def get_user():
                """ Get the user """
                User.init()
                return User.instance.user

        @staticmethod
        def change(user, current_password, new_password, renew_password):
                """ Change the user and password, check if the password is correct before to do this """
                User.init()
                user = user.lower()

                if User.check(user, current_password):
                        if new_password == renew_password:
                                if new_password == b"":
                                        User.instance.user     = b""
                                        User.instance.password = EMPTY_PASSWORD
                                else:
                                        User.instance.user     = user
                                        User.instance.password = tools.encryption.gethash(new_password)
                                User.instance.save()
                                return True
                        else:
                                return None
                return False

Class variables

var instance
var login_state

Static methods

def change(user, current_password, new_password, renew_password)

Change the user and password, check if the password is correct before to do this

Expand source code
@staticmethod
def change(user, current_password, new_password, renew_password):
        """ Change the user and password, check if the password is correct before to do this """
        User.init()
        user = user.lower()

        if User.check(user, current_password):
                if new_password == renew_password:
                        if new_password == b"":
                                User.instance.user     = b""
                                User.instance.password = EMPTY_PASSWORD
                        else:
                                User.instance.user     = user
                                User.instance.password = tools.encryption.gethash(new_password)
                        User.instance.save()
                        return True
                else:
                        return None
        return False
def check(user, password, log=True, display=True, activity=True)

Check the user and password

Expand source code
@staticmethod
def check(user, password, log=True, display=True, activity=True):
        """ Check the user and password """
        User.init()
        if user is not None:
                user = user.lower()
        else:
                user = b""

        if password is None:
                password = b""

        if User.instance.user == b"":
                if activity:
                        tools.info.set_last_activity()
                return True
        elif user == User.instance.user:
                if tools.encryption.gethash(password) == User.instance.password:
                        if activity:
                                tools.info.set_last_activity()
                        if log is True:
                                User.login_state[0] = True
                        return True
                else:
                        if log is True:
                                User.login_state[0] = False
                                tools.logger.syslog("Login failed, wrong password for user '%s'"%tools.strings.tostrings(user), display=display)
        else:
                if user != b"":
                        if log is True:
                                User.login_state[0] = False
                                tools.logger.syslog("Login failed, unkwnon user '%s'"%tools.strings.tostrings(user), display=display)
        return False
def get_login_state()

Indicates if login success or failed detected

Expand source code
@staticmethod
def get_login_state():
        """ Indicates if login success or failed detected """
        result = User.login_state[0]
        User.login_state[0] = None
        return result
def get_user()

Get the user

Expand source code
@staticmethod
def get_user():
        """ Get the user """
        User.init()
        return User.instance.user
def init()

Constructor

Expand source code
@staticmethod
def init():
        """ Constructor """
        if User.instance is None:
                User.instance = UserConfig()
def is_empty()

If no user defined

Expand source code
@staticmethod
def is_empty():
        """ If no user defined """
        User.init()
        if User.instance.user == b"":
                return True
        else:
                return False
class UserConfig

User configuration

Constructor

Expand source code
class UserConfig(tools.jsonconfig.JsonConfig):
        """ User configuration """
        def __init__(self):
                """ Constructor """
                tools.jsonconfig.JsonConfig.__init__(self)
                self.user = b""
                self.password = EMPTY_PASSWORD
                if self.load() is False:
                        self.save()

Ancestors

  • tools.jsonconfig.JsonConfig