Пример #1
0
def send_activation_mail(user_email, customer_user_id, customer_user_auth_id):
    """发送邮箱账号激活邮件
    :param user_email: 用户邮箱地址
    :param customer_user_id: 用户ID
    :param customer_user_auth_id: 用户邮箱权限ID
    :return:
    """
    send_result = False
    try:
        mail_subject = "智量酷邮箱账号激活"
        mail_content = "点击此链接完成激活,"
        activation_link = "http://www.zhiliangku.com/customuser/activation?hash="
        email_str = "|".join(
            [user_email,
             str(customer_user_id),
             str(customer_user_auth_id)])
        pycrypt_obj = PyCrypt(CryptKey)
        crypt_email = pycrypt_obj.encrypt(email_str)
        mail_content = "".join([mail_content, activation_link, crypt_email])

        send_result = sendmail(user_email, mail_subject, mail_content)
    except:
        traceback.print_exc()
        logging.getLogger().error(traceback.format_exc())
    finally:
        return send_result
Пример #2
0
    def post(self, request, *args, **kwargs):
        result_dict = {"msg": "短信找回密码失败", "err": 1, "data": {}}
        try:
            param_dict = json.loads(request.body)
            phone = param_dict.get("phone")
            verify_code = param_dict.get("verify_code")  # 验证码
            new_password = param_dict.get("new_password")

            # 校验验证码
            valid_filter = {
                "phone": phone,
                "is_use": False,
                "code": verify_code,
                "expire_time__gt": timezone.now(),
            }
            is_valid = VerifyCode.objects.filter(**valid_filter)
            if not is_valid.exists():
                result_dict["err"] = 0
                result_dict["msg"] = "无效的验证码"
            else:
                filter_dict = {
                    "identifier": phone,
                    "identity_type": "phone",
                }
                customuserauths_objs = CustomUserAuths.objects.filter(
                    **filter_dict)
                if customuserauths_objs.exists():
                    pycrypt_obj = PyCrypt(CryptKey)
                    crypt_password = pycrypt_obj.encrypt(new_password)
                    update_filter = {
                        "custom_user_id":
                        customuserauths_objs.first().custom_user_id,
                        "identity_type__in": ["phone", "email"],
                    }
                    update_result = CustomUserAuths.objects.filter(
                        **update_filter).update(credential=crypt_password)
                    if update_result:
                        result_dict["err"] = 0
                        result_dict["msg"] = "密码重置成功"
                else:
                    result_dict["msg"] = "用户账户不存在"

        except:
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
            result_dict["err"] = 1
            result_dict["msg"] = '短信找回密码异常, %s' % traceback.format_exc()
        finally:
            return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #3
0
 def get(self, request, *args, **kwargs):
     result_dict = {"msg": "邮箱激活失败。", "err": 1, "data": {}}
     try:
         hash_str = request.GET.get("hash")
         pycrypt_obj = PyCrypt(CryptKey)
         crypt_str = pycrypt_obj.decrypt(hash_str)
         user_info_list = crypt_str.split("|")
         if len(user_info_list) == 3:
             user_email = user_info_list[0]
             customer_user_id = user_info_list[1]
             customer_user_auth_id = user_info_list[2]
             filter_dict = {
                 "id": customer_user_auth_id,
                 "custom_user_id": customer_user_id,
                 "identity_type": "email",
                 "identifier": user_email,
             }
             customuserauths_obj = CustomUserAuths.objects.filter(
                 **filter_dict)
             if customuserauths_obj.exists():
                 update_result = customuserauths_obj.update(status=True)
                 if update_result:
                     result_dict["err"] = 0
                     result_dict["msg"] = "邮箱激活成功"
             else:
                 result_dict["err"] = 2
                 result_dict["msg"] = "待激活邮箱账户不存在"
         else:
             result_dict["err"] = 5
             result_dict["msg"] = "邮箱激活参数错误"
     except:
         traceback.print_exc()
         logging.getLogger().error(traceback.format_exc())
         result_dict["err"] = 1
         result_dict["msg"] = '通过邮箱激活账户异常, %s' % traceback.format_exc()
     finally:
         return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #4
0
    def post(self, request, *args, **kwargs):
        result_dict = {
            "err": 1,
            "msg": "修改失败",
        }
        try:
            param_dict = json.loads(request.body)
            custom_user_id = param_dict.get('custom_user_id', 0)  # 用户ID
            old_password = param_dict.get('old_password', "")  # 旧密码
            password = param_dict.get('password', "")  # 新密码

            filter_param = {
                "custom_user_id__id": custom_user_id,
                "identity_type__in": ["email", "phone"]
            }
            customuserauths = CustomUserAuths.objects.filter(**filter_param)
            if customuserauths.exists():
                # 比对旧密码
                pycrypt_obj = PyCrypt(CryptKey)
                crypt_password = pycrypt_obj.encrypt(old_password)

                if customuserauths.filter(credential=crypt_password).exists():
                    new_crypt_password = pycrypt_obj.encrypt(password)
                    customuserauths.update(credential=new_crypt_password)
                    result_dict["err"] = 0
                    result_dict["msg"] = "成功重置密码"
                else:
                    result_dict["msg"] = "旧密码错误"
            else:
                result_dict["msg"] = "未绑定邮箱/手机账号"
        except:
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
            result_dict["msg"] = traceback.format_exc()
        finally:
            return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #5
