def category_edit(user_id=None):

    if user_id is None:
        user_id = current_user.str_id
    tid = request.argget.all('id')
    ntype = request.argget.all('type')
    name = request.argget.all('name')
    # theme_name = get_config("theme", "CURRENT_THEME_NAME")
    theme_name = g.get_config("theme", "CURRENT_THEME_NAME")
    s1, v = short_str_verifi(name, "class_name")
    s2, r2 = arg_verify(reqargs=[
        (gettext("name"), name),
    ],
                        required=True,
                        max_len=int(get_config("category",
                                               "CATEGORY_MAX_LEN")))
    if not s1:
        data = {"msg": v, "msg_type": "w", "custom_status": 422}
    elif not s2:
        data = r2
    elif mdbs["web"].db.theme_category.find_one({
            "_id": {
                "$ne": ObjectId(tid)
            },
            "type": ntype,
            "user_id": user_id,
            "theme_name": theme_name,
            "name": name
    }):
        data = {
            "msg": gettext("Name already exists"),
            "msg_type": "w",
            "custom_status": 403
        }
    else:
        r = mdbs["web"].db.theme_category.update_one(
            {
                "_id": ObjectId(tid),
                "user_id": user_id
            }, {"$set": {
                "name": name
            }})
        if r.modified_count:
            update_media_category_name.apply_async(kwargs={
                "category_id": tid,
                "new_name": name
            })
            data = {
                "msg": gettext("Modify the success"),
                "msg_type": "s",
                "custom_status": 201
            }
        else:
            data = {
                "msg": gettext("No modification"),
                "msg_type": "w",
                "custom_status": 400
            }
    data["theme_name"] = theme_name
    return data
Exemple #2
0
def category_add(user_id=None):

    if user_id is None:
        user_id = current_user.str_id

    ntype = request.argget.all('type')
    name = request.argget.all('name', '')

    s, r = arg_verify([(gettext("category type"), ntype)],
                      only=get_config("category", "CATEGORY_TYPE").values())
    if not s:
        return r
    s1, v = short_str_verifi(name, "class_name")
    s2, r2 = arg_verify(
        reqargs=[
            (gettext("name"), name), ], required=True, max_len=int(
            get_config(
                "category", "CATEGORY_MAX_LEN")))
    if not s1:
        data = {"msg": v, "msg_type": "w", "http_status": 422}
    elif not s2:
        data = r2
    elif mdb_web.db.category.find_one({"type": ntype, "user_id": user_id, "name": name}):
        data = {
            "msg": gettext("Name already exists"),
            "msg_type": "w",
            "http_status": 403}
    else:
        mdb_web.db.category.insert_one(
            {"type": ntype, "user_id": user_id, "name": name})
        data = {
            "msg": gettext("Add a success"),
            "msg_type": "s",
            "http_status": 201}
    return data
Exemple #3
0
def category_edit(user_id=None):

    if user_id == None:
        user_id = current_user.str_id
    id = request.argget.all('id')
    ntype = request.argget.all('type')
    name = request.argget.all('name')

    s1, v = short_str_verifi(name, "class_name")
    s2, r2 = arg_verify(reqargs=[
        (gettext("name"), name),
    ],
                        required=True,
                        max_len=int(get_config("category",
                                               "CATEGORY_MAX_LEN")))
    if not s1:
        data = {"msg": v, "msg_type": "w", "http_status": 422}
    elif not s2:
        data = r2
    elif mdb_web.db.category.find_one({
            "_id": {
                "$ne": ObjectId(id)
            },
            "type": ntype,
            "user_id": user_id,
            "name": name
    }):
        data = {
            "msg": gettext("Name already exists"),
            "msg_type": "w",
            "http_status": 403
        }
    else:
        r = mdb_web.db.category.update_one(
            {
                "_id": ObjectId(id),
                "user_id": user_id
            }, {"$set": {
                "name": name
            }})
        if r.modified_count:
            update_media_category_name(id, name)
            data = {
                "msg": gettext("Modify the success"),
                "msg_type": "s",
                "http_status": 201
            }
        else:
            data = {
                "msg": gettext("No modification"),
                "msg_type": "w",
                "http_status": 400
            }
    return data
