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'))
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)
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
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
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, }
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)
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
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)
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)
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)
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
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))