0
    def post(self, request, *args, **kwargs):
        result_dict = {"msg": "找回密码邮箱验证信息发送失败", "err": 1, "data": {}}
        try:
            param_dict = json.loads(request.body)
            email = param_dict.get("email")
            filter_dict = {
                "identifier": email,
                "identity_type": "email",
            }
            customuserauths_objs = CustomUserAuths.objects.filter(
                **filter_dict)
            if customuserauths_objs.exists():
                mail_subject = "智量酷邮箱密码找回"
                mail_content = "点击此链接完成密码找回,"
                activation_link = "http://www.zhiliangku.com/customuser/retrieve_password_by_email?hash="
                pycrypt_obj = PyCrypt(CryptKey)
                crypt_email = pycrypt_obj.encrypt(email)
                mail_content = "".join(
                    [mail_content, activation_link, crypt_email])

                send_result = sendmail(email, mail_subject, mail_content)
                if not send_result:
                    result_dict["msg"] = "邮箱密码找回链接发送失败"
                else:
                    result_dict["msg"] = "邮箱密码找回链接发送成功"
                    result_dict["err"] = 0
            else:
                result_dict["msg"] = "账户不存在"

        except:
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
            result_dict["err"] = 1
            result_dict["msg"] = '找回密码邮箱验证信息发送异常, %s' % traceback.format_exc()
        finally:
            return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #6
0
    def post(self, request, *args, **kwargs):
        result_dict = {
            "msg": "短信找回密码失败",
            "err": 1,
        }
        try:
            param_dict = json.loads(request.body)
            email_hash = param_dict.get("hash")
            new_password = param_dict.get("password")
            pycrypt_obj = PyCrypt(CryptKey)
            email = pycrypt_obj.decrypt(email_hash)
            filter_dict = {
                "identifier": email,
                "identity_type": "email",
            }
            customuserauths_objs = CustomUserAuths.objects.filter(
                **filter_dict)
            if customuserauths_objs.exists():
                pycrypt_obj = PyCrypt(CryptKey)
                crypt_password = pycrypt_obj.encrypt(new_password)
                update_filter = {
                    "custom_user_id":
                    customuserauths_objs.first().custom_user_id,
                    "identity_type__in": ["phone", "email"],
                }
                update_result = CustomUserAuths.objects.filter(
                    **update_filter).update(credential=crypt_password)
                if update_result:
                    result_dict["err"] = 0
                    result_dict["msg"] = "密码重置成功"
            else:
                result_dict["msg"] = "用户账户不存在"

        except:
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
            result_dict["err"] = 1
            result_dict["msg"] = '邮箱找回密码异常, %s' % traceback.format_exc()
        finally:
            return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #7
0
    def post(self, request, *args, **kwargs):
        result_dict = {
            "err": 0,
            "msg": "success",
        }
        try:
            param_dict = json.loads(request.body)
            custom_user_id = param_dict.get('custom_user_id', 0)  # 用户ID
            phone = param_dict.get('phone', "")  # 手机号
            password = param_dict.get('password')  # 密码
            verify_code = param_dict.get("verify_code")  # 验证码

            # 校验验证码
            valid_filter = {
                "phone": phone,
                "is_use": False,
                "code": verify_code,
                "expire_time__gt": timezone.now(),
            }
            verifycodes = VerifyCode.objects.filter(**valid_filter)
            if not verifycodes.exists():
                result_dict["err"] = 7
                result_dict["msg"] = "无效的验证码"
                return
            else:
                VerifyCode.objects.filter(phone=phone).delete()

            filter_param = {
                "custom_user_id__id": custom_user_id,
                "identity_type": "email"
            }
            customuserauths = CustomUserAuths.objects.filter(**filter_param)
            filter_param.update({"identity_type": "phone"})
            customuserauths_phone = CustomUserAuths.objects.filter(
                **filter_param)

            # 有邮箱账号,没有手机账号
            if customuserauths.exists() and not customuserauths_phone.exists():
                credential = customuserauths.first().credential

                user_auth_dict = {
                    "custom_user_id":
                    CustomUser.objects.get(id=custom_user_id),
                    "identity_type": "phone",
                    "identifier": phone,
                    "credential": credential,  # 密码凭证
                    "status": False,
                }

                obj = CustomUserAuths.objects.create(**user_auth_dict)
            elif customuserauths_phone.exists():
                obj = customuserauths_phone.update(identifier=phone)
            else:
                pycrypt_obj = PyCrypt(CryptKey)
                crypt_password = pycrypt_obj.encrypt(password)
                user_auth_dict = {
                    "custom_user_id":
                    CustomUser.objects.get(id=custom_user_id),
                    "identity_type": "phone",
                    "identifier": phone,
                    "credential": crypt_password,  # 密码凭证
                }

                obj = CustomUserAuths.objects.create(**user_auth_dict)
            if not obj:
                result_dict["err"] = 1
                result_dict["msg"] = "手机账号绑定失败"
        except:
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
            result_dict["err"] = 1
            result_dict["msg"] = traceback.format_exc()
        finally:
            return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #8