Exemple #4
0
def user_basic_edit():
    """
    用户基础设置编辑
    :return:
    """
    username = request.argget.all('username')
    custom_domain = request.argget.all('custom_domain', '')
    editor = request.argget.all('editor')
    # username
    s, r = arg_verify(reqargs=[(gettext("username"), username)], required=True)
    if not s:
        return r
    r, s = short_str_verifi(username, "username")
    if not r:
        data = {'msg': s, 'msg_type': "e", "custom_status": 422}
        return data

    update_data = {}
    # custom_domain
    if mdbs["user"].db.user.find_one({
            "_id": current_user.id,
            "custom_domain": -1
    }) and custom_domain.strip():
        r, s = ver_user_domainhacks(custom_domain)
        if r:
            update_data["custom_domain"] = custom_domain
        else:
            data = {'msg': s, 'msg_type': "e", "custom_status": 422}
            return data

    update_data["username"] = username
    # editor
    if editor and editor in ['rich_text', 'markdown']:
        update_data["editor"] = editor
    else:
        data = {
            'msg': gettext("The editor saves failure"),
            'msg_type': "e",
            "custom_status": 400
        }
        return data

    update_data["update_time"] = time.time()

    # 是否被使用
    if mdbs["user"].db.user.find_one({
            "_id": {
                "$ne": current_user.id
            },
            "username": username
    }):
        data = {
            'msg': gettext("Name has been used"),
            'msg_type': "w",
            "custom_status": 403
        }
    elif "custom_domain" in update_data.keys() \
            and mdbs["user"].db.user.find_one({"_id": {"$ne": current_user.id}, "custom_domain": custom_domain}):
        data = {
            'msg': gettext("Domain has been used"),
            'msg_type': "w",
            "custom_status": 403
        }
    elif "custom_domain" in update_data.keys(
    ) and mdbs["user"].db.user.find_one({
            "_id": current_user.id,
            "custom_domain": {
                "$ne": -1
            }
    }):
        data = {
            'msg': gettext("Personality custom domain cannot be modified"),
            'msg_type': "w",
            "custom_status": 400
        }
    else:
        r = update_one_user(user_id=current_user.str_id,
                            updata={"$set": update_data})
        if not r.modified_count:
            data = {
                'msg': gettext("No changes"),
                'msg_type': "w",
                "custom_status": 201
            }
        else:
            delete_user_info_cache(user_id=current_user.str_id)
            data = {
                'msg': gettext("Update success"),
                'msg_type': "s",
                "custom_status": 201
            }

    return data
