コード例 #1
0
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)
コード例 #2
0
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'
コード例 #3
0
ファイル: auth.py プロジェクト: avidas/Plytos
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)
コード例 #4
0
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()
コード例 #5
0
ファイル: auth.py プロジェクト: jterskine/cosa
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
コード例 #6
0
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
コード例 #7
0
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())
コード例 #8
0
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'))
コード例 #9
0
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")
コード例 #10
0
ファイル: auth.py プロジェクト: jterskine/cosa
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")
コード例 #11
0
ファイル: auth.py プロジェクト: avidas/Plytos
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)
コード例 #12
0
ファイル: auth.py プロジェクト: avidas/Plytos
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)
コード例 #13
0
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);
コード例 #14
0
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'))
コード例 #15
0
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')
コード例 #16
0
ファイル: auth.py プロジェクト: ndyeager/hello
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)
コード例 #17
0
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);
コード例 #18
0
ファイル: auth.py プロジェクト: jterskine/cosa
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)
コード例 #19
0
ファイル: auth.py プロジェクト: avidas/Plytos
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)
コード例 #20
0
ファイル: users_best_handler.py プロジェクト: Werozel/SeenBot
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())
コード例 #21
0
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)
コード例 #22
0
ファイル: auth.py プロジェクト: avidas/Plytos
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)
コード例 #23
0
    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)
コード例 #24
0
ファイル: raw_links_handler.py プロジェクト: Werozel/SeenBot
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()
コード例 #25
0
ファイル: picture_handler.py プロジェクト: Werozel/SeenBot
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()
コード例 #26
0
ファイル: CSVTool.py プロジェクト: SManAT/IT-School-Admin
    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)
コード例 #27
0
    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;")
コード例 #28
0
    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