Exemple #1
0
def change_password(data):
    """
    Функция получает json с id пользователя, старым паролем и новым.
    Проверяет элементы data, None или нет.
    Покдлючается к базе данных с помощью функции db_connect(), получает хеш пароля в базе по id.
    Если хеш от old_password==паролю в базе, то записывает в базу хеш new_password.
    Если все успешно, то функция вернет {names.ANSWER: 'Succes'}, если не верный пароль - {names.ANSWER: 'Wrong password'}
    """
    try:
        for i in data:
            if data[i] is None:
                logging.info('Incorrect parameter ' + i + ' - None')
                data[i] = "Empty"
                return {names.ANSWER: names.ERROR, names.DATA: data}
    except:
        logging.error('Fatal error: check data is None')
        return {names.ANSWER: names.ERROR, names.DATA: data}
    try:
        if gs.check_id(data[names.ID_USER]) == False:
            return {names.ANSWER: "Id not found", names.DATA: data}
    except:
        logging.error('Fatal error: check id')
        return {names.ANSWER: names.ERROR, names.DATA: data}
    else:
        try:
            sql = "SELECT password FROM auth where id_user = '******'".format(
                data[names.ID_USER])
            result = gs.SqlQuery(sql)
        except:
            logging.error(names.ERROR_EXECUTE_DATABASE)
            return {names.ANSWER: names.ERROR}
        else:
            try:
                password_hash = hashlib.md5()
                password_hash.update(data['Old_password'].encode())
                data['Old_password'] = password_hash.hexdigest()
                if data['Old_password'] == result[0]["password"]:
                    password_hash = hashlib.md5()
                    password_hash.update(data['New_password'].encode())
                    data['New_password'] = password_hash.hexdigest()
                    sql = "UPDATE auth SET password='******' WHERE id_user='******'".format(
                        data["New_password"], data[names.ID_USER])
                    gs.SqlQuery(sql)
                    return {names.ANSWER: names.SUCCESS}
                else:
                    return {names.ANSWER: "Wrong password"}
            except:
                logging.error('Fatal error: Password comparison')
                return {names.ANSWER: names.ERROR}
Exemple #2
0
def all_event(id_user, count):
    """
    Метод возвращает 10 событий, начиная с заданного номера
    :param id_user: int id пользователя
    :param count: int номер события, с которого начинать вывод
    :return: {names.ANSWER: names.SUCCESS, names.DATA: result}
    """
    try:
        sql = """with 
events as (
  select id_event
  , Name
  , Status
  , Date_start
  , Date_end
  , case when (Date_end - Date_start) < interval '0 hours' then null else timestamp '2001-01-01 00:00' + (Date_end - Date_start) - interval '2001 year' end::text as interval
  , case when (select 1 from participation where id_user =  {id_user} and id_event = ev.id_event) is not null then True else False end as participation
  , (select count(*) from participation where id_event = ev.id_event) as count
  from Event ev
  order by status desc, date_start, date_end
  limit 10
  offset {count}
)
table events""".format(count=count, id_user=id_user)
        #print(sql)
        if isinstance(count, int) and count >= 0:
            result = gs.SqlQuery(sql)
            print(result)
        else:
            logging.error(names.ERROR_EXECUTE_DATABASE)
            return {names.ANSWER: names.ERROR}
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #3
0
def user_cabinet(data):
    """
    Функция подключается к базе данных,находит пользователя по id, который был получен на вход.
    Проверяет, что id не пустой. Возвращает json с данными о пользователе.
    """
    try:
        if data[names.ID_USER] is None:
            logging.info('Incorrect parameter id - None')
            data[names.ID_USER] = "Empty"
            return {names.ANSWER: names.ERROR, names.DATA: data}
    except:
        logging.error('Fatal error: param id')
        return {names.ANSWER: names.ERROR, names.DATA: data}
    try:
        if gs.check_id(data[names.ID_USER]) == False:
            return {names.ANSWER: "Id not found", names.DATA: data}
    except:
        logging.error('Fatal error: check id')
        return {names.ANSWER: names.ERROR, names.DATA: data}
    try:

        sql = "SELECT Name, City, Sex, Email, Logo, Educational FROM users " \
              "where id_user = '******'".format(data[names.ID_USER])
        #print(sql)
        result = gs.SqlQuery(sql)

        return {names.ANSWER: names.SUCCESS, names.DATA: result}
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
Exemple #4
0
def auth_user(user_data):
    """
    Метод авторизирует пользователя, присваивая ему UUID сессии
    :param user_data: dict хранит информацию о пользователе
    :return: UUID сессии
    """
    password_hash = hashlib.md5()
    password_hash.update(user_data[names.PASSWORD].encode())
    user_data[names.PASSWORD] = password_hash.hexdigest()
    try:
        sql = "SELECT id_user FROM Auth WHERE Login = '******' and Password = '******'".format(
            user_data[names.LOGIN], user_data[names.PASSWORD])
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: "Ошибка запроса к базе данных"}
    try:
        if len(result) == 0:
            return {
                names.ANSWER: names.WARNING,
                names.DATA: "Данного пользователя нет в базе данных"
            }
    except:
        return {
            names.ANSWER: names.WARNING,
            names.DATA: "Логин или пароль не правильные"
        }
    answer = input_session_table(result[0].get(names.ID_USER))
    if answer.get(names.ANSWER) is not names.SUCCESS:
        return {
            names.ANSWER: names.WARNING,
            names.DATA: "Ошибка запроса к базе данных. Неудача"
        }
    return answer
