def test_encode_base64(): s = '\n' s += util.encode_base64('abc') s += '\n' s += util.encode_base64('abc', 'utf-8') s += '\n' s += util.encode_base64('abc', 'shift-jis') s += '\n' s += util.encode_base64('abcあいう', 'utf-8') s += '\n' s += util.encode_base64('abcあいう', 'shift-jis') return s
def members(): _debug(request, 'members api requested') # version check mismatch, service_platform = _verify_request_header(request) if mismatch: store_url = _service_platform_urls.get(service_platform, None) if store_url: response = jsonify(store_url=store_url) response.status_code = 406 return response _error(request, 'Protocol version is not match', 406) req = _verify_request_body(request, membership_pb2.MEMBERS) members = req.members _verify_app_key(members.app_key) facebook_id = 0 facebook_email = '' # TODO: async # facebook access_token verification if members.facebook and members.facebook.id > 0 and members.facebook.access_token != u'': # TODO: facebook connect exception handling graph = facebook.GraphAPI(access_token=members.facebook.access_token, version=app.FACEBOOK_API_VERSION) user = graph.get_object('me') # verify facebook_id if user['id'] and members.facebook.id == long(user['id']): facebook_id = members.facebook.id facebook_email = members.facebook.email # create or get member member_id, payments = models.member_info(udid = members.udid, device_platform = members.device_platform, service_platform = members.service_platform, gcm_token = members.gcm_token, facebook_id = facebook_id, facebook_email = facebook_email) if not member_id: _error(request, 'Can not find member;{udid:%s}' % (members.udid), 404) # make response developer_payload = ''.join(random.choice(_random_string) for _ in range(64)) response = _make_response(req, member_id) response.members.member_id = member_id response.members.developer_payload = developer_payload for p in payments: payment = response.members.payments.add() payment.service_platform = p['service_platform'] payment.payment_id = p['payment_id'] payment.order_id = p['order_id'] payment.developer_payload = p['developer_payload'] payment.purchase_token = p['purchase_token'] payment.inapp_id = p['inapp_id'] return encode_base64(response.SerializeToString())
def payment(): _debug(request, 'payment api requested') # verify request headers mismatch, service_platform = _verify_request_header(request) # verify request body req = _verify_request_body(request, membership_pb2.PAYMENT) payment = req.payment # verify access token member = _verify_access_token(request, payment.access_token) member_id = member['member_id'] # verify payment product = _verify_payment(request, member_id, service_platform, payment) # insert purchase payment_id = models.purchase(member_id, product, payment) if not payment_id: _error(request, 'Purchase failed;{member_id:%d,inapp_id:%s}' % (member_id, payment.inapp_id), 404) # make response response = _make_response(req, member_id) response.payment.service_platform = payment.service_platform response.payment.payment_id = payment_id response.payment.inapp_id = product['inapp_id'] if payment.service_platform == membership_pb2.SERVICE_PLATFORM_PLAYSTORE: response.payment.order_id = payment.playstore.order_id response.payment.developer_payload = payment.playstore.developer_payload response.payment.purchase_token = payment.playstore.purchase_token elif payment.service_platform == membership_pb2.SERVICE_PLATFORM_APPSTORE: pass elif payment.service_platform == membership_pb2.SERVICE_PLATFORM_GAMEFLIER: pass _debug(request, 'payment api responsed') return encode_base64(response.SerializeToString())
def token(): _debug(request, 'token api requested') # 헤더정보 검증 _verify_request_header(request) # 데이터정보 검증 req = _verify_request_body(request, membership_pb2.TOKEN) token = req.token # app_key 검증 _verify_app_key(token.app_key) # select member id member_id = models.member_id(token.udid, token.device_platform, token.service_platform) if not member_id: _error(request, 'Member is not exist;{udid:%s}' % (token.udid), 404) # make response response = _make_response(req, member_id) return encode_base64(response.SerializeToString())
def inlinequery_handler(bot, update, chat_data): query = update.inline_query.query.lower() # TODO: remove or enhance eventually, this is potentially very spammy # Statistic.of(update, 'inlinequery', '"{}"'.format(query), Statistic.DETAILED) user = User.from_update(update) results_list = list() input_given = len(query.strip()) > 0 query_too_short = 0 < len(query.strip()) < SEARCH_QUERY_MIN_LENGTH too_many_results = False cat_results = [] bot_results = [] if input_given: # query category results cat_results = search.search_categories(query) if not query_too_short: # query bot results bot_results = list(search.search_bots(query)) if len(bot_results) > MAX_BOTS: bot_results = bot_results[:MAX_BOTS] too_many_results = True # query for new bots if query == messages.NEW_BOTS_INLINEQUERY.lower() or query == 'new': results_list.append(new_bots_article()) bot.answerInlineQuery(update.inline_query.id, results=results_list) return if query in CONTRIBUTING_QUERIES: results_list.append( InlineQueryResultArticle( id=uuid4(), title='Contributing', input_message_content=InputTextMessageContent( message_text=messages.CONTRIBUTING, parse_mode="Markdown"), )) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return if query in EXAMPLES_QUERIES: results_list.append( InlineQueryResultArticle( id=uuid4(), title='Examples', input_message_content=InputTextMessageContent( message_text=messages.EXAMPLES, parse_mode="Markdown"), )) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return if query in (const.DeepLinkingActions.RULES, '#rules'): results_list.append( InlineQueryResultArticle( id=uuid4(), title='@BotListChat Rules', input_message_content=InputTextMessageContent( message_text=messages.BOTLISTCHAT_RULES, parse_mode="Markdown", disable_web_page_preview=True), )) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return if query == const.DeepLinkingActions.FAVORITES and user.has_favorites: results_list.append(favorites_article(user)) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=0, is_personal=True) return msg, reply_markup, key = botlistchat.get_hint_message_and_markup(query) if msg is not None: results_list.append(hint_article(msg, reply_markup, key)) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return invalid_search_term = query_too_short and not cat_results if invalid_search_term: results_list.append(query_too_short_article()) results_available = cat_results or bot_results if results_available: if len(bot_results) > 1: results_list.append( all_bot_results_article(bot_results, too_many_results)) for c in cat_results: results_list.append(category_article(c)) for b in bot_results: results_list.append(bot_article(b)) if len(bot_results) > 0: bot.answerInlineQuery( update.inline_query.id, results=results_list, switch_pm_text="See all results" if too_many_results else "Search in private chat", switch_pm_parameter=util.encode_base64(query), cache_time=0, is_personal=True) else: bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=0, is_personal=True) else: if user.has_favorites: results_list.append(favorites_article(user)) results_list.append(new_bots_article()) categories = Category.select_all() for c in categories: results_list.append(category_article(c)) if invalid_search_term or not input_given: bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=0, is_personal=True) else: bot.answerInlineQuery( update.inline_query.id, results=results_list, switch_pm_text="No results. Contribute a bot?", switch_pm_parameter='contributing', cache_time=0, is_personal=True)