Ejemplo n.º 1
0
def im_apps_add():
    """
    创建游戏
    """
    g.uri_path = request.path

    app_obj = App()
    with app_obj.transaction():
        app_obj.init()
        if app_obj.feed(developer_id=session['user']['id'],
                        name=request.form.get('name'),
                        key=random_ascii_string(32),
                        secret=random_ascii_string(32),
                        status=int(request.form.get('status', 0))):

            clients = _get_clients()

            app_obj.put_clients(clients)

            ios_client_id = None
            android_client_id = None
            for clt in app_obj.clients():
                if int(clt['platform_type']) == PlatformType.IOS:
                    if clt['is_active']:
                        ios_client_id = clt['id']
                elif int(clt['platform_type']) == PlatformType.ANDROID:
                    # 不管是否激活都生成证书
                    android_client_id = clt['id']

            # 更新apns证书
            _update_apns(ios_client_id, clients, app_obj.id)

            if android_client_id is not None:
                crypto = Certificate(CA_KEY, CA_CER)
                pkey, cer = crypto.create_client_certificate(android_client_id)

                data = {
                    'pkey': pkey,
                    'cer': cer,
                }

                client_obj = Client().set_id(android_client_id)

                data.update(_get_data())

                client_obj.set_certificate(data)

            return redirect(url_for('.im_game_complete', game_id=app_obj.id))
    return redirect(url_for('.im_game_add'))
Ejemplo n.º 2
0
def verify_mail():
    """
    """
    account_obj = _get_account_by_email(g._db, request.form.get('email', ''))
    if account_obj:
        raise MainException.ACCOUNT_DUPLICATE

    email = request.form.get('email', '')
    password = request.form.get('password', '')
    password = generate_password_hash(password)
 
    code = random_ascii_string(40)
    account_id = Account.gen_id(g._db)

    send_verify_email(email, code, email_cb=url_for('account.register_valid', code='', _external=True))

    Account.insert_verify_email(g._db, email, code, EmailUsageType.DEVELOPER_VERIFY, account_id)
    Account.create_account(g._db, account_id, email, password, 0, RoleType.DEVELOPER)

    if 'user' not in session:
        session['user'] = {}

    session['user']['id'] = account_id
    session['user']['email'] = email
    session['user']['email_checked'] = 0
    session['user']['role'] = RoleType.DEVELOPER

    account = {
        "id":account_id,
        "email":email,
        "email_checked":0,
        "role":RoleType.DEVELOPER
    }
    return send_response(account)
Ejemplo n.º 3
0
def reset_mail():
    """
    """
    email = request.form.get('email', '')

    if not email:
        raise MainException.ACCOUNT_NOT_FOUND

    account_obj = _get_account_by_email(g._db, email)
    if not account_obj:
        raise MainException.ACCOUNT_NOT_FOUND

    count = Account.get_verify_count(g._db, email)
    if count > 5:
        raise MainException.EMAIL_TOO_OFTEN

    code = random_ascii_string(40)

    send_reset_email(
        email, code,
        url_for('account.password_forget_check',
                mail=email,
                code='',
                _external=True))

    Account.insert_verify_email(g._db, email, code,
                                EmailUsageType.SELLER_RESET_PWD,
                                account_obj['id'])

    return MainException.OK
Ejemplo n.º 4
0
 def create_wx(cls, db, name, gh_id, wx_appid, refresh_token, store_id, is_app):
     db.begin()
     appid = App.gen_id(db)
     app_key = random_ascii_string(32)
     app_secret = random_ascii_string(32)
     developer_id = 0
  
     App.create_app(db, appid, name, developer_id, app_key, app_secret, store_id)
  
     client_id = Client.gen_id(db)
  
     Client.create_client(db, client_id, appid, developer_id, 
                          Client.CLIENT_WX, "")
  
     Client.create_wx(db, client_id, gh_id, wx_appid, 
                      refresh_token, is_app)
  
     db.commit()
     return appid
Ejemplo n.º 5
0
    def create_wx(cls, db, name, gh_id, wx_appid, refresh_token, store_id,
                  is_app):
        db.begin()
        appid = App.gen_id(db)
        app_key = random_ascii_string(32)
        app_secret = random_ascii_string(32)
        developer_id = 0

        App.create_app(db, appid, name, developer_id, app_key, app_secret,
                       store_id)

        client_id = Client.gen_id(db)

        Client.create_client(db, client_id, appid, developer_id,
                             Client.CLIENT_WX, "")

        Client.create_wx(db, client_id, gh_id, wx_appid, refresh_token, is_app)

        db.commit()
        return appid