Exemple #5
0
def get_task_event(data):
    sql = """SELECT ID_Task
 , Task_name
 , Task_category
 , Task_point
 , Task_description
 , Task_hint
 , Task_link
 , case
    when exists(
     select *
     from task_acc
     where id_event = {id_event}
       and id_user = {id_user}
       and id_task = t.id_task
    ) then True
   else False
   end as close
FROM task t
WHERE id_event = {id_event}
 and (select status from event where id_event = {id_event}) = 1
ORDER BY Task_category
 , Task_point
""".format(id_user=data['id_user'], id_event=data['id_event'])
    #print(sql)
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR_CONNECT_DATABASE}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #6
0
def input_auth_table(user_data):
    """
    Метод начинает цепочку регистрации в бд
    Заносится изменение в таблицу auth
    :param user_data: dict данные пользователя
    :return: UUID сессии
    """
    connect, current_connect = db_connect_new()
    if connect == -1:
        return {
            names.ANSWER: names.WARNING,
            names.DATA: "Ошибка доступа к базе данных, повторить позже"
        }
    password_hash = hashlib.md5()
    password_hash.update(user_data[names.PASSWORD].encode())
    user_data[names.PASSWORD] = password_hash.hexdigest()
    sql = "INSERT INTO Auth (login, password)" \
          " VALUES (\'{Login}\',\'{Password}\') RETURNING id_user".format(
        Login=user_data.get(names.LOGIN),
        Password=user_data.get(names.PASSWORD))
    try:
        id_user = gs.SqlQuery(sql)[0]['id_user']
    except:
        logging.error(
            'error: Ошибка запроса к базе данных. Возможно такой пользователь уже есть'
        )
        return {
            names.ANSWER:
            names.WARNING,
            names.DATA:
            "Ошибка запроса к базе данных. Возможно такой пользователь уже есть"
        }
    return input_access_table(id_user, user_data, connect, current_connect)
Exemple #7
0
def session():
    sql = """select * from Session"""
    result = Query(sql)
    for i in result:
        sql = '''INSERT INTO session
        VALUES ({session},'{id_user}','{uuid}')'''.format(session=i['Session'], id_user=i['User'], uuid=i['UUID'])
        print(sql)
        gs.SqlQuery(sql)
Exemple #8
0
def Event():
    sql = """select * from Event"""
    result = Query(sql)
    for i in result:
        sql = '''INSERT INTO event
        VALUES ({id_event},'{name}','{description}','1','1',now(),now(),now(),now())'''.format(id_event=i['Event'], name=i[names.NAME], description=i['Description'])
        print(sql)
        gs.SqlQuery(sql)
