def migu_register(): """用户注册(GET|POST) :uri: /migu/register_phone :param phone: 手机号 :param password: 密码 :param code: 验证码 :param sessionid: 短信sessionid :returns: {'user': object, 'ut': string} """ params = request.values.to_dict() phone = params.get('phone', None) code = params.get('code', None) sessionid = params.get('sessionid', None) password = params.get('password', None) if not phone or not code or not password or not sessionid: return error.InvalidArguments invalid_error = User.invalid_password(password) if invalid_error: return invalid_error # 用户中心注册 ret = Migu.center_register(phone, password, const.CENTER_ACCOUNT_PHONE, code, sessionid) if isinstance(ret, error.ApiError): return ret # 进行用户绑定 migu_uid = Migu.get_identityid(phone, password, const.CENTER_ACCOUNT_PHONE) if isinstance(migu_uid, error.ApiError): return migu_uid user = User.get_platform_user('migu', migu_uid) if not user: user = User.get_by_phone(phone) if user: info = dict(partner_migu={'id': migu_uid}, nickname=u'咪咕用户%s%s' % (migu_uid[-4:], random.randint(1000, 9999)), gender=random.randint(1, 2), name='$mg$%s%s' % (migu_uid[-4:], random.randint(1000, 9999))) user = user.update_model({'$set': info}) else: info = dict(phone=phone, nickname=u'咪咕用户%s%s' % (migu_uid[-4:], random.randint(1000, 9999)), gender=random.randint(1, 2), name='$mg$%s%s' % (migu_uid[-4:], random.randint(1000, 9999))) user = User.create_platform_user('migu', migu_uid, data=info) else: # 如果用户没有绑定手机并且手机号没有被绑定, 则自动进行手机号绑定 if not user.phone and not User.get_by_phone(phone): info = dict(phone=phone) user.update_model({'$set': info}) ut = User.gen_token(str(user._id)) return {'user': user.format(), 'ut': ut}
def reset_password(): """重置密码 (GET|POST) :uri: /users/reset_password :param phone: 手机号 :param password: 密码 :param code: 短信验证码 :returns: {} """ params = request.values phone = params.get('phone', None) code = params.get('code', None) password = params.get("password", None) if not phone or not code or not password: return error.InvalidArguments invalid_error = User.invalid_password(password) if invalid_error: return invalid_error user = User.get_by_phone(phone) if not user: return error.UserNotExist if not SMS.verify_code(phone, code): return error.VerifyCodeFailed User.change_pwd(user, password) return {}
def validate(self): if not form.Form.validate(self): return False if not self.user.data and not self.phone.data: self.phone.errors.append(u'用户和手机号必须要填一个') user1 = User.get_one(self.user.data) if self.user.data else None user2 = User.get_by_phone(self.phone.data) if self.phone.data else None if self.user.data and not user1: self.user.errors.append(u'用户不存在') return False if self.phone.data and not user2: self.phone.errors.append(u'用户不存在') return False if self.phone.data and self.user.data: if user1 != user2: self.user.errors.append(u'用户字段和手机号字段对应的用户不匹配') self.phone.errors.append(u'用户字段和手机号字段对应的用户不匹配') return False user = user1 or user2 if UserGroup.user_in_group(str(self.group.data), str(user._id)): if user1: self.user.errors.append(u'该组已包含此用户') if user2: self.phone.errors.append(u'该组已包含此用户') return False return True
def process_form_data(self, data): if data['phone'] and not data['user']: user = User.get_by_phone(data['phone']) data['user'] = user._id if data['user'] and not data['phone']: user = User.get_one(data['user']) data['phone'] = user.phone return data
def verify_phone(): """验证手机号 (GET|POST) :uri: /users/verify_phone :param phone: 手机号 :returns: {} """ params = request.values phone = params.get('phone', None) if User.get_by_phone(phone): return error.UserExists('手机号已被注册') return {}
def register_phone(): """用户手机注册 (GET|POST) :uri: /users/register_phone :param phone: 手机号 :param password: 密码 :param nickname: 昵称 :param code: 短信验证码 :param gender: 性别(可选)(1:男, 2:女) :returns: {'user': object, 'ut': string} """ params = request.values phone = params.get('phone', None) code = params.get('code', None) password = params.get("password", None) nickname = params.get("nickname", None) gender = params.get("gender", 0) if not phone or not code or not password or not nickname: return error.InvalidArguments invalid_error = User.invalid_password(password) if invalid_error: return invalid_error invalid_error = User.invalid_nickname(nickname) if invalid_error: return invalid_error if User.get_by_phone(phone): return error.UserExists if not SMS.verify_code(phone, code): return error.VerifyCodeFailed user = User.init() name = '$mb$%s%s' % (phone[-4:], random.randint(1000, 9999)) user.name = name user.phone = phone user.nickname = nickname user.gender = gender salt = os.urandom(const.PWD_HASH_LEN) pwd = User.gen_pwd_hash(password, salt) user._salt = Binary(salt) user._password = Binary(pwd) uid = user.create_model() new_user = User.get_one(uid) token = User.gen_token(str(uid)) return {'user': new_user.format(), 'ut': token}
def phone_province(): """ 查询手机号码归属地 :uri: /migu/phone/province :param: phone :return: """ phone = request.values.get('phone', None) if not phone: return error.InvalidArguments user = User.get_by_phone(phone) if user and user.province: return {'province': user.province} province = Migu.get_user_info_by_account_name(phone) if isinstance(province, error.ApiError): return province user.update_model({'$set': {'province': province}}) return {'province': province}
def binding(): """用户绑定 (GET|POST&LOGIN) :uri: /users/binding :param platform: 平台标识 (phone, weixin, qq) :param openid: 平台id/手机号 :param token: 用户平台token/短信验证码 :returns: {} """ user = request.authed_user params = request.values platform = params.get('platform', None) openid = params.get('openid', None) token = params.get('token', None) if platform == 'phone': if not SMS.verify_code(openid, token): return error.VerifyCodeFailed # 用户已经存在 if User.get_by_phone(openid): return error.UserExists info = {'phone': openid} user.update_model({'$set': info}) elif platform == 'weixin': # 用户已经存在 if User.get_platform_user(platform, openid): return error.UserExists if not WeiXin(token, openid).get_open_info(): return error.LoginFailed key = 'partner_%s' % (platform) info = {key: {'id': openid}} user.update_model({'$set': info}) elif platform == 'qq': # 用户已经存在 if User.get_platform_user(platform, openid): return error.UserExists if not QQ(token, openid).get_open_info(): return error.LoginFailed key = 'partner_%s' % (platform) info = {key: {'id': openid}} user.update_model({'$set': info}) return {}
def send_phone_code(): """发送短信验证码 (GET|POST) :uri: /users/sms_code :param phone: 手机号 :param action: 触发动作(可选)(注册:reg) :returns: {} """ params = request.values phone = params.get('phone', None) action = params.get('action', None) if not phone: return error.InvalidArguments # 如果是注册验证码,提前判断手机号是否已存在 if action == 'reg' and User.get_by_phone(phone): return error.UserExists ret = SMS.send_code(phone) if not ret: return error.SendCodeFailed return {}
headers=headers, timeout=30) print_log('jpush_create_response_log', r.text) message_tag = [translate_md5(str(id)+'message')] push_data['audience']['tag'] = message_tag del push_data['notification'] push_data['message'] = {"content_type": "text", "title": "msg"} push_data['message']['msg_content'] = message_content push_data['message']['extras'] = {"an_url": an_post_str, "ios_url": ios_post_str, "title": push_title, "content": push_content, "event_id": event_id} r = session.request("POST", schedule_url, data=json.dumps(push_data), params=None, headers=headers, timeout=30) print_log('jpush_create_response_log', r.text) postdata() # yxpush postdata(app_key=app.config.get("JPUSH_YX_APP_KEY"), master_secret=app.config.get("JPUSH_YX_MASTER_SECRET")) if __name__ == '__main__': # 测试用 import sys from os.path import dirname, abspath os.environ['WXENV'] = 'Test' sys.path.append(dirname(dirname(dirname(abspath(__file__))))) from wanx.models.user import User phone = sys.argv[1] if len(sys.argv) > 1 else '' user = User.get_by_phone(phone) jpush_schedule_create(user, '我来测试,这是push', '我来测试,这是message', 'http://www.baidu.com', 'http://www.bing.com')
def _filter_phone(value): user = User.get_by_phone(value) return user._id if user else None
def platform_login(): """第三方平台token登录 (GET|POST) :uri: /platform/users/login :param platform: 平台标识{'csdk':付费SDK, 'weixin':微信, 'qq':QQ, 'migu':咪咕} :param token: 用户平台token :returns: {'user': object, 'ut': string} """ params = request.values platform = params.get('platform', None) token = params.get("token", None) if not token or platform not in const.PARTNER: return error.InvalidArguments data = Migu.token_validate(token) if isinstance(data, error.ApiError): return data openid = data.get('msisdn', None) migu_uid = data.get('identityID', None) passid = data.get('passID', None) if isinstance(migu_uid, error.ApiError): return migu_uid if platform == 'migu': # 进行用户绑定 user = User.get_platform_user('migu', migu_uid) if not user: user = User.get_by_phone(openid) if user: info = dict(partner_migu={ 'id': migu_uid, 'passid': passid }, name='$mg$%s%s' % (migu_uid[-4:], random.randint(1000, 9999))) user = user.update_model({'$set': info}) else: info = dict(phone=openid, nickname=u'咪咕用户%s%s' % (migu_uid[-4:], random.randint(1000, 9999)), name='$mg$%s%s' % (migu_uid[-4:], random.randint(1000, 9999)), partner_migu={ 'id': migu_uid, 'passid': passid }) user = User.create_platform_user('migu', migu_uid, data=info) else: info = {} # 如果用户没有绑定手机并且手机号没有被绑定, 则自动进行手机号绑定 if not user.phone and not User.get_by_phone(openid): info = dict(phone=openid) # 如果用户未绑定passid,则自动进行passid绑定 if passid not in user.partner_migu: info.update( dict(partner_migu={ 'id': migu_uid, 'passid': passid })) if info: user = user.update_model({'$set': info}) # 同步咪咕用户名密码 if user: User.change_pwd(user, token) else: # 判断平台用户是否已经用户系统中存在 user = User.get_platform_user(platform, openid) first_login = not user info = {} if platform == 'csdk': info = ChargeSDK(token).get_open_info() elif platform == 'weixin': info = WeiXin(token, openid).get_open_info(first_login) elif platform == 'qq': info = QQ(token, openid).get_open_info(first_login) if not info: return error.LoginFailed # 如果平台用户在用户系统中不存在, 则创建, 通过平台ID(openid)进行关联 if first_login: open_id = info.pop('openid') user = User.create_platform_user(platform, open_id, data=info) # 给咪咕平台发送请求进行咪咕账号注册并登录绑定 try: if platform in ['qq', 'weixin'] and user: password = '******' % (openid[-4:]) ret = Migu.center_register(open_id, password, const.CENTER_ACCOUNT_INDIV) if not isinstance(ret, error.ApiError): openid = Migu.get_identityid( open_id, password, const.CENTER_ACCOUNT_INDIV) if not isinstance(openid, error.ApiError): if not User.get_platform_user('migu', openid): info = {'partner_migu': {'id': openid}} user.update_model({'$set': info}) except: pass if not user: return error.LoginFailed ut = User.gen_token(str(user._id)) return {'user': user.format(include_fields=['passid']), 'ut': ut}