예제 #1
0
    def create(self, data):
        try:
            with self.con:
                title = data.get('title')
                text = data.get('text')
                img_url = data.get('img_url')
                img_width = data.get('img_width')
                img_height = data.get('img_height')
                type = data.get('type')
                cur = self.con.cursor(Model=News)
                sql = "INSERT INTO news (title, text, img_url, img_width, img_height, date, type) VALUES (%s, %s, %s, %s, %s, %s, %s)"
                now = datetime.now()
                now = now.strftime('%Y-%m-%d %H:%M:%S')
                cur.execute(
                    sql,
                    (title, text, img_url, img_width, img_height, now, type))
                self.con.commit()
                sql = "SELECT * FROM news WHERE id = (SELECT MAX(id) FROM news)"
                cur.execute(sql)
                last = cur.fetchone()
                tokens = UserView().list_tokens()
                message = NotificationMessage(data)
                NotificationsView(message, tokens).send_push_message()
                if type == 'email':
                    list_mail = UserView().list_mail()
                    Mail().massive_mail_sender(list_mail, title, text)

                return last.to_json()

        except Exception as e:
            print(e)
            self.con.rollback()
            return Error('Problem happened in news creation', 400).get_error()
예제 #2
0
def get_users(user=None):
    try:
        if request.query.get('query'):
            return UserView().autocomplete(request.query.get('query'))
        return UserView().list()
    except Exception as e:
        print(e)
예제 #3
0
    def list_user_from_group(self, id_group, accept_only=False):
        try:
            with self.con:
                cur = self.con.cursor(Model = UserGroup)
                accept_sql = f"AND `status`= 'V'" if accept_only else ""
                sql = f"SELECT * from `usergroup` WHERE `id_group` = %s {accept_sql}"
                cur.execute(sql, id_group)
                users_group = cur.fetchall()
                ug_dict = {}
                login_list = []
                for user in users_group:
                    user = user.to_json()
                    ug_dict[user['login_user']] = user
                    login_list.append(user['login_user'])

                users = UserView().list(list=login_list)
                for user_key in users:
                    user = users[user_key]
                    user_group = ug_dict.get(user['login'])

                    user['status'] = user_group['status']
                    user['expiration_date'] = user_group['expiration_date']

                    if user_group['share_position']:
                        user['location'] = UserView(user['login']).get_location()

                    users[user_key] = user

                return users

        except Exception as e:
            print(e)
            return Error('Problem happened in query list', 400).get_error()
예제 #4
0
    def new_beer_call(self, id_group, data):
        try:
            title = data.get('title')
            text = data.get('message')
            new_beer_call = datetime.now()
            last_beer_call = datetime.strptime(self.get_global(id_group).get('beer_call'), '%m-%d-%Y %H:%M:%S')
            if last_beer_call:
                time_diff = new_beer_call - last_beer_call
                if time_diff.seconds < 3600:
                    return Error('Not allowed to send notification, delay not great', 403).get_error()
            new_beer_call = new_beer_call.strftime('%Y-%m-%d %H:%M:%S')
            with self.con:
                cur = self.con.cursor(Model = UserGroup)
                sql = "UPDATE `groups` SET `beer_call` = %s WHERE id = %s"
                cur.execute(sql, (new_beer_call, id_group))
                self.con.commit()
                list_users = self.list_user_from_group(id_group)
                login_list = []
                for nb, user in list_users.items():
                    login_list.append(user.get('login'))
                tokens = UserView().list_tokens_from_logins(login_list)
                message = NotificationMessage({'title': title,
                                               'text': text})
                NotificationsView(message, tokens).send_push_message()

                return self.get(id_group)

        except Exception as e:
            print(e)
            self.con.rollback()
            return Error('Problem happened in updating user beer call in group', 400).get_error()
예제 #5
0
    def get(self, token):
        """
        return the auth token if exist
        """
        with self.con:
            try:
                cur = self.con.cursor(Model=AuthToken)
                sql = "SELECT * FROM auth_token WHERE token=%s"
                cur.execute(sql, token)

                authentication = cur.fetchone()

                if authentication is None:
                    raise Error('Not logged', 403)

                authentication = authentication.to_json()
                user = UserView(authentication['login']).get()

                return user

            except Error as e:
                return e.get_error()

            except Exception as e:
                return e