Exemple #5
0
def comment_issue():

    if not get_config("comment", "OPEN_COMMENT"):
        data = {
            "msg": gettext("Comment feature is not open"),
            "msg_type": "w",
            "custom_status": 401
        }
        return data

    target_id = request.argget.all('target_id')  # 目标ID指的是什么事件的评论
    target_type = request.argget.all('target_type', "post")
    content = request.argget.all('content')
    reply_id = request.argget.all('reply_id')  # 回复哪条评论
    reply_user_id = request.argget.all('reply_user_id')  # 回复的评论的用户ID
    reply_username = request.argget.all('reply_username')  # 回复的评论的用户名

    s, r = arg_verify(reqargs=[(gettext("comment"), content)],
                      min_len=1,
                      max_len=int(get_config("comment", "MAX_LEN")))
    if not s:
        return r
    s, r = arg_verify(reqargs=[("target_id", target_id),
                               ("target_type", target_type)],
                      required=True)
    if not s:
        return r

    if reply_id:
        s, r = arg_verify(reqargs=[("reply_user_id", reply_user_id),
                                   ("reply_username", reply_username)],
                          required=True)
        if not s:
            return r
    """
    查看最后一次评论时间
    """
    tquery = {
        "issue_time": {
            "$gt": time.time() - int(get_config("comment", "INTERVAL"))
        }
    }
    if current_user.is_authenticated:
        user_id = current_user.str_id
        username = current_user.username
        email = None
        tquery["user_id"] = user_id

    elif get_config("comment", "TRAVELER_COMMENT"):
        user_id = None
        username = request.argget.all('username')
        email = request.argget.all('email')
        # 用户名格式验证
        r, s = short_str_verifi(username)
        if not r:
            data = {'msg': s, 'msg_type': "e", "custom_status": 422}
            return data

        # 邮箱格式验证
        r, s = email_format_ver(email)
        if not r:
            data = {'msg': s, 'msg_type': "e", "custom_status": 422}
            return data

        tquery["email"] = email

    else:
        data = {
            "msg":
            gettext(
                "Guest reviews feature is not open, please login account comments"
            ),
            "msg_type":
            "w",
            "custom_status":
            401
        }
        return data

    if mdbs["web"].db.comment.find(tquery).count(True) >= int(
            get_config("comment", "NUM_OF_INTERVAL")):
        # 频繁评论
        data = {
            "msg": gettext("You comment too often and come back later"),
            "msg_type": "e",
            "custom_status": 400
        }
        return data

    target = None
    if target_type == "post":
        target = mdbs["web"].db.post.find_one({
            "_id": ObjectId(target_id),
            "issued": {
                "$in": [1, True]
            }
        })
        if not target:
            data = {
                "msg":
                gettext("Articles do not exist or have not been published"),
                "msg_type": "w",
                "custom_status": 400
            }
            return data

        target_user_id = str(target["user_id"])
        target_brief_info = target["title"]

    if not target:
        data = {
            "msg": gettext("Your comment goal does not exist"),
            "msg_type": "w",
            "custom_status": 400
        }
        return data

    issue_time = time.time()
    # 自动审核内容
    r = content_inspection_text(content)

    audit_score = r["score"]
    audit_label = r["label"]
    if r["label"] == "detection_off" or ("suggestion" in r
                                         and r["suggestion"] == "review"):
        # 未开启审核或无法自动鉴别, 等待人工审核
        audited = 0
        audit_way = "artificial"
    elif r["label"] == "no_plugin":
        # 没有检查插件
        audited = 0
        audit_way = "artificial"

    else:
        audit_label = r["label"]
        audited = 1
        audit_way = "auto"

    comment = {
        "target_id": str(target_id),
        "target_user_id": target_user_id,
        "target_brief_info": target_brief_info,
        "type": target_type,
        "user_id": user_id,
        "username": username,
        "email": email,
        "content": content,
        "issued": 1,
        "audited": audited,
        "audit_score": audit_score,
        "audit_label": audit_label,
        "audit_way": audit_way,
        "audit_user_id": None,
        "issue_time": issue_time,
        "word_num": len(content),
        "is_delete": 0,
        "like_user_id": [],
        "like": 0
    }

    if reply_id:
        comment["reply_id"] = reply_id
        comment["reply_user_id"] = reply_user_id
        comment["reply_username"] = reply_username

    r = mdbs["web"].db.comment.insert_one(comment)

    # 如果已审核, 并且违规分数高于正常
    if audited and audit_score >= get_config("content_inspection",
                                             "ALLEGED_ILLEGAL_SCORE"):
        # 通知评论不通过
        msg_content = {"text": content}
        insert_user_msg(
            user_id=user_id,
            ctype="notice",
            label="audit_failure",
            title=gettext("[Label:{}]Comment on alleged violations").format(
                audit_label),
            content=msg_content,
            target_id=str(r.inserted_id),
            target_type="comment")

    elif audit_score < get_config("content_inspection",
                                  "ALLEGED_ILLEGAL_SCORE"):
        # 更新文章中的评论数目
        if target_type == "post":
            mdbs["web"].db.post.update_one({"_id": ObjectId(target_id)},
                                           {"$inc": {
                                               "comment_num": 1
                                           }})

        if current_user.is_authenticated:
            # 评论正常才通知被评论用户
            user_ids = [target_user_id]
            if reply_id:
                user_ids.append(reply_user_id)
            user_ids = list(set(user_ids))
            if user_id in user_ids:
                user_ids.remove(user_id)

            msg_content = {
                "id": str(r.inserted_id),
                "reply_id": reply_id,
                "reply_user_id": reply_user_id,
                "reply_username": reply_username,
                "user_id": user_id,
                "username": username,
                "text": content
            }
            insert_user_msg(user_id=user_ids,
                            ctype="notice",
                            label="comment",
                            title=target_brief_info,
                            content=msg_content,
                            target_id=target_id,
                            target_type=target_type)

    if current_user.is_authenticated:
        data = {
            "msg": gettext("Successful reviews"),
            "msg_type": "s",
            "custom_status": 201
        }
    else:
        data = {
            "msg": gettext("Success back, waiting for the system audit."),
            "msg_type": "s",
            "custom_status": 201
        }

    return data