Exemple #9
0
def auth():
    sql = """select * from Access"""
    result = Query(sql)
    for i in result:
        sql = '''INSERT INTO access
        VALUES ({id_user},{access})'''.format(id_user=i['User'], access=i['Access'])
        print(sql)
        gs.SqlQuery(sql)
Exemple #10
0
def auth():
    sql = """select * from Auth"""
    result = Query(sql)
    for i in result:
        sql = '''INSERT INTO auth(id_user, login, password)
        VALUES ({id_user},\'{login}\',\'{password}\')'''.format(id_user=i['User'], login=i[names.LOGIN], password=i[names.PASSWORD])
        print(sql)
        gs.SqlQuery(sql)
Exemple #11
0
def get_news_order_by_data():
    sql = "SELECT * FROM News n ORDER BY n.Date"
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR_CONNECT_DATABASE}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #12
0
def task():
    sql = """select * from task"""
    result = Query(sql)
    for i in result:
        sql = '''INSERT INTO task
        VALUES ({ID_Task},'{Task_category}','{Task_name}','{Task_flag}',
        '{Task_description}','{Task_point}','{Task_hint}','{Task_solve}','{Task_link}',{Status}, {Public_status}, {id_Event})'''.format(**i)
        print(sql)
        gs.SqlQuery(sql)
Exemple #13
0
def task_acc():
    sql = """select * from task_acc"""
    result = Query(sql)
    for i in result:
        sql = '''INSERT INTO task_acc
        VALUES ({id},{id_task},{id_user},{id_event},
        {point},'{time}')'''.format(**i)
        print(sql)
        gs.SqlQuery(sql)
Exemple #14
0
def get_news_by_id_user(id_user):
    sql = "SELECT * FROM News n WHERE n.id_user = {id_user} ORDER BY n.Date"\
        .format(id_user=id_user)
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR_CONNECT_DATABASE}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #15
0
def get_task_event_category(event, task_category):
    sql = "SELECT id_task, task_name, task_category, event FROM task WHERE event={} AND task_category={}".format(
        event, task_category)

    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #16
0
def user():
    sql = """select * from Users"""
    result = Query(sql)
    for i in result:
        print(i)
        sql = '''INSERT INTO users
        VALUES ({User},'{Name}','{Surname}','{Email}',
        '{Sex}','{City}','{Educational}','{Logo}')'''.format(**i)
        print(sql)
        gs.SqlQuery(sql)
Exemple #17
0
def get_task_event_name(event, task_name):
    sql = "SELECT ID_Task, Task_name, Task_category, Task_description FROM task WHERE event={} AND ID_Task={}".format(
        event, task_name)

    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #18
0
def check_id(id_user):
    """
    Передаем функции искомый id.
    Возвращает True если id есть, False если id нет
    """
    try:
        sql = "select exists(select 1 from users where id_user = {})".format(
            id_user)
        return gs.SqlQuery(sql).get('exists', False)
    except:
        logging.error('Fatal error: check id')
        return {names.ANSWER: names.ERROR}
