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()
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)
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()
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()
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
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
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
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
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()
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()
def get_users(user=None): try: return UserView().list() except Exception as e: print(e)