Exemple #6
0
def p_sign_up(username, password, password2, code, email=None, mobile_phone_number=None):
    '''
    普通用户注册函数
    :return:
    '''
    data = {}
    if current_user.is_authenticated:
        data['msg'] = gettext("Is logged in")
        data["msg_type"] = "s"
        data["http_status"] = 201
        data['to_url'] = request.argget.all('next') or get_config("login_manager", "LOGIN_IN_TO")
        return data

    # 用户名格式验证
    s1, r1 = short_str_verifi(username, project="username")
    # 密码格式验证
    s2, r2 = password_format_ver(password)
    if not s1:
        data = {'msg':r1, 'msg_type':"e", "http_status":422}
    elif mdb_user.db.user.find_one({"username": username}):
        # 是否存在用户名
        data = {'msg': gettext("Name has been used"), 'msg_type': "w", "http_status": 403}
    elif not s2:
        data = {'msg': r2, 'msg_type': "e", "http_status": 400}
        return data
    elif password2 != password:
        # 检验两次密码
        data = {'msg': gettext("The two passwords don't match"), 'msg_type': "e", "http_status": 400}
    if data:
        return data

    if email:
        # 邮件注册
        # 邮箱格式验证
        s, r = email_format_ver(email)
        if not s:
            data = {'msg':r, 'msg_type':"e", "http_status":422}
        elif mdb_user.db.user.find_one({"email": email}):
            # 邮箱是否注册过
            data = {'msg': gettext("This email has been registered in the site oh, please login directly."),
                    'msg_type': "w", "http_status": 403}
        if data:
            return data

        # 检验验证码
        r = verify_code(code=code, email=email)
        if not r:
            data = {'msg': gettext("Verification code error"), 'msg_type': "e", "http_status": 401}
            return data

    elif mobile_phone_number:
        # 手机注册
        s, r = mobile_phone_format_ver(mobile_phone_number)
        if not s:
            data = {'msg': r, 'msg_type': "e", "http_status": 422}
        elif mdb_user.db.user.find_one({"mphone_num": mobile_phone_number}):
            # 手机是否注册过
            data = {'msg': gettext("This number has been registered in the site oh, please login directly."),
                    'msg_type': "w", "http_status": 403}

        if data:
            return data

        # 检验验证码
        r = verify_code(code=code, tel_number=True)
        if not r:
            data = {'msg': gettext("Verification code error"), 'msg_type': "e", "http_status": 401}
            return data

    if not data:
        # 用户基本信息
        role_id = mdb_user.db.role.find_one({"default":{"$in":[True, 1]}})["_id"]
        user = user_model(username=username,
                          email=email,
                          mphone_num = mobile_phone_number,
                          password=password,
                          custom_domain=-1,
                          role_id=str(role_id),
                          active=True)
        r = mdb_user.db.user.insert_one(user)

        if r.inserted_id:
            if email:
                # 发送邮件
                subject = gettext("Registration success notification")
                body = "Welcome to register <b>{}</b>.<br><a>{}</a> registered the account successfully.".format(
                    get_config("site_config", "APP_NAME"),
                    email
                )
                data = {"title": subject,
                        "body": body,
                        "other_info": gettext("End"),
                        }
                html = get_email_html(data)
                send_email(subject=subject,
                           recipients=[email],
                           html_msg=html)
            elif mobile_phone_number:
                # 发送短信
                content = "[{}] Successful registration account.".format(
                    get_config("site_config", "APP_NAME"))
                send_mobile_msg(mobile_phone_number, content)

            data = {'msg':gettext('Registered successfully'),
                     'to_url':'/sign-in',
                    'msg_type':'s',"http_status":201}
        else:
            data = {'msg': gettext('Data saved incorrectly, please try again'),
                    'msg_type': 'e', "http_status": 201}
        return data

    return data
