def login_redirect(): uid = None token_ = None try: token_ = request.query.get('state') uidenc = request.query.get('uid') uid = uidcrypt.decryptuid(uidenc) tok_valid = tokener.check(uid, token_, tokener.NS_LOGIN) if not tok_valid: abort(400, "Something went wrong. Token might be expired") bot.logged_in_with_fb(uid, request.query.get("code"), fb._LOGIN_REDIRECT_URL.format(uid=uidenc)) except HTTPError as e: logger.exception( "failed to login for uid:{} token:{}".format(uid, token_)) bot.do_action(uid) raise e except requests.exceptions.HTTPError as e: logger.exception("Failed {}".format(e.response.text)) except Exception as e: bot.do_action(uid) logger.exception( "Failed to login with bad access.state:{} uid: {} token:{}".format( request.query.get('state'), uid, token_)) abort(400, "Something went wrong. Please try it again. If the problem persists, please contact us at https://m.me/ChattySupport") return return dict()
def log(uidenc): uid = uidcrypt.decryptuid(uidenc) json = request.json json['uid'] = uid try: json['locale'] = User.get(uid).locale except Exception: logger.exception("faild to get ui lang ") logger.info("kpi_action:{}".format(json))
def settings(uidenc): uid = uidcrypt.decryptuid(uidenc) settings = bot.get_settings(uid) languages = [Lang(code=k, name=v, checked=(k in settings['languages'])) for k, v in filter(lambda (k1, v1): k1 in config.ENABLED_LANGUAGES, bot.get_language())] languages.sort(key=lambda x: x.name) userc = UserContext.get(uid) return dict(settings=settings, languages=languages, buy_points_url=fb.PAYMENT_LOGIN_URL.format( uid=uidenc, state=tokener.gen_token(uid, tokener.NS_PAYMENT)), userc=userc)
def post_settings(uidenc): uid = uidcrypt.decryptuid(uidenc) logger.debug("%s", request.forms.items()) languages = request.forms.getall('languages') genders = request.forms.getall('genders') l = len(genders) assert l <= 2 if l == 0 or l == 2: g = ["male", "female"] else: assert genders[0] in ["male", "female"] g = [genders[0]] lat = request.forms.get('latitude', default=None, type=float) lon = request.forms.get('longitude', default=None, type=float) sr = request.forms.get('search_radius', default=None, type=int) le = request.forms.get('location_enabled', None) == "true" bot.set_settings(uid, languages, g, lat, lon, sr, le) return "OK"
def set_lang_complete(uidenc): uid = uidcrypt.decryptuid(uidenc) user_languages, _ = bot.get_settings(uid) languages = [Lang(code=k, name=v, checked=(k in user_languages)) for k, v in bot.get_language() if k in user_languages] return dict(uidenc=uidenc, languages=languages)
def test_crypt(): enc = uidcrypt.encryptuid("12345") assert enc != "12345" assert isinstance(enc, str) dec = uidcrypt.decryptuid(enc) assert dec == "12345"