0
    def post(self, request, *args, **kwargs):
        result_dict = {
            "err": 0,
            "msg": "success",
        }
        try:
            param_dict = json.loads(request.body)
            custom_user_id = param_dict.get('custom_user_id', 0)  # 用户ID
            email = param_dict.get('email', "")  # 邮箱地址
            password = param_dict.get('password')  # 密码

            filter_param = {
                "custom_user_id__id": custom_user_id,
                "identity_type": "phone"
            }
            customuserauths = CustomUserAuths.objects.filter(**filter_param)
            filter_param.update({"identity_type": "email"})
            customuserauths_email = CustomUserAuths.objects.filter(
                **filter_param)

            is_mail = False
            auth_id = 0

            # 有手机账号,没有邮箱账号
            if customuserauths.exists() and not customuserauths_email.exists():
                credential = customuserauths.first().credential

                user_auth_dict = {
                    "custom_user_id":
                    CustomUser.objects.get(id=custom_user_id),
                    "identity_type": "email",
                    "identifier": email,
                    "credential": credential,  # 密码凭证
                    "status": False,
                }

                obj = CustomUserAuths.objects.create(**user_auth_dict)
                if obj:
                    auth_id = obj.id
                    is_mail = True
            elif customuserauths_email.exists():
                rows = customuserauths_email.update(identifier=email,
                                                    status=False)
                if rows:
                    auth_id = customuserauths_email.first().id
                    is_mail = True
            else:
                pycrypt_obj = PyCrypt(CryptKey)
                crypt_password = pycrypt_obj.encrypt(password)
                user_auth_dict = {
                    "custom_user_id":
                    CustomUser.objects.get(id=custom_user_id),
                    "identity_type": "email",
                    "identifier": email,
                    "credential": crypt_password,  # 密码凭证
                    "status": False,
                }

                obj = CustomUserAuths.objects.create(**user_auth_dict)
                if obj:
                    auth_id = obj.id
                    is_mail = True

            if is_mail and auth_id:
                send_result = send_activation_mail(email, custom_user_id,
                                                   auth_id)
                if not send_result:
                    result_dict["err"] = 1
                    result_dict["msg"] = "激活邮件发送失败"
            else:
                result_dict["err"] = 1
                result_dict["msg"] = "邮箱账号绑定失败"
        except:
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
            result_dict["err"] = 1
            result_dict["msg"] = traceback.format_exc()
        finally:
            return HttpResponse(json.dumps(result_dict, ensure_ascii=False))
