def main(email: str, *, oldmsn: bool = False, yahoo: bool = False) -> None: with Session() as sess: user = sess.query(User).filter(User.email == email).one_or_none() if user is None: print("Creating new user...") user = User( uuid=misc.gen_uuid(), email=email, verified=False, name=email, message='', groups={}, settings={}, ) # TODO: Should be generated on-demand, not here #ticketxml = '<?xml version="1.0" encoding="utf-16"?>\r\n<Ticket xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r\n <TS>{}</TS>\r\n <CID>{}</CID>\r\n</Ticket>'.format( # now.isoformat()[0:19] + 'Z', cid_format(user.uuid, decimal = True) #) #user.set_front_data('msn', 'circleticket', misc.sign_with_new_key_and_b64(ticketxml)) else: print("User exists, changing password...") pw = getpass.getpass("Password: "******"Done.")
async def user_auth_middleware(request, handler): session = await get_session(request) db_engine = request.app['db'] userid = session.get('userid') usr = User() # create anonymous user if userid is not None: async with db_engine.acquire() as conn: user_raw = await conn.execute( user.select().where(user.c.id == userid)) if user_raw.rowcount > 1: logging.error(f'There are multiple users with id: {userid}') else: user_row = await user_raw.fetchone() usr = User(*user_row.as_tuple()) request['user'] = usr resp = await handler(request) return resp
def start(user): chat_id = user.chat.id bot.send_message(chat_id, f"Welcome to {game['name']}", reply_markup=types.ReplyKeyboardRemove(selective=False)) if User().get_by_chat_id( chat_id=chat_id ) is None: # if user hasn't used the "/start" command yet: bot.send_message(chat_id, "Hello, stranger, let me scan you...") User().new(chat_id=chat_id) command_help(user) # show the new user the help page bot.send_message(chat_id, "Scanning complete, I know you now", reply_markup=menu_builder.common_user_menu()) else: bot.send_message( chat_id, "I already know you, no need for me to scan you again!", reply_markup=menu_builder.common_user_menu())
def _remove_from_contacts(user: db.User, uuids: Set[str]) -> bool: none_found = True for c in user.contacts: if c['uuid'] in uuids: none_found = False break if none_found: return False user.contacts = [c for c in user.contacts if c['uuid'] not in uuids] print("contacts", user.email) return True
def create_user(email: str, pw: str, name: str, message: str) -> User: user = User(uuid=str(uuid4()), email=email, verified=True, name=name, message=message, groups=[], settings={}) # TODO: Should be generated on-demand, not here #ticketxml = '<?xml version="1.0" encoding="utf-16"?>\r\n<Ticket xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r\n <TS>{}</TS>\r\n <CID>{}</CID>\r\n</Ticket>'.format( # datetime.utcnow().isoformat()[0:19] + 'Z', cid_format(user.uuid, decimal = True) #) #user.set_front_data('msn', 'circleticket', misc.sign_with_new_key_and_b64(ticketxml)) set_passwords(user, pw, support_old_msn=True, support_yahoo=True) return user
def set_contacts(user: User, contacts_by_group: Dict[str, List[User]]) -> None: #user.contacts = {} user.groups = [] for i, (group_name, group_users) in enumerate(contacts_by_group.items()): group_id = str(i + 1) group_uuid = str(uuid4()) if group_name: user.groups.append({ 'id': group_id, 'uuid': group_uuid, 'name': group_name, 'is_favorite': False }) for u in group_users: contact = add_contact_twosided(user, u) if group_name: contact.groups.append({'id': group_id, 'uuid': group_uuid})
def set_passwords(user: User, pw: str, *, support_old_msn: bool = False, support_yahoo: bool = False) -> None: user.password = hash.hasher.encode(pw) if support_old_msn: pw_md5 = hash.hasher_md5.encode(pw) user.set_front_data('msn', 'pw_md5', pw_md5) if support_yahoo: pw_md5_unsalted = hash.hasher_md5.encode(pw, salt='') user.set_front_data('ymsg', 'pw_md5_unsalted', pw_md5_unsalted) pw_md5crypt = hash.hasher_md5crypt.encode(pw, salt='$1$_2S43d5f') user.set_front_data('ymsg', 'pw_md5crypt', pw_md5crypt)
async def google_drive_auth_callback(request): session = await get_session(request) state = session.get('google_drive_auth_state', '') cfg = modules_config api_scopes = cfg.get('google_drive', {}).get('scopes', []) flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( google_drive_secrets_file, scopes=api_scopes, state=state) flow.redirect_uri = request.url.parent.join( request.app.router['google_drive_auth_callback'].url_for()).human_repr( ) authorization_response = request.url.human_repr() try: flow.fetch_token(authorization_response=authorization_response) except InvalidGrantError: logging.exception("Error on getting google drive token: ") raise HTTPBadRequest() credentials = flow.credentials if not credentials.valid: raise HTTPBadRequest() # create user here google_plus = build('plus', 'v1', credentials=credentials) profile = google_plus.people().get(userId='me').execute() user = User(email=profile['emails'][0]['value'], username=profile.get('displayName', ''), profile_url=profile.get('url', ''), avatar_url=profile.get('image', {}).get('url', '')) await user.save_to_db(request.app['db']) session['userid'] = user.id tm = GoogleDriveTokenManager( access_token=credentials.token, refresh_token=credentials.refresh_token, expires=credentials.expiry, token_uri=credentials.token_uri, ) raise HTTPFound(request.app.router['main_page'].url_for())