def register(): register_form = forms.SignupForm(request.form) current_app.logger.info(request.form) if request.method == 'POST' and not register_form.validate(): current_app.logger.info(register_form.errors) return '注册失败!' elif request.method == 'POST' and register_form.validate(): email = request.form['email'] password_hash = flask_bcrypt.generate_password_hash( request.form['password'], ) # Prepare User with register info from form user = User(email, password_hash) try: user.save() if login_user(user, remember='no'): flash('登录成功!') return redirect('/game') else: flash('登录失败!') except: flash('无法注册此电子邮箱地址!') current_app.logger.error( 'Error on Registration - possible duplicate emails.' ) # Prepare registration form template_data = {'form': register_form} return render_template('/auth/register.html', **template_data)
def reset(): print(request.json['email']) email = request.json['email'].lower() user = User() user.get_user_with_email(email) if user: subject = "Password Reset Requested" token = ts.dumps(email, salt='recover-password') recover_url = url_for( 'reset_password', token=token, _external=True) html = render_template( 'email/recover.html', recover_url=recover_url) emails=[] emails.append(email) msg = Message(subject, sender=ADMINS[0], recipients=emails) msg.html = html with app.app_context(): mail.send(msg) return 'success' return 'error'
def register(): form = RegisterForm(request.form) current_app.logger.info(request.form) if request.method == "POST" and form.validate() == False: current_app.logger.info(form.errors) return "Registration Error" elif request.method == "POST" and form.validate(): email = request.form['email'] username = request.form['username'] # generate password hash password_hash = flask_bcrypt.generate_password_hash(request.form['password']) user = User(email, password_hash, True, username) try: user.save() if login_user(user, remember="no"): flash("Logged in!") return redirect(request.args.get('next') or '/jobs') else: flash("Unable to log you in") except: flash("Unable to register with that email address") current_app.logger.error("Error on registration - possible duplicate emails") return render_template('forms/register.html', form = form)
def process_func(msg, karma: Karma, label: str): reply_msg = msg.get('reply_message') reply_msg_from_id = reply_msg.get('from_id') if reply_msg_from_id < 0: return user = User.get(reply_msg_from_id) if not user: user = User(reply_msg_from_id) if karma == Karma.POSITIVE: user.ups += 1 log(label, f"{user.first_name} {user.last_name} ups +1 = {user.ups}") elif karma == Karma.NEGATIVE: user.downs += 1 log(label, f"{user.first_name} {user.last_name} downs +1 = {user.downs}") elif karma == Karma.BADS: user.bads += 1 log(label, f"{user.first_name} {user.last_name} bads +1 = {user.bads}") session.add(user) for att in list( filter(lambda x: x.get('type') == 'photo', reply_msg.get('attachments'))): picture = Picture.get(att.get('photo').get('id')) if picture: if karma == Karma.POSITIVE: picture.ups += 1 elif karma == Karma.NEGATIVE: picture.downs += 1 elif karma == Karma.BADS: picture.bads += 1 session.add(picture) session.commit()
def load_user(id): if id is None: redirect('/login') user = User() user.get_by_id(id) if user.is_active(): return user else: return None
def load_user(id): if id is None: redirect('/login') user = User() user.get_by_id(id) if user.is_active: return user else: return None
def process_func(msg): text = msg.get('text') user_id = int(msg.get('from_id')) phrase_text = text.replace("Баян, добавь фразу", "").replace("Баян, новая фраза", "").strip().capitalize() if not User.get(user_id): session.add(User(user_id)) session.commit() session.add(Phrase(text=phrase_text, user_id=user_id)) session.commit() peer_id = msg.get('peer_id') api.messages.send(peer_id=peer_id, message="Добавил", random_id=get_rand())
def confirm_email(token): try: email = ts.loads(token, salt="email-confirm-key", max_age=86400) except: abort(404) user = User() if user.get_user_with_email(email): user.email_confirmed() login_user(user, remember=True) return redirect('/profile') return redirect(url_for('login'))
def login(): if request.method == "POST" and "email" in request.form: email = request.form["email"] userObj = User() user = userObj.get_by_email_w_password(email) if user and flask_bcrypt.check_password_hash( user.password, request.form["password"]) and user.is_active: remember = request.form.get("remember", "no") == "yes" if login_user(user, remember=remember): flash("Logged in!") return redirect('/notes/create') else: flash("unable to log you in") return render_template("/auth/login.html")
def login(): if request.method == "POST" and "email" in request.form: email = request.form["email"] userObj = User() user = userObj.get_by_email_w_password(email) if user and flask_bcrypt.check_password_hash(user.password,request.form["password"]) and user.is_active(): # remember = request.form.get("remember", "no") == "yes" if login_user(user, remember=True): flash("Logged in!") return redirect('/home') else: flash("unable to log you in") return render_template("/auth/login.html")
def profile(username): userObj = User() user = userObj.get_by_username(username) if user == None: flash('User ' + username + ' not found.') return redirect(url_for('index')) #FIXME: just mock data posts = [ { 'author': user, 'body': 'Test post #1' }, { 'author': user, 'body': 'Test post #2' } ] return render_template('profile/user.html', user = user, posts = posts)
def reset_password(): reset_request_id = request.args.get('id') reset_code = request.args.get('reset_code') reset_request = PasswordResetRequest.objects.get_or_404(id=reset_request_id) if not reset_request: flash("You do not have access to that page.", "danger") return redirect(url_for('index')) if not reset_request.validate_reset_code(reset_code): flash("You do not have access to that page", "danger") return redirect(url_for('index')) if not reset_request.validate_timestamp(): flash("Password reset has expired", "danger") return redirect(url_for('index')) if request.method == "POST": password = request.form.get('password').strip() confirm = request.form.get('confirm').strip() has_errors = False if len(password) < MIN_PASSWORD_LENGTH: flash("Password must be at least {0} " "characters".format(MIN_PASSWORD_LENGTH), "danger") has_errors = True if password != confirm: flash("Password and confirmation do not match", "danger") has_errors = True if not has_errors: userObj = User() password_hash = flask_bcrypt.generate_password_hash(password) try: userObj.reset_password(reset_request.user_id, password_hash) reset_request.delete() session.pop(reset_request.user_id, None) flash("You have successfully reset your password!", "success") return redirect(url_for('auth_login.login')) except: flash("Unable to reset password", "danger") current_app.logger.error("Error on registration - possible duplicate emails") form = ResetPassForm(request.form) return render_template('forms/reset_password.html', form = form)
def login(): form = loginForm() email_form = emailForm() if form.validate_on_submit(): email = request.form.get('email').lower() userLog = User() user = userLog.get_user_with_email(email) if user and userLog.check_password(form.color.data) and user.is_active: login_user(user, remember=True) print("logged in"); return redirect('/profile') return redirect(url_for('login')) return render_template('login.html', form=form, email_form=email_form, colors=colors);
def reset_password(token): try: email = ts.loads(token, salt='recover-password', max_age=86400) except: abort(404) form=passwordForm() if form.validate_on_submit(): user = User() if user.get_user_with_email(email): user.reset_password() login_user(user, remember=True) return redirect('/profile') return redirect(url_for('login'))
def login(): if request.method == 'POST' and 'email' in request.form: email = request.form['email'] user_obj = User() user = user_obj.get_by_email_w_password(email) if ( user and # user exists in db flask_bcrypt.check_password_hash( user.password, request.form['password'], ) and # user pw stored matched user.is_active # user is active now ): remember = request.form.get('remember', 'no') == 'yes' if login_user(user, remember=remember): flash('登录成功!') return redirect('/game') else: flash('登录失败!') return render_template('/auth/login.html')
def register(): registerForm = forms.SignupForm(request.form) current_app.logger.info(request.form) if request.method == 'POST' and registerForm.validate() == False: current_app.logger.info(registerForm.errors) return "uhoh registration error" elif request.method == 'POST' and registerForm.validate(): email = request.form['email'] first_name = request.form['first_name'] last_name = request.form['last_name'] # generate password hash password_hash = flask_bcrypt.generate_password_hash(request.form['password']) # prepare User user = User(email,password_hash,first_name,last_name) print user try: user.save() if login_user(user, remember="no"): flash("Logged in!") return redirect('/') else: flash("unable to log you in") except: flash("unable to register with that email address") current_app.logger.error("Error on registration - possible duplicate emails") # prepare registration form # registerForm = RegisterForm(csrf_enabled=True) templateData = { 'form' : registerForm } return render_template("/auth/register.html", **templateData)
def register(): form = registerForm(); if form.validate_on_submit(): name = request.form.get('name') email = request.form.get('email').lower() password = request.form.get('color') user = User(email, password, name) # send email to confirm email subject = "Confirm your email for //hackRamapo" token = ts.dumps(email, salt='email-confirm-key') confirm_url = url_for( 'confirm_email', token=token, _external=True) html = render_template('email/activate.html', confirm_url=confirm_url) emails = [] emails.append(email) msg = Message(subject, sender=ADMINS[0], recipients=emails) msg.html = html try: user.save() if login_user(user, remember=False): with app.app_context(): mail.send(msg) return redirect('/profile') else: flash("unable to log in") except: print("Registration Failed") return render_template('register.html', form=form, colors=colors);
def register(): registerForm = forms.SignupForm(request.form) current_app.logger.info(request.form) if request.method == 'POST' and registerForm.validate() == False: current_app.logger.info(registerForm.errors) return "uhoh registration error" elif request.method == 'POST' and registerForm.validate(): email = request.form['email'] if email.find("creighton.edu") == -1: #checks to see if creighton email return "Must be a creigthon email!" # generate password hash password_hash = flask_bcrypt.generate_password_hash(request.form['password']) # prepare User user = User(email,password_hash) print user try: user.save() # user.search_form = SearchForm() if login_user(user, remember="yes"): flash("Logged in!") return redirect('/home') else: flash("unable to log you in") except: flash("unable to register with that email address") current_app.logger.error("Error on registration - possible duplicate emails") # prepare registration form # registerForm = RegisterForm(csrf_enabled=True) templateData = { 'form' : registerForm } return render_template("/auth/register.html", **templateData)
def login(): if g.user is not None and g.user.is_authenticated(): return redirect(url_for('index')) if request.method == "POST" and "email" in request.form: email = request.form["email"] userObj = User() user = userObj.get_by_email_w_password(email) if user and user.is_active() and flask_bcrypt.check_password_hash(user.password, request.form["password"]): remember = request.form.get("remember", "no") == "yes" if login_user(user, remember=remember): flash("Logged In!") identity_changed.send(current_app._get_current_object(), identity = Identity(user.id)) return redirect(request.args.get('next') or '/jobs') else: flash("Unable to log you in") form = LoginForm(request.form) return render_template('forms/login.html', form=form)
def process_func(msg): peer_id = msg.get('peer_id') local_session = session_factory() user_id: int = msg.get('from_id') user: Optional[User] = User.get(user_id, local_session) best_pictures = Picture.get_best_for_user(user_id, local_session, limit=10) attachment_strings = list( map(lambda x: x.get_api_string(peer_id), best_pictures)) local_session.close() api.messages.send(peer_id=peer_id, message=f"{user.get_formatted_name()}: топ", attachment=','.join(attachment_strings), random_id=get_rand())
def register(): registerForm = forms.SignupForm(request.form) current_app.logger.info(request.form) if request.method == 'POST' and registerForm.validate() == False: current_app.logger.info(registerForm.errors) return "uhoh registration error" elif request.method == 'POST' and registerForm.validate(): email = request.form['email'] # generate password hash password_hash = flask_bcrypt.generate_password_hash( request.form['password']) # prepare User user = User(email, password_hash) print(user) try: user.save() if login_user(user, remember="no"): # flash("Logged in!") return redirect('/') else: pass # flash("unable to log you in") except: # flash("unable to register with that email address") current_app.logger.error( "Error on registration - possible duplicate emails") # prepare registration form # registerForm = RegisterForm(csrf_enabled=True) templateData = {'form': registerForm} return render_template("/auth/register.html", **templateData)
def forgot(): if request.method == "POST" and "email" in request.form: email = request.form["email"] userObj = User() user = userObj.get_by_email_w_password(email) if user: reset_link = generate_password_reset_link(str(user.id)) subject = "Plytos Password Reset" recipients = [email] body = ("Hello {name}! We received a password reset request " "from you. If you did not make this request, please " "ignore this email.\n" "\n" "You can reset your password using this link:\n" "{reset_link}\n" "\n" "Thank you,\n" "\n" "Plytos Team" ).format(name="placeholder", reset_link=reset_link) send_email(subject=subject, sender="*****@*****.**", recipients=recipients, text_body=body, html_body=None) flash("Request has been sent! Check your email for a link " "to reset your password.", "success") return redirect(url_for('index')) else: flash("Email not found", "danger") form = ForgotForm(request.form) return render_template('forms/forgot.html', form = form)
def read(self, filename): """ Read a CSV file """ self.userList.clear() if os.path.exists(filename) is True: df = pandas.read_csv(filename) for index, row in df.iterrows(): user = User() try: user.setVorname(str(row['Vorname']).strip()) user.setNachname(str(row['Nachname']).strip()) user.setKlasse(str(row['Klasse']).strip()) self.userList.append(user) except Exception as ex: self.logger.error( "Parsing csv File Error, is the seperator , ?") print(ex) else: self.logger.error("File ./%s not found! - exit -" % filename)
def process_func(msg): peer_id = msg.get('peer_id') atts = list( filter( lambda x: x.get('type') in ['audio', 'video'], msg.get('attachments') + get_attachments(msg.get('fwd_messages')))) for att in atts: type = att.get('type') obj = att.get(type) owner_id = att.get('owner_id') id = obj.get('id') existing_obj: RawLink = RawLink.get(id) if existing_obj and existing_obj.owner_id == owner_id: orig_user: User = User.get(existing_obj.user_id) orig_user.downs += 1 session.add(orig_user) seen_message = Phrase.get_random().split(':')[1].strip() + '\n' seen_message += f'Отправил {orig_user.first_name}' \ f' {orig_user.last_name} в' \ f' {format_time(existing_obj.add_time)}\n' api.messages.send(peer_id=peer_id, message=seen_message, random_id=get_rand()) session.add(orig_user) else: raw_link_id = obj.get('id') if RawLink.get(raw_link_id) is None: new_raw_link_obj = RawLink(id=raw_link_id, type=type, owner_id=obj.get('owner_id'), access_key=obj.get('access_key'), track_code=obj.get('track_code'), url=obj.get('url'), user_id=msg.get('from_id')) session.add(new_raw_link_obj) session.commit()
def process_pic(msg) -> None: # Getting all the attachments even in forwarded messages attachments = msg.get('attachments') + get_attachments( msg.get('fwd_messages')) # Leaving only the photos photos = list( map(lambda x: x.get('photo'), list(filter(lambda x: x.get('type') == 'photo', attachments)))) # New thread - new session outer_session = session_factory() sender_id = msg.get('from_id') # Getting the user from DB or creating a new one user: User = outer_session.query(User).filter(User.id == sender_id).first() if not User: user = User(sender_id) outer_session.add(user) outer_session.commit() user.all_pics += len(photos) # Message that will be sent to chat if picture has been already seen seen_message = Phrase.get_random().split(':')[1].strip() + '\n' seen: int = 0 start_time = time.time() # Count of seen pictures for pic in photos: sizes = pic.get('sizes') # All sizes for this picture pic_id = pic.get('id') # Checking if a max size of this picture has been already seen result = was_seen(sizes) if result.get('result'): # Already seen seen += 1 picture_size: PictureSize = result.get('simpic') local_session = session_factory() picture: Picture = Picture.get( picture_size.pic_id) if picture_size else None user.bads += picture.bads orig_user: User = User.get(picture.user_id, local_session) if picture else None if orig_user: seen_message += f'Отправил {orig_user.first_name}' \ f' {orig_user.last_name} в' \ f' {format_time(picture_size.add_time)}\n' local_session.close() else: # New picture # Adding it to the DB picture = Picture(pic_id, sender_id, pic.get('owner_id'), pic.get('access_key')) outer_session.add(picture) outer_session.commit() for size in sizes: outer_session.add( PictureSize(pic_id, size.get('type'), size.get('url'))) outer_session.add(PicMessage(sender_id, pic_id, msg.get('text'))) outer_session.commit() end_time = time.time() log(label, f"Checked in {end_time - start_time}") # Adding negative carma for each seen picture # Sending a message if any picture was not new if seen > 0: log(label, f"{user.first_name} {user.last_name} downs +1 = {user.downs}") user.downs += 1 peer_id = msg.get('peer_id') api.messages.send(peer_id=peer_id, message=seen_message, random_id=get_rand()) outer_session.add(user) outer_session.commit() outer_session.close()
def read(self, filename): """ Read a CSV file """ self.userList.clear() if os.path.exists(filename) is True: df = pandas.read_csv(filename) # print first 5 rows # print(df.head()) if self.debug: print("Columns:") print(df.columns.tolist()) print("\n") for index, row in df.iterrows(): user = User() try: user.setVorname(str(row['Vorname'])) user.setNachname(str(row['Nachname'])) user.setUsername(str(row['Username'])) user.setEmail(str(row['Email'])) user.setGruppe(str(row['Gruppe'])) self.userList.append(user) except Exception as ex: self.logger.error( "Parsing csv File Error, is the seperator , ?") print(ex) else: self.logger.error("File ./%s not found! - exit -" % filename)
def doit(self, tarball): """ really restore data """ # create full path fullpath = re.sub('\.tar\.bzip2', '', tarball) # noqa topath = Path(fullpath).absolute() # untar Backup print("\nExtracting tarball ... in progress ...") if os.path.isdir(fullpath) is False: #tar -xf $HOME/etc.backup.tar -C /tmp/data #-C extract to Dir os.system("mkdir -p %s" % fullpath) cmd = "tar xfj %s -C %s" % (tarball, topath) os.system(cmd) print("done ...") else: print("Tarball is already extracted ... skipping ...") files = self.search_files(fullpath, "*.sql") if self.debug is False: for f in files: print("Importing %s ..." % os.path.basename(f)) filename, file_extension = os.path.splitext( os.path.basename(f)) # noqa dbname = filename # first drop DB self.doMySQL("DROP DATABASE IF EXISTS %s;" % dbname) # create DB new self.doMySQL("CREATE DATABASE %s;" % dbname) sleep(0.5) # now import new one cmd = "mysql --defaults-extra-file=%s %s < %s" % ( self.extrafile, dbname, f) os.system(cmd) # change to InnoDB #self.doMySQL("ALTER TABLE mysql.db ENGINE=InnoDB;") #self.doMySQL("ALTER TABLE mysql.columns_priv ENGINE=InnoDB;") # restoring User Privileges # read yaml File path = os.path.join(fullpath, 'users.yaml') with open(path, 'rt') as f: users = yaml.safe_load(f.read()) self.Users = [] for block in users.values(): u = User() for k, v in block.items(): if k in "username": u.set_username(v) if k in "hosts": u.set_hosts(v) if k in "pwd": u.set_pwd(v) if k in "privs": u.set_privileges(v) self.Users.append(u) for u in self.Users: print("Creating User: %s" % u.get_username()) # delete user if exists self.doMySQL("DROP USER IF EXISTS \"%s\"@\"%s\";" % (u.get_username(), u.get_hosts())) self.doMySQL("CREATE USER \"%s\"@\"%s\" IDENTIFIED BY \"%s\";" % (u.get_username(), u.get_hosts(), u.get_pwd())) self.doMySQL( "ALTER USER \"%s\"@\"%s\" IDENTIFIED WITH mysql_native_password BY \"%s\";" % (u.get_username(), u.get_hosts(), u.get_pwd())) for p in u.get_privileges(): # replace ' with " p = re.sub('\'', '"', p) # noqa self.doMySQL(p) self.doMySQL("FLUSH PRIVILEGES;")
def backupUsers(self): """ backup Users and Privileges to a yaml file """ self.Users = [] runner = CmdRunner() cmd = "mysql --defaults-extra-file=%s -e 'SELECT host,user,authentication_string FROM mysql.user;'" % self.extrafile runner.runCmd(cmd) errors = runner.getStderr() if errors: print(errors) userdata = runner.getLines() # remove first line userdata.pop(0) for line in userdata: if line: parts = line.split() username = parts[1] if username not in [ "root", "debian-sys-maint", "mysql.sys", "mysql.session" ]: u = User() u.set_hosts(parts[0]) u.set_username(parts[1]) u.set_pwd(parts[2]) self.Users.append(u) # now get Privileges for u in self.Users: # all hosts cmd = "mysql --defaults-extra-file=%s -e \"SHOW GRANTS FOR '%s'@'%s';\"" % ( self.extrafile, u.get_username(), "%") runner.runCmd(cmd) errors = runner.getStderr() userdata = runner.getLines() # remove first element, only info userdata.pop(0) for line in userdata: if "error" not in line.lower(): if len(line) > 0: u.add_privilege(line) # localhost cmd = "mysql --defaults-extra-file=%s -e \"SHOW GRANTS FOR '%s'@'localhost';\"" % ( self.extrafile, u.get_username()) runner.runCmd(cmd) errors = runner.getStderr() userdata = runner.getLines() # remove first element, only info userdata.pop(0) for line in userdata: if "error" not in line.lower(): if len(line) > 0: u.add_privilege(line) # create yAMl File dict_file = {} for u in self.Users: data = {} data['privs'] = u.get_privileges() data['username'] = u.get_username() data['hosts'] = u.get_hosts() data['pwd'] = u.get_pwd() dict_file[u.get_username()] = data path = os.path.join(self.backup_path, self.thisbackup_path, 'users.yaml') with open(path, 'w') as file: documents = yaml.dump(dict_file, file) # noqa