Пример #9
0
    def post(self, request, *args, **kwargs):
        result_dict = {"msg": "注册失败", "err": 1, "data": {}}
        token = ""
        try:
            param_dict = json.loads(request.body)
            username = param_dict.get("username")
            password = param_dict.get("password")
            verify_code = param_dict.get("verify_code")  # 验证码

            is_mail = IsMail().ismail(username)
            is_cellphone = IsCellphone().iscellphone(username)

            # 权限类型
            identity_type = ""
            if is_mail:
                identity_type = "email"

            if is_cellphone:
                identity_type = "phone"

                # 校验验证码
                valid_filter = {
                    "phone": username,
                    "is_use": False,
                    "code": verify_code,
                    "expire_time__gt": timezone.now(),
                }
                verifycodes = VerifyCode.objects.filter(**valid_filter)
                if not verifycodes.exists():
                    result_dict["err"] = 7
                    result_dict["msg"] = "无效的验证码"
                    return
                else:
                    VerifyCode.objects.filter(phone=username).delete()

            # 校验是否有权限信息
            custom_user_auths = CustomUserAuths.objects.filter(
                identity_type=identity_type, identifier=username)

            # 已经注册
            if custom_user_auths.exists():
                result_dict["msg"] = "已经注册过账号,请直接登录"
                result_dict["err"] = 4
            elif identity_type:
                create_user = CustomUser.objects.create(nickname=username,
                                                        role=0)
                if create_user:
                    pycrypt_obj = PyCrypt(CryptKey)
                    crypt_password = pycrypt_obj.encrypt(password)
                    user_auth_dict = {
                        "custom_user_id": create_user,
                        "identity_type": identity_type,
                        "identifier": username,
                        "credential": crypt_password,  # 密码凭证
                    }
                    if is_mail:
                        user_auth_dict.update({"status":
                                               False})  # 邮箱账户,默认未激活状态
                    create_auth = CustomUserAuths.objects.create(
                        **user_auth_dict)

                    if create_auth:
                        # 生成token
                        token = get_validate(username, create_user.id, 0,
                                             CryptKey)
                        result_dict["err"] = 0
                        result_dict["msg"] = "success"
                        # result_dict["data"]["token"] = token
                        result_dict["data"]["user"] = {
                            "uid":
                            create_user.id,
                            "nickname":
                            create_user.nickname,
                            "role":
                            create_user.role,
                            "avatar":
                            create_user.avatar.url
                            if create_user.avatar else "",
                            "position":
                            create_user.position
                            if create_user.position else "",
                        }

                        # user_dict = {
                        #     "nickname": create_user.nickname,
                        #     "uid": create_user.id,
                        #     "avatar": create_user.avatar.url if create_user.avatar else ""
                        # }
                        # request.session['token'] = token
                        # request.session['user'] = user_dict
                        # request.session['login'] = True

                        if is_mail:
                            send_result = send_activation_mail(
                                username, create_user.id, create_auth.id)
                            if not send_result:
                                result_dict["err"] = 1
                                result_dict["msg"] = "激活邮件发送失败"
                    else:
                        create_user.delete()
                        result_dict["msg"] = "用户权限添加失败"
        except:
            result_dict["msg"] = traceback.format_exc()
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
        finally:
            res = HttpResponse(json.dumps(result_dict, ensure_ascii=False))
            res.set_cookie("token", token)
            return res
Пример #10
0
    def post(self, request, *args, **kwargs):
        result_dict = {"msg": "", "err": 1, "data": {}}
        token = ""
        try:
            param_dict = json.loads(request.body)
            username = param_dict.get("username")
            password = param_dict.get("password")

            is_mail = IsMail().ismail(username)
            is_cellphone = IsCellphone().iscellphone(username)

            # 权限类型判断
            identity_type = ""
            if is_mail:
                identity_type = "email"
            if is_cellphone:
                identity_type = "phone"

            # 校验是否有权限信息
            custom_user_auths = CustomUserAuths.objects.filter(
                identity_type=identity_type, identifier=username)
            if not custom_user_auths.exists():
                result_dict["msg"] = "您还没有账号,请先注册"
                result_dict["err"] = 2
            else:
                custom_user_auth = custom_user_auths[0]
                if custom_user_auth.status:
                    pycrypt_obj = PyCrypt(CryptKey)
                    crypt_password = pycrypt_obj.encrypt(password)
                    custom_user_pwd = custom_user_auth.credential  # 密码凭证
                    custom_user_id = custom_user_auth.custom_user_id.id  # 用户ID
                    custom_user_role = custom_user_auth.custom_user_id.role  # 用户角色
                    if custom_user_pwd != crypt_password:
                        result_dict["msg"] = "账号或密码错误"
                        result_dict["err"] = 3
                    else:
                        token = get_validate(username, custom_user_id,
                                             custom_user_role, CryptKey)
                        result_dict["msg"] = "success"
                        result_dict["err"] = 0
                        # result_dict["data"]["token"] = token
                        result_dict["data"]["user"] = {
                            "uid":
                            custom_user_auth.custom_user_id.id,
                            "nickname":
                            custom_user_auth.custom_user_id.nickname,
                            "role":
                            custom_user_auth.custom_user_id.role,
                            "avatar":
                            custom_user_auth.custom_user_id.avatar.url
                            if custom_user_auth.custom_user_id.avatar else "",
                            "position":
                            custom_user_auth.custom_user_id.position if
                            custom_user_auth.custom_user_id.position else "",
                        }

                        # user_dict = {
                        #     "nickname": custom_user_auth.custom_user_id.nickname,
                        #     "uid": custom_user_auth.custom_user_id.id,
                        #     "avatar": custom_user_auth.custom_user_id.avatar.url if custom_user_auth.custom_user_id.avatar else ""
                        # }
                        # request.session['token'] = token
                        # request.session['user'] = user_dict
                        # request.session['login'] = True
                else:
                    result_dict["msg"] = "账号未激活"
                    result_dict["err"] = 6
        except:
            result_dict["msg"] = traceback.format_exc()
            traceback.print_exc()
            logging.getLogger().error(traceback.format_exc())
        finally:
            res = HttpResponse(json.dumps(result_dict, ensure_ascii=False))
            res.set_cookie("token", token)
            return res