Exemple #19
0
def page_event(data):
    sql = "SELECT Name, Description, logo, Date_start, Date_end, Date_continue, Status FROM event WHERE id_event = {}".format(data["id_event"])
    try:
        if isinstance(data["id_event"], int):
            result = gs.SqlQuery(sql)
        else:
            logging.error(names.ERROR_EXECUTE_DATABASE)
            return {names.ANSWER: names.ERROR}
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #20
0
def get_comments_by_id_news(id_news):
    """
     Метод извлекает все комментарии по id_news
    :param id_news: ID новости для которой извлекаются комментарии
    :return: dict
    """
    sql = "SELECT * FROM Comments c WHERE c.id_news = {id_news} ORDER BY c.id_comment_parent"\
        .format(id_news=id_news)
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR_CONNECT_DATABASE}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #21
0
def info_event(id_event):
    """
    Метод возвращает название события
    :param id_event: int, id события
    :return:
    """
    sql = """Select name from event where id_event = {id_event}""".format(id_event=id_event)
    #print(sql)
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result[0]}
Exemple #22
0
def get_user_name(id_user):
    """
    Метод возвращает имя пользователя
    :param id_user: int, id пользователя
    :return:
    """
    sql = """Select name from users where id_user = {id_user}""".format(
        id_user=id_user)
    print(sql)
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result[0]}
Exemple #23
0
def update_status_open_events():
    """
    Метод запускает событие, если оно началось либо закончился перерыв
    :return:
    """
    sql = """update event
    set status = 1
    where (CURRENT_TIMESTAMP >= date_start and CURRENT_TIMESTAMP < date_stop)
    or (CURRENT_TIMESTAMP >= date_continue and CURRENT_TIMESTAMP < date_end)
    and status = 0
    """
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #24
0
def update_status_close_events():
    """
    Метод закрывает событие, если оно закончилось либо закрыто на перерыв
    :return:
    """
    sql = """update event
    set status = 0
    where CURRENT_TIMESTAMP >= date_end
    or (CURRENT_TIMESTAMP >= date_stop and CURRENT_TIMESTAMP < date_continue)
    and status = 1
    """
    try:
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}
Exemple #25
0
def update_event_table(user_data):
    """
    Метод обновляет запись в таблице "События"
    :param user_data: dict информация о событии
    :return: {names.ANSWER: ответ}
    """
    try:
        sql = """UPDATE event 
SET Name='{Name}', Description='{Description}', Logo='{Logo}', 
Status='{Status}', Date_start='{Date_start}', Date_end='{Date_end}', 
Date_stop='{Date_stop}', Date_continue='{Date_continue}' WHERE id_event='{id_event}'""".format(
            **user_data)
        gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS}
def check_event(data):
    """
        Метод проверяет существует ли событие
        :param data: dict: id_event
        :return: True or False
        """
    try:
        sql = "SELECT name FROM event WHERE id_event=\'{id_event}\'".format(
            **data)
        #print(sql)
        answer = gs.SqlQuery(sql)
        if answer != []:
            return True
        else:
            return False
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return False
def check_registration(data):
    """
    Метод проверки, зарегестрирован ли пользователь на данное событие
    :param data: dict: id_user, id_event
    :return: True or False
    """
    try:
        sql = "SELECT id_user FROM participation WHERE id_user=\'{id_user}\' and id_event=\'{id_event}\'".format(
            **data)
        #print(sql)
        answer = gs.SqlQuery(sql)
        if answer == []:
            return True
        else:
            return False
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return False
Exemple #28
0
def input_event_table(event_data):
    """
    Метод добавляет запись в таблицу "События"
    :param event_data: dict информация о событии
    :return: {names.ANSWER: ответ}
    """
    try:
        sql = """INSERT INTO event ("name", description, logo, status, date_start, date_end, date_stop, date_continue) 
VALUES (\'{Name}\', \'{Description}\', 
\'{Logo}\', \'{Status}\', \'{Date_start}\', \'{Date_end}\', 
\'{Date_stop}\', \'{Date_continue}\')""".format(**event_data)
        print(sql)
        gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}

    return {names.ANSWER: names.SUCCESS}
Exemple #29
0
def get_login(id_user):
    """
    Метод получает логин по ID пользователя
    :param id_user: ID пользователя
    :return: str Логин пользователя
    """
    try:
        sql = "SELECT Login FROM Auth WHERE User = '******'".format(id_user)
        result = gs.SqlQuery(sql)
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return None
    try:
        if len(result) == 0:
            return None
    except:
        return None
    return result[names.LOGIN]
Exemple #30
0
def current_event(count):
    """
    Метод возвращает 10 событий, начиная с заданного номера и если они еще не начались
    :param count: int номер события, с которого начинать вывод
    :return: {names.ANSWER: names.SUCCESS, names.DATA: result}
    """
    sql = "SELECT Name, Description, Status, Date_start, Date_end " \
          "FROM Event WHERE Date_start < {} LIMIT 10 OFFSET {}".format(time.time(), count)
    try:
        if isinstance(count, int) and count >= 0:
            result = gs.SqlQuery(sql)
        else:
            logging.error(names.ERROR_EXECUTE_DATABASE)
            return {names.ANSWER: names.ERROR}
    except:
        logging.error(names.ERROR_EXECUTE_DATABASE)
        return {names.ANSWER: names.ERROR}
    return {names.ANSWER: names.SUCCESS, names.DATA: result}