Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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())
Ejemplo n.º 3
0
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())
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
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)