Ejemplo n.º 6
0
    def gen_token(self, grant_type, client_id, user_id):

        token_type = 'Bearer'

        token = Token.get_one(Token.grant_type == grant_type,
                              Token.user_id == user_id,
                              Token.client_id == client_id)

        if token:
            return {
                'access_token': token.access_token,
                'token_type': token_type,
                'expires_in': token.expires_in,
                'refresh_token': token.refresh_token,
            }

        time_now = int(time.time())

        # 永不过期
        expires_in = 0
        refresh_token = random_ascii_string(self.token_length)
        access_token = self.token_serializer.dumps(
            (grant_type, client_id, user_id, time_now, expires_in))

        values = {
            'grant_type': grant_type,
            'access_token': access_token,
            'expires_in': expires_in,
            'refresh_token': refresh_token,
            'client_id': client_id,
            'user_id': user_id,
            'create_time': time_now
        }

        # 保存token信息
        try:
            with db.database.atomic():
                # Token.delete().
                # where((getattr(Token, self.foreign_key) == user_id) & (Token.grant_type == grant_type)).execute()
                Token.create(**values)
        except IntegrityError as e:
            if e[0] == 1062:
                raise meta.LOGIN_TOO_OFTEN
            raise e
        return {
            'access_token': access_token,
            'token_type': token_type,
            'expires_in': expires_in,
            'refresh_token': refresh_token,
        }
Ejemplo n.º 7
0
def verify_mail():
    """
    """
    email = request.form.get('email', '')
    password = request.form.get('password', '')
    password = generate_password_hash(password)

    account_obj = _get_account_by_email(g._db, email)
    if account_obj:
        raise MainException.ACCOUNT_DUPLICATE

    code = random_ascii_string(40)

    appid = config.KEFU_APPID
    db = g._db

    mode = 1  #fix_mode
    db.begin()
    store_id = Store.create_store(db, '', 0, mode, 0)
    account_id = Seller.add_seller(db, email, password, store_id, email, 0)
    Account.insert_verify_email(db, email, code, EmailUsageType.SELLER_VERIFY,
                                account_id)
    db.commit()

    Store.add_seller_id(g.im_rds, store_id, account_id)

    if 'user' not in session:
        session['user'] = {}

    session['user']['id'] = account_id
    session['user']['email'] = email
    session['user']['email_checked'] = 0
    session['user']['store_id'] = store_id
    session['user']['name'] = email

    account = {
        "id": account_id,
        "email": email,
        "email_checked": 0,
    }

    send_verify_email(email,
                      code,
                      email_cb=url_for('account.register_valid',
                                       code='',
                                       _external=True))

    return send_response(account)
Ejemplo n.º 8
0
def verify_email():
    """
    """
    account_obj = _get_account(g._db)
    if not account_obj:
        raise MainException.ACCOUNT_NOT_FOUND

    if account_obj.get('email_checked'):
        raise MainException.ACCOUNT_EMAIL_CHECKED

    code = random_ascii_string(40)
    email = account_obj.get('email')

    send_verify_email(email, code, url_for('account.register_valid', code='', _external=True))
    Account.insert_verify_email(g._db, email, code, EmailUsageType.DEVELOPER_VERIFY, account_obj.get('id'))

    return MainException.OK
Ejemplo n.º 9
0
 def send_voice(token, openid, files):
     """
     发送语音
     """
     wx = WX(token)
     if isinstance(files, str) or isinstance(files, unicode):
         res = requests.get(files)
         content = res.content
     else:
         media = files['media']
         content = media.stream
     filename = random_ascii_string(10) + '.amr'
     result_1 = wx.add_media('voice',
                             [('voice', (filename, content, 'audio/amr'))])
     result_1 = _check_error(result_1)
     media_id = result_1.get('media_id')
     result_2 = wx.send_common_message(openid,
                                       msgtype='voice',
                                       content={'media_id': media_id})
     return _check_error(result_2)
Ejemplo n.º 10
0
 def forget_password(self, email_cb):
     if email_cb is None:
         return
     mail = current_app.extensions.get('mail')
     code = random_ascii_string(40)
     if email_cb == 'debug':
         url = url_for('.reset_password', code=code, _external=True)
     else:
         url = email_cb + code
     try:
         mail.send_message(
             "GoBelieve开发者平台密码重置",
             recipients=[self.email],
             html="本邮件是应您在GoBelieve开发者平台上提交的重置密码请求,从而发到您邮箱的重置密码的邮件。<br/>"
             "如果您没有提交重置密码请求而收到此邮件,我们非常抱歉打扰您,请忽略本邮件。<br/>"
             "要重置您在GoBelieve开发者平台上的用户密码,请点击以下链接:<br/>"
             "<a href=\"{url}\">密码重置</a> <br/>"
             "该链接会在浏览器上打开一个页面,让您来重设密码。如果无法点击请复制到浏览器地址栏里:<br/>"
             "{url} <br/>"
             "上述地址24小时内有效。".format(url=url))
     except Exception, e:
         logging.exception(e)
