def load_user(id): a = teach.find_one({"_id": id}) if a is not None: return User(id=a.get("_id"), password=a.get("pword"), type="T") else: a = stu.find_one({"_id": id}) return User(id=a.get("_id"), password=a.get("pword"), type="S")
def logview(): if current_user.is_authenticated: if current_user.type == 'S': return redirect(url_for('stuhome')) else: return redirect(url_for('profhome')) l1 = LoginForm() if l1.validate_on_submit(): user = teach.find_one({"_id": l1.id.data}) if user is not None and l1.password.data == user.get("pword"): t = User(id=user.get("_id"), password=user.get("pword"), type="T") login_user(t, duration=datetime.timedelta(hours=1)) return redirect(url_for('profhome')) elif user is not None: flash('Invalid username/password combination.') else: user = stu.find_one({"_id": l1.id.data}) if user is not None and l1.password.data == user.get("pword"): t = User(id=user.get("_id"), password=user.get("pword"), type="S") login_user(t, duration=datetime.timedelta(hours=1)) return redirect(url_for('stuhome')) else: flash('Invalid username/password combination.') return render_template('login.html', form=l1, title='Log in.', template='login-page', body="Log in with your User account.")
def setUp(self): print('SetUp') self.u = User(email='*****@*****.**', leadership=True) self.u.set_password('*****@*****.**') self.l = User(email='*****@*****.**', leadership=True) self.l.set_password('*****@*****.**') self.r = User(email='*****@*****.**') self.r.set_password('*****@*****.**') db.session.add(self.u) db.session.add(self.l) db.session.add(self.r) db.session.commit()
def setUp(self): """Set up test""" self.user = User() self.current_users = USERS self.user_email = "*****@*****.**" self.username = "******" self.password = "******"
def setUp(self): self.create_app() self.app = app.test_client() db.create_all() pw = generate_password_hash("admin123456", method='sha256') db.session.add(User(username="******", password=pw)) db.session.commit()
def init_data(self): #default test user demo = User(first_name=u'demo', last_name=u'demo', user_name=u'demo', password=u'123456', role_code=ADMIN, status_code=ACTIVE, user_settings=UserSettings(sex_code=MALE, phone='555-555-5555', bio=u'just a demo guy')) email = Email(address="*****@*****.**", is_primary=True, status_code=VERIFIED) demo.add_email(email) db.session.add(demo) db.session.add(email) db.session.commit() """Add in post categories""" for c in CATEGORIES: hashtag = Hashtag(name=c) db.session.add(hashtag) db.session.commit() self.demo_user = demo '''Add in circles''' ucla = Circle(name=u'ucla', description=u'ucla.edu emails only') ucla.add_member(demo) db.session.add(ucla) db.session.commit()
def login(): if current_user.is_authenticated: return redirect(url_for('index')) form = UserLoginForm() search_form = SearchForm() if form.validate_on_submit(): user = mongo.db.users.find_one({'username': form.username.data}) if user and User.check_password(user['password'], form.password.data): user_obj = User(user['username'], user['email'], user['_id'], user['is_admin']) login_user(user_obj) # accesses the 'next page' query string to determine which url user wanted to visit # before being redirected to the login page. If no next page was given then redirects user # to the index page. 'url_parse.netloc' prevents malicious redirect attacks. This prevents #redirects by ensuring that the url is relative to the page. next_page = request.args.get('next') if not next_page or url_parse(next_page).netloc != '': next_page = url_for('index') return redirect(next_page) else: flash('Wrong username or password', 'warning') return render_template('loginform.html', form=form, search_form=search_form, title='Login')
def update_faculty_table(dept): # Do not display table for aggregate views if dept in ['AS', 'HUM', 'NS', 'SS']: return [], {'display': 'none'} # Do not display table without chair-level access # to the selected department current_user = User() if dept not in current_user.deptprofile_access('dept_chair'): return [], {'display': 'none'} else: resp = table.query(KeyConditionExpression= 'PK = :pk AND SK BETWEEN :lower AND :upper', ExpressionAttributeValues={ ':pk': f'DEPT#{dept}', ':lower': f'DATA#FACULTY_LIST#{MAX_FISCAL_YEAR}', ':upper': f'DATA#FACULTY_LIST#{MAX_FISCAL_YEAR}$', }, ScanIndexForward=True) return resp['Items'], {'display': 'inline'}
def setUp(self): """set up for each test""" APP.config['TESTING'] = True APP.config['WTF_CSRF_ENABLED'] = False self.test_app = APP.test_client() self.user_email = "*****@*****.**" self.username = "******" self.user_password = "******" self.user = User()
def __init__(self, *args, **kwargs): super(TestUserModel, self).__init__(*args, **kwargs) self.correct_password = u'123456' self.good_guy = User(first_name=u'good', last_name=u'guy', user_name=u'test', password=self.correct_password, role_code=USER, status_code=ACTIVE, user_settings=UserSettings(sex_code=MALE)) self.good_girl = User(first_name=u'good', last_name='girl', user_name=u'crazy_girl', password=self.correct_password, role_code=USER, status_code=INACTIVE, user_settings=UserSettings(sex_code=FEMALE)) self.good_girl_email = Email(address="*****@*****.**", is_primary=False, status_code=VERIFIED)
def GetUserFromToken(tok: str) -> User: usr = User() try: tokenObj = jwt.decode(tok, os.environ['SECRET'], algorithms=['HS256']) except: print("problem decoding token") return usr usr.id = tokenObj["id"] usr.username = tokenObj["username"] usr.email = tokenObj["email"] return usr
def notify(notif: Notification): tel = Telemetry.get({"user": notif.reciever}) if notif.author in tel.blocked: return print("Sending notification") from .socket import Notifier Notifier.push_notification(notif) Notifier.push_alert_count( notif.reciever, len(UserNotifications.get_unread(User(_id=notif.reciever)))) notif.save()
def serve_sal_layout(): current_user = User() depts = current_user.salary_access() if depts: logger.log_access(has_access=True) # Create a list of dropdown options based on user permissions # Do this here to call salary_access only once dept_dropdown_options = [] for option in ALL_DEPT_DROPDOWN_OPTIONS: if option['value'].strip('_') in depts: dept_dropdown_options.append(option) layout = html.Div([ serve_navbar(), html.Div( [ header, html.Div(id='test-div'), serve_filters(dept_dropdown_options), chart, table, ], className='container pb-5', ), ]) else: # Log that a user accesssed this view and was NOT authorized logger.log_access(has_access=False) no_access_alert = dbc.Alert([ html.H5('You don\'t have access to this page.', className='alert-heading'), html.P( 'Please reach out to Timur Gulyamov (tg2648) to get access.', className='mb-0', ), ], color='warning', className='mt-3') layout = html.Div([ serve_navbar(), html.Div([no_access_alert], className='container'), ]) return layout
def register(): if current_user.is_authenticated: return redirect(url_for('index')) form = RegistrationForm() if form.validate_on_submit(): user = User(email=form.email.data) user.set_password(form.password.data) db.session.add(user) db.session.commit() flash('Welcome to Pedagogy. You\'re now registered. Please log in.') return redirect(url_for('login')) return render_template('register.html', form=form)
def register(): if current_user.is_authenticated: return redirect(url_for('index')) form = RegistrationForm() if form.validate_on_submit(): user = User(login=form.login.data) user.set_password(form.password.data) register_user(user.login, user.password_hash) flash('Congratulations, you are now a registered user!') return redirect(url_for('login')) return render_template('register.html', title='Register', form=form)
def serve_req_dropdown(): current_user = User() current_user_reqs = current_user.searchcom_access() req_dropdown_options = build_req_dropdown_options(current_user_reqs) req_dropdown = html.Div(dbc.FormGroup([ dbc.Label("Select search:", html_for="req-num-dropdown"), dcc.Dropdown(id='req-num-dropdown', options=req_dropdown_options, value=req_dropdown_options[0]['value'], multi=False, clearable=False), ]), className='mt-3') return req_dropdown
def initdb(): """Init/reset database.""" db.drop_all(bind=None) db.create_all(bind=None) admin = User(first_name=u'admin', last_name=u'admin', user_name=u'admin', password=u'gFcPU5XB', role_code=ADMIN, status_code=ACTIVE, user_settings=UserSettings(sex_code=MALE, age=10, phone='555-555-5555', bio=u'')) email = Email(address="*****@*****.**", is_primary=True, status_code=VERIFIED) admin.add_email(email) db.session.add(admin) db.session.add(email) db.session.commit() hashtag = None """Add in all post hashtag""" for (key, id) in CATEGORIES.iteritems(): hashtag = Hashtag(id=id, name=key) db.session.add(hashtag) db.session.commit() #Add in ucla circle ucla = Circle(name=u'ucla', description=u'ucla.edu emails only') ucla.add_member(admin) db.session.add(ucla) db.session.commit() ucla_info = CollegeInfo(circle_id=ucla.id, domain=u'ucla.edu', fb_group_id=267279833349705, fb_sell_id=267375200006835) db.session.add(ucla_info) db.session.commit()
async def login(usr: UserLogin): # req_data = request.get_json()\ print("hit login") password = usr.password username = usr.username response = {"success":False,"message":"user does not exist","token":""} if not userExist(username): return json.dumps(response) if not PasswordMatchesForUser(username,password): response = {"success":False,"message":"password incorrect","token":""} return json.dumps(response) usr = User() usr.SetUser(username) tokenid = CreateTokenForUser(usr) tokenString = GetTokenFromTokenId(tokenid) response = {"success":True,"message":"success","token":tokenString} return json.dumps(response)
def verify(s): s2 = CodeForm() temp = misc.find_one({"_id": bson.objectid.ObjectId(s)}) if s2.validate_on_submit(): if temp.get("code") == s2.code.data: temp.pop("code") x = temp.pop("email") temp["_id"] = x stu.insert_one(temp) misc.delete_one({'_id': bson.objectid.ObjectId(s)}) user = User(id=temp.get("_id"), password=temp.get("pword"), type='S') login_user(user, duration=datetime.timedelta(hours=1)) return redirect(url_for("stuhome")) flash("Incorrect code entered") return render_template('check.html', title='Email Verification', form=s2, template='signup-page', body='Verify your email.')
def test_invalid_user_signup_duplicate(self): db.session.add(User( username=self.default_user['username'], password=self.default_user['password'])) db.session.commit() with self.app as c: with c.session_transaction() as sess: sess['url'] = '/' self.login() response = self.signup( username=self.default_user['username'], password='******' ) req = request.url self.assertIn(b'Please use a different username.', response.data) self.assertIn(b'/signup', req)
def download(key): """ Downloads a file from S3 based on the key in the path """ logger = DynamoAccessLogger('facgov_download') current_user = User() # Check access, no access if an empty list is returned from a User class if current_user.has_facgov_access(): client = current_app.config['S3_RESOURCE'] bucket = client.Bucket(current_app.config['FACGOV_BUCKET']) # Redirect to base url for keys that end with '/' which are valid S3 keys but are not files if key.endswith('/'): return redirect(bp.url_prefix) try: file_obj = bucket.Object(key).get() except client.meta.client.exceptions.NoSuchKey: # per boto3 docs logger.log_access(has_access=False, downloaded_object=key) raise NotFoundError(f'File {file_name(key)} not found.') logger.log_access(has_access=True, downloaded_object=key) return Response(file_obj['Body'].read(), mimetype=file_type(key), headers={ "Content-Disposition": "inline; filename={}".format(file_name(key)) }) else: logger.log_access(has_access=False, downloaded_object=key) raise ForbiddenError('You do not have access to this page. \ Please reach out to Timur Gulyamov (tg2648) to get access.' )
def serve_fif_archive_layout(): current_user = User() if current_user.has_fif_archive_access(): # If user has elevated access, serve admin view logger.log_access(has_access=True) layout = html.Div([ serve_navbar(), html.Div( [ header, serve_admin_fif_list(), ], className="container pb-5", ), ]) else: # Otherwise, serve faculty view logger.log_access(has_access=False) layout = html.Div([ serve_navbar(), html.Div( [ header, serve_faculty_fif_list(current_user.uni), ], className="container pb-5", ), ]) return layout
def setUp(self): self.user = User()
def setUp(self): """ Setting up User before testing """ self.user = User()
def with_me_data(self, me_id=None, user_id=None, id=None, limit=None, offset=None, order_by=None): review_table = 'app_review' user_table = 'app_user' reviewable_table = 'app_reviewable' reaction_table = 'app_reaction' comment_table = 'app_comment' table_cols = { review_table: ('id', 'name', 'time', 'rating', 'text'), user_table: ('id', 'email', 'username'), reviewable_table: ('id', 'url', 'image_url'), 'me_data': ('reaction_type', ), 'reaction_data': ('explicit', ), 'comments': ('explicit', ), } table_cols_flat = [(table, col) for table, cols in table_cols.items() for col in cols] select_cols = ','.join(f'{table}.{col}' for table, col in table_cols_flat) maybe_where_user = f'AND {review_table}.user_id=%(user_id)s' if user_id else '' maybe_where_review = f'AND {review_table}.id=%(id)s' if id else '' maybe_where_entity_has_id = f'AND entity_id=%(id)s' if id else '' maybe_order_by = f'ORDER BY {order_by}' if order_by else f'ORDER BY {review_table}.time DESC' maybe_limit = f'LIMIT {limit}' if limit else '' maybe_offset = f'OFFSET {offset}' if offset else '' query = f""" SELECT {select_cols} FROM {review_table} JOIN {user_table} on {user_table}.id={review_table}.user_id JOIN {reviewable_table} on {reviewable_table}.id={review_table}.reviewable_id LEFT OUTER JOIN ( SELECT entity_id, type as reaction_type FROM {reaction_table} WHERE user_id=%(me_id)s {maybe_where_entity_has_id} ) me_data on me_data.entity_id={review_table}.id LEFT OUTER JOIN ( SELECT entity_id, json_agg(json_build_object( 'user_id', {user_table}.id, 'username', {user_table}.username, 'type', {reaction_table}.type )) as explicit FROM {reaction_table} JOIN {user_table} on {reaction_table}.user_id={user_table}.id WHERE true {maybe_where_entity_has_id} GROUP BY entity_id ) reaction_data on reaction_data.entity_id={review_table}.id LEFT OUTER JOIN ( SELECT entity_id, json_agg(json_build_object( 'id', {comment_table}.id, 'user_id', {user_table}.id, 'username', {user_table}.username, 'text', {comment_table}.text, 'created_at', {comment_table}.created_at, 'in_reply_to_id', {comment_table}.in_reply_to_id )) as explicit FROM {comment_table} JOIN {user_table} on {comment_table}.user_id={user_table}.id WHERE true {maybe_where_entity_has_id} GROUP BY entity_id ) comments on comments.entity_id={review_table}.id WHERE true {maybe_where_user} {maybe_where_review} {maybe_order_by} {maybe_limit} {maybe_offset} """ with connection.cursor() as cursor: cursor.execute( query, { 'me_id': maybe_uuid(me_id), 'user_id': maybe_uuid(user_id), 'id': maybe_uuid(id) }) rows = list(cursor.fetchall()) table_col_to_row = {p: i for i, p in enumerate(table_cols_flat)} row_data = [{ table: replace_uuid_recursively( {col: row[table_col_to_row[table, col]] for col in cols}) for table, cols in table_cols.items() } for row in rows] results = [ annotate_obj( Review(**data[review_table], user=User(**data[user_table]), reviewable=Reviewable(**data[reviewable_table])), me=data['me_data'], reaction_data=data['reaction_data'], comments=data['comments']) for data in row_data ] return results
def setUp(self): self.user = User() self.user_data = {"user@email": "passwordofuser"}
m_names = json.load(open("bogus/names_m.json", "r")) f_names = json.load(open("bogus/names_f.json", "r")) mlen = len(m_names) flen = len(f_names) lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus efficitur urna nec interdum scelerisque. Quisque tempor augue at ipsum dignissim, eget pharetra ipsum ullamcorper. Proin eu eleifend enim. Nam iaculis placerat molestie. Praesent feugiat rutrum arcu eget semper. Praesent efficitur massa eu urna bibendum, sit amet efficitur sapien molestie. Ut euismod urna quis placerat aliquam. Sed elementum nunc eu posuere laoreet. Vestibulum congue eleifend convallis." liptag = lipsum.split(" ") imgs = [] for e in range(0, 84): n = surnames[random.randint(0, len(surnames) - 1)] if e % 2: fn = m_names[random.randint(0, mlen-1)] else: fn = f_names[random.randint(0, flen-1)] print("making user: %s %s" % (fn, n)) usr = User(uname=fn[:1]+n[:4], email="*****@*****.**" % (fn, n), password="******") User.activate_account(usr) profile = Account(usr, fname=fn, lname=n, dob=str(random.randint(1980, 2000))+"-07-06") profile.images.append("data:image/jpeg;base64,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H/jP5wJq8HjQhTweLAP+a1TOvP1lVx8bf8McD7oF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGb/jcYQOi6NZ701SxB9lmJYx/yhAmPwosTl4I0w/tL9Rcfdn5CfyQLewEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQM9/Gvxt+GtNf3rrtK/x4Gon+QQJo8MzSWp4H0JW9WrzLh7vZv1HLuX8FcD64FoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFHfGI0QW8H+YfXG1TCuX6iy5GN/hyDAmvuKYvJwfw6PjpmO38YLj8mgTvAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAqB4r+HzcEak37PI05/wAc6iv/ANkCYe5/Ty8KcNjbb/celkj06nDpP+sCXoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFXfE10dr+CNcVfVEw7j+7RqGLa34qhH1QJr7DsHytE0evbby9L09Nvhy4lQ2/KBzeAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAff1xufg7iEfDTrW/gZHP+GBMvCGKExMVB6Jj0KPsWpQP7oH14CAgICAgICAgICAgICAgICB/9k=") profile.tags = [liptag[random.randint(0, len(liptag) - 1)] for i in range(0, 6)] profile.gender = ["Female", "Male"][e % 2] profile.interest= ["Men", "Women", "Both"][random.randint(0, 2)] profile.biography = lipsum print("Registered user ", usr.uname) profile.save()
def serve_searchcom_layout(): # if has_request_context(): # session.permanent = True current_user = User() # Check access, no access if an empty list is returned from a User class if len(current_user.searchcom_access()) > 0: # Log that a user accesssed this view and was authorized logger.log_access(has_access=True) # Sub-layouts can be served from functions as well, if necessary, to enable dynamic updates # For example, when current user object is acesssed in the navbar/filters, which requires a request context layout = html.Div( [ serve_navbar(), html.Div( [ header, serve_req_dropdown(), search_info, # serve_slider(), charts, subfields, crosstab_table, session_data ], className="container pb-5", ), ] ) else: # Log that a user accesssed this view and was NOT authorized logger.log_access(has_access=False) no_access_alert = dbc.Alert( [ html.H5('You don\'t have access to this dashboard.', className='alert-heading'), html.P( 'If your department has a ladder-rank search posted in RAPS, please reach out to Timur Gulyamov (tg2648) to get access.', className='mb-0', ), ], color='warning', className='mt-3' ) layout = html.Div( [ serve_navbar(), html.Div( [ no_access_alert ], className="container" ), ] ) return layout
#! /usr/bin/env python3 from app.users import User from app import controller import os DIR = os.path.dirname(__file__) DBPATH = os.path.join(DIR, 'data', 'terminal_trader.db') User.dbpath = DBPATH #controller.run() me = User(name = "Richard Speed", age = 48, email = "*****@*****.**", \ balance = 250.00, login_name = "speedr", login_id = "password16" ) al = User(name = "Alistair Fraser", age = 43, email = "*****@*****.**", \ balance = 950.00, login_name = "frazzle", login_id = "password17" ) hamo = User(name = "Steven Hamilton", age = 44, email = "*****@*****.**", \ balance = 550.00, login_name = "hamo", login_id = "password18" ) hemel = User(name = "Stuart Head", age = 45, email = "*****@*****.**", \ balance = 650.00, login_name = "hemel", login_id = "password19" ) hygers = User(name = "Simon Hygate", age = 45, email = "*****@*****.**", \ balance = 750.00, login_name = "hygers", login_id = "password20" ) al._insert() hamo._insert() hemel._insert() hygers._insert() User.one_from_where_clause("login_name", "speedr")
def setUp(self): self.myUser=User(1, 2, 3, 4, 2)