예제 #6
0
def authentication():
    """authenticate user"""
    try:
        data = json.loads(request.body.read())
        login = data.get('login')
        password = data.get('password')
        token = data.get('token')

        if token:
            return UserView().authenticate_by_token(token)

        if not login or not password:
            return Error('Login or Password empty', 400).get_error()
        return UserView(login).authenticate(password)

    except Exception as e:
        return e
예제 #7
0
def update_user(user=None):
    try:
        data = json.loads(request.body.read())
        if data.get('token'):
            login = user.to_json().get('login')
            token = data.get('token')
            return UserView(login).push_token(token)
        else:
            pwd = data.get('password')
            new_pwd = data.get('new_password')
            if not pwd or not new_pwd:
                return Error('passwords empty empty', 400).get_error()
            user = user.to_json()
            return UserView(user['login']).change_password(pwd, new_pwd)

    except Exception as e:
        print(e)
        return e
예제 #8
0
    def add_to_group(self, id_group, login_list=None, owner=None, group=None):
        result = {}
        count = 0
        try:
            with self.con:

                if group is None:
                    group = self.get_global(id_group)

                if owner:
                    cur = self.con.cursor(Model=UserGroup)
                    sql = "INSERT INTO `usergroup` (`login_user`, `id_group`, `status`) VALUES (%s, %s, %s)"
                    cur.execute(sql, (owner, id_group, 'V'))
                    sql = "SELECT * FROM `usergroup` WHERE `id_group` = %s AND `login_user` = %s "
                    cur.execute(sql, (id_group, owner))
                    last = cur.fetchone()
                    result[count] = last.to_json()
                    count += 1
                if login_list:
                    for login in login_list:
                        try:
                            cur = self.con.cursor(Model=UserGroup)
                            sql = "INSERT INTO `usergroup` (`login_user`, `id_group`) VALUES (%s, %s)"
                            cur.execute(sql, (login, id_group))
                            sql = "SELECT * FROM `usergroup` WHERE `id_group` = %s AND `login_user` = %s"
                            cur.execute(sql, (id_group, login))
                            last = cur.fetchone()
                            result[count] = last.to_json()
                            count += 1

                        except Exception as e:
                            print(e)
                            code, message = e.args
                            if code == pymysql.constants.ER.DUP_ENTRY:
                                result[count] = {'error': message}
                                count += 1
                            else:
                                self.con.rollback()
                                raise e

                    tokens = UserView().list_tokens_from_logins(login_list)
                    message = NotificationMessage({
                        'title': 'Invitation de groupe - {}'.format(group.get('name')),
                        'text': '{} t\'a invité à rejoindre son nouveau groupe !'.format(group.get('owner'))
                        })
                    NotificationsView(message, tokens).send_push_message()

        except Exception as e:
            print(e)
            return Error('Problem happened when adding to group', 400).get_error()

        return result
예제 #9
0
    def update_user(self, token, login, password):
        try:
            user = UserView(login).bot_account_verification(password)
            if user is None:
                raise Error('error Login', 400)

            with self.con:
                cur = self.con.cursor(Model=BotUser)
                sql = "UPDATE bot_users SET token=NULL, login=%s WHERE token=%s"
                cur.execute(sql, (login, token))
                self.con.commit()

                if cur.rowcount == 0:
                    raise Error('Invalid token', 400)

                user = self.get_user_by_login(login).to_json()
                self.basic_answer(user.get('fb_id'), 'new')

                return UserView(login).get().to_json()

        except Exception as e:
            self.con.rollback()
            return e.get_error()
예제 #10
0
    def merge_user_location(self, id_group):
        try:
            list_users_in_group = self.list_user_from_group(id_group)
            for (n, user) in list_users_in_group.items():
                if user.get('share_position'):
                    location = UserView(user.get('login_user')).get_location()
                    user['location'] = location

            return list_users_in_group

        except Exception as e:
            print(e)
            return Error('Problem happened when merging location',
                         400).get_error()
예제 #11
0
def get_users(user=None):
    try:
        return UserView().list()
    except Exception as e:
        print(e)