Ejemplo n.º 11
0
    def verify_email(self, email_cb):
        if email_cb is None:
            return
        mail = current_app.extensions.get('mail')
        code = random_ascii_string(40)
        if email_cb == 'debug':
            url = url_for('.confirm_email', code=code, _external=True)
        else:
            url = email_cb + code

        try:
            mail.send_message(
                "GoBelieve开发者平台邮箱验证",
                recipients=[self.email],
                html="感谢注册GoBelieve开发者平台,使用GoBelieve开发者服务。<br/>"
                "请点击以下按钮进行邮箱验证,以便您正常使用GoBelieve开发者平台的更多功能:<br/>"
                "<a href=\"{url}\">马上验证邮箱</a> <br/>"
                "如果您无法点击以上链接,请复制以下网址到浏览器里直接打开:<br/>"
                "{url} <br/>"
                "如果您并未申请GoBelieve开发者平台的相关服务,可能是其他用户误输入了您的邮箱地址。请忽略此邮件。".format(
                    url=url))
        except Exception, e:
            logging.exception(e)
Ejemplo n.º 12
0
def reset_mail():
    """
    """
    email = request.form.get('email', '')

    if not email:
        raise MainException.ACCOUNT_NOT_FOUND

    account_obj = _get_account_by_email(g._db, email)
    if not account_obj:
        raise MainException.ACCOUNT_NOT_FOUND


    count = Account.get_verify_count(g._db, email)
    if count > 5:
        raise MainException.EMAIL_TOO_OFTEN

    code = random_ascii_string(40)

    send_reset_email(email, code, url_for('web.password_forget_check', mail=email, code='', _external=True))

    Account.insert_verify_email(g._db, email, code, EmailUsageType.DEVELOPER_RESET_PWD, account_obj['id'])

    return MainException.OK
Ejemplo n.º 13
0
def app_add_post():
    """
    创建应用
    """
    db = g._db

    store_id = session['user']['store_id']

    name = request.form.get('name')

    key = random_ascii_string(32)
    secret = random_ascii_string(32)

    android, ios = _get_clients()

    developer_id = 0

    db.begin()
    appid = App.gen_id(db)
    App.create_app(db, appid, name, developer_id, key, secret, store_id)

    if android:
        push_types = request.form.getlist('push_type')
        xinge_access_id = request.form.get('xinge_access_id', '')
        xinge_secret_key = request.form.get('xinge_secret_key', '')
        mi_appid = request.form.get('mi_appid', '')
        mi_secret_key = request.form.get('mi_secret_key', '')
        hw_appid = request.form.get('hw_appid', '')
        hw_secret_key = request.form.get('hw_secret_key', '')
        gcm_sender_id = request.form.get('gcm_sender_id', '')
        gcm_api_key = request.form.get('gcm_api_key', '')

        client_id = Client.gen_id(db)
        Client.create_client(db, client_id, appid, developer_id, PlatformType.ANDROID, android['platform_identity'])
        Client.create_android(db, client_id, xinge_access_id, xinge_secret_key, mi_appid, mi_secret_key, hw_appid, hw_secret_key, gcm_sender_id, gcm_api_key)


    if ios:
        sandbox_key_file = request.files.get('sandbox_key')
        if sandbox_key_file:
            filename = sandbox_key_file.filename
            ext = os.path.splitext(filename)[1]
            if ext == '.p12':
                sandbox_key = sandbox_key_file.read()
                sandbox_key_secret = request.form.get('sandbox_key_secret')
            else:
                sandbox_key = ""
                sandbox_key_secret = ""
        else:
            sandbox_key = ""
            sandbox_key_secret = ""

        production_key_file = request.files.get('production_key')
        if production_key_file:
            filename = production_key_file.filename
            ext = os.path.splitext(filename)[1]
            if ext == '.p12':
                production_key = production_key_file.read()
                production_key_secret = request.form.get('production_key_secret')
            else:
                production_key = ""
                production_key_secret = ""

        else:
            production_key = ""
            production_key_secret = ""

        client_id = Client.gen_id(db)
        Client.create_client(db, client_id, appid, developer_id, PlatformType.IOS, ios['platform_identity'])
        Client.create_ios(db, client_id, sandbox_key, sandbox_key_secret, production_key, production_key_secret)

        
    db.commit()

    return redirect(url_for('.app_complete', app_id=appid))