Exemple #7
0
def add_user():

    email = request.argget.all('email')
    mobile_phone_number = str_to_num(
        request.argget.all('mobile_phone_number', 0))
    username = request.argget.all('username', '').strip()
    password = request.argget.all('password', '').strip()
    password2 = request.argget.all('password2', '').strip()

    data = {}
    # 用户名格式验证
    s1, r1 = short_str_verifi(username, project="username")
    # 密码格式验证
    s2, r2 = password_format_ver(password)
    if not s1:
        data = {'msg': r1, 'msg_type': "e", "custom_status": 422}
    elif mdbs["user"].db.user.find_one({"username": username}):
        # 是否存在用户名
        data = {
            'msg': gettext("Name has been used"),
            'msg_type': "w",
            "custom_status": 403
        }
    elif not s2:
        data = {'msg': r2, 'msg_type': "e", "custom_status": 400}
        return data
    elif password2 != password:
        # 检验两次密码
        data = {
            'msg': gettext("The two passwords don't match"),
            'msg_type': "e",
            "custom_status": 400
        }
    if data:
        return data

    if email:
        # 邮件注册
        # 邮箱格式验证
        s, r = email_format_ver(email)
        if not s:
            data = {'msg': r, 'msg_type': "e", "custom_status": 422}
        elif mdbs["user"].db.user.find_one({"email": email}):
            # 邮箱是否注册过
            data = {
                'msg':
                gettext(
                    "This email has been registered in the site oh, please login directly."
                ),
                'msg_type':
                "w",
                "custom_status":
                403
            }
        if data:
            return data

    elif mobile_phone_number:
        # 手机注册
        s, r = mobile_phone_format_ver(mobile_phone_number)
        if not s:
            data = {'msg': r, 'msg_type': "e", "custom_status": 422}
        elif mdbs["user"].db.user.find_one({"mphone_num":
                                            mobile_phone_number}):
            # 手机是否注册过
            data = {
                'msg':
                gettext(
                    "This number has been registered in the site oh, please login directly."
                ),
                'msg_type':
                "w",
                "custom_status":
                403
            }

        if data:
            return data

    if not data:
        # 用户基本信息
        role_id = mdbs["user"].db.role.find_one(
            {"default": {
                "$in": [True, 1]
            }})["_id"]
        if not email:
            email = None
        if not mobile_phone_number:
            mobile_phone_number = None
        user = user_model(username=username,
                          email=email,
                          mphone_num=mobile_phone_number,
                          password=password,
                          custom_domain=-1,
                          role_id=str(role_id),
                          active=True,
                          is_adm_add_user=True)
        r = insert_one_user(updata=user)
        if r.inserted_id:
            if email:
                # 发送邮件
                subject = gettext("Registration success notification")
                body = [
                    gettext("Welcome to register {}.").format(
                        get_config("site_config", "APP_NAME")),
                    gettext("{} registered the account successfully.").format(
                        email)
                ]
                data = {
                    "title": subject,
                    "body": body,
                    "username": username,
                    "site_url": get_config("site_config", "SITE_URL")
                }
                html = get_email_html(data)

                msg = {
                    "subject": subject,
                    "recipients": [email],
                    "html_msg": html
                }
                send_email(msg=msg, ctype="nt")

            elif mobile_phone_number:
                # 发送短信
                content = gettext(
                    "[{}] Successful registration account.").format(
                        get_config("site_config", "APP_NAME"))
                send_mobile_msg(mobile_phone_number, content)

            data = {
                'msg': gettext('Added successfully'),
                'msg_type': 's',
                "custom_status": 201
            }
    return data
Exemple #8
0
def profile_update():
    '''
    用户信息更新
    :return:
    '''
    gender = request.argget.all('gender', 'secret')
    birthday = request.argget.all('birthday')
    homepage = request.argget.all('homepage')
    address = json_to_pyseq(request.argget.all('address', {}))
    info = request.argget.all('info')
    if len(birthday) != 8:
        data = {
            'msg':
            gettext("The date of birth requires an 8-digit date,Such as '{}'").
            format(time_to_utcdate(tformat="%Y%m%d")),
            'msg_type':
            "e",
            "http_status":
            400
        }
        return data
    birthday = int(birthday)

    s, r = arg_verify(reqargs=[(gettext(gettext("gender")), gender)],
                      only=["secret", "m", "f"])
    if not s:
        return r

    addr_keys = ['countries', 'provinces', 'city', 'district', 'detailed']
    for k, v in address.items():
        if not (k in addr_keys) or not isinstance(v, str):
            data = {
                'msg':
                gettext(
                    "Address format is not in conformity with the requirements"
                ),
                'msg_type':
                "e",
                "http_status":
                400
            }
            return data

    if homepage:
        s, r = url_format_ver(homepage)
        if not s:
            return {"msg": r, "msg_type": "w", "http_status": 403}

    s, r = short_str_verifi(short_str=info, allow_special_chart=True)
    if not s:
        data = {'msg': r, 'msg_type': "w", "http_status": 400}
        return data

    update_data = {
        'gender': gender,
        'homepage': homepage,
        'introduction': info,
        'birthday': birthday,
        'address': address
    }
    r = mdb_user.db.user.update_one({"_id": current_user.id},
                                    {"$set": update_data})
    if r.modified_count:
        # 清理user信息数据缓存
        delete_user_info_cache(user_id=current_user.str_id)
        data = {
            'msg': gettext("Update succeed"),
            'msg_type': "s",
            "http_status": 201
        }
    else:
        data = {
            'msg': gettext("No changes"),
            'msg_type': "w",
            "http_status": 201
        }
    return data