Beispiel #1
0
def get_display_setting():

    """
    :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0
    :return:
    """

    tid = request.argget.all("id")

    s, r = arg_verify([("id", tid)], required=True)
    if not s:
        return r

    data = {}
    theme_name = request.argget.all("theme_name")
    s, r = arg_verify([(gettext("theme name"), theme_name)], required=True)
    if not s:
        return r

    display_setting = mdbs["sys"].db.theme_display_setting.find_one(
        {"_id": ObjectId(tid),
         "theme_name": theme_name})
    if display_setting:
        display_setting["_id"] = str(display_setting["_id"])
        if "url" in display_setting and display_setting["url"]:
            display_setting["url"] = get_file_url(display_setting["url"])

    data["media"] = display_setting
    data["theme_name"] = theme_name
    return data
Beispiel #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
Beispiel #3
0
def get_display_settings():
    """
    :return:
    """

    keyword = request.argget.all("keyword")
    category_id = request.argget.all("category_id")
    ctype = request.argget.all("ctype")
    page = str_to_num(request.argget.all("page", 1))
    pre = str_to_num(request.argget.all("pre", 12))
    sort = json_to_pyseq(request.argget.all('sort'))
    theme_name = request.argget.all("theme_name")
    s, r = arg_verify([(gettext("type"), ctype)],
                      only=get_config("category", "CATEGORY_TYPE").values())
    if not s:
        return r

    s, r = arg_verify([(gettext("theme name"), theme_name)], required=True)
    if not s:
        return r

    data = {}
    if category_id:
        if category_id == "default":
            category_id = {"$in": [None, ""]}
        query = {"category_id": category_id, "type": ctype}
    else:
        query = {"type": ctype}

    if keyword:
        k_rule = {"$regex": keyword, "$options": "$i"}
        query["$or"] = [{"name": k_rule}, {"title": k_rule},
                        {"link": k_rule}, {"text": k_rule}]

    query["theme_name"] = theme_name
    # sort
    if sort:
        for i, srt in enumerate(sort):
            sort[i] = (list(srt.keys())[0], list(srt.values())[0])
    else:
        sort = [("time", -1)]

    display_settings = mdbs["sys"].db.theme_display_setting.find(query)
    data_cnt = display_settings.count(True)
    display_settings = list(display_settings.sort(
        sort).skip(pre * (page - 1)).limit(pre))
    for d in display_settings:
        d["_id"] = str(d["_id"])
        if "url" in d and d["url"]:
            d["url"] = get_file_url(d["url"])

    data["medias"] = datas_paging(
        pre=pre,
        page_num=page,
        data_cnt=data_cnt,
        datas=display_settings)
    data["theme_name"] = theme_name
    return data
Beispiel #4
0
def add_page():

    routing = request.argget.all('routing')
    content = request.argget.all('content', "")
    ctype = request.argget.all('type', 'html')

    s, r = arg_verify(reqargs=[(gettext("file type"), ctype)], only=["html"],
                      required=True)
    if not s:
        return r
    if ctype == "html":
        dirname = "pages"
    else:
        dirname = "static"

    regex_filter = r"(osr/|osr-admin/)"
    s, r = arg_verify(reqargs=[(gettext("routing"), routing)], required=True)
    if not s:
        data = r
    elif re.search(regex_filter, routing):
        data = {"msg":gettext("This route can not be used"), "msg_type":"w",
                "http_status":403}
    else:
        filename = os.path.split(routing)[-1]
        path = "{}/{}/{}/{}".format(THEME_TEMPLATE_FOLDER, get_config("theme", "CURRENT_THEME_NAME"),
                                    dirname, os.path.split(routing)[0]).replace("//", "/")

        # 是否存在同名的目录
        relative_path = "{}/{}".format(path, filename)
        if os.path.exists(relative_path):
            data = {"msg":gettext("This route can not be used"), "msg_type":"w",
                "http_status":403}
            return data

        # 是否存在同名的html文件
        file = "{}/{}.{}".format(path, filename, ctype)
        if os.path.exists(file):
            data = {"msg":gettext("Routing existing"), "msg_type":"w",
                "http_status":403}
            return data

        if not os.path.exists(path):
            os.makedirs(path)
        with open(file, "w") as wf:
            wf.write(content)

        # 记录
        mdb_sys.db.theme.update_one({"theme_name": get_config("theme", "CURRENT_THEME_NAME")},
                                    {"$addToSet":{"custom_pages":"{}.{}".format(filename, ctype)}},
                                    upsert=True)


        data = {"msg":gettext("Added successfully"), "msg_type":"s",
                "http_status":201, "url":"/{}".format(routing.strip("/"))}
    return data
Beispiel #5
0
def get_display_setting():
    '''
    :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0
    :return:
    '''

    user_id = 0
    id = request.argget.all("id")

    s, r = arg_verify([("id", id)], required=True)
    if not s:
        return r

    data = {}

    display_setting = mdb_sys.db.theme_display_setting.find_one({
        "_id":
        ObjectId(id),
        "user_id":
        user_id
    })
    if display_setting:
        display_setting["_id"] = str(display_setting["_id"])
        if "url" in display_setting and display_setting["url"]:
            display_setting["url"] = get_file_url(display_setting["url"])

    data["media"] = display_setting
    return data
Beispiel #6
0
def get_url():
    '''
    获取一个url信息
    :return:
    '''
    id = request.argget.all("id")

    s, r = arg_verify([("id", id)], required=True)
    if not s:
        return r

    url = mdb_sys.db.sys_urls.find_one({"_id": ObjectId(id)})
    if url:
        url["_id"] = str(url["_id"])
        if "OPTIONS" in url["methods"]:
            url["methods"].remove("OPTIONS")
        if "HEAD" in url["methods"]:
            url["methods"].remove("HEAD")
        data = {"url": url}
    else:
        data = {
            "msg": gettext("No relevant data found"),
            "msg_type": "w",
            "http_status": 404
        }
    return data
Beispiel #7
0
def user_edit():
    '''
    用户编辑
    :return:
    '''
    id = request.argget.all('id')
    role_id = request.argget.all('role_id')
    active = str_to_num(request.argget.all('active', 0))

    s, r = arg_verify(reqargs=[("id", id), ("role_id", role_id)], required=True)
    if not s:
        return r

    data = {'msg': gettext("Update success"), 'msg_type': "s", "http_status":201}
    update_data = {
        'role_id': role_id,
        'active': active,
    }
    user = mdb_user.db.user.find_one({"_id": ObjectId(id)})
    if user:
        # 权限检查
        current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)})
        edit_user_role = mdb_user.db.role.find_one({"_id": ObjectId(user["role_id"])})
        if edit_user_role \
                and get_num_digits(current_user_role["permissions"]) \
                <= get_num_digits(edit_user_role["permissions"]):
            # 没有权限修改
            data = {"msg_type": "w", "msg": gettext("No permission modification"),
                    "http_status":401}
            return data

    r = mdb_user.db.user.update_one({"_id": ObjectId(id)}, {"$set": update_data})
    if not r.modified_count:
        data = {'msg': gettext("No changes"), 'msg_type': "w", "http_status":201}
    return data
Beispiel #8
0
def ver_name(name, project=None):
    '''
    各种名字字符验证
    Character name to verify
    :param name:
    :return:
    '''

    s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True)
    if not s:
        return False, r["msg"]

    elif re.search(r"[\.\*#\?]+", name):
        return False, gettext(
            "The name format is not correct,You can't use '.','*','#','?'")
    elif current_user.is_authenticated and current_user.is_staff:
        return True, gettext("")

    if project:
        rules = mdb_sys.db.audit_rules.find({"project": project})
        for rule in rules:
            if re.search(r"^{}$".format(rule["rule"]), name):
                return False, gettext(
                    "Name is not legal, there is sensitive information")
    return True, gettext("")
Beispiel #9
0
def get_fans_users():
    """
    获取用户的粉丝
    :return:
    """
    user_id = request.argget.all("user_id")
    page = str_to_num(request.argget.all("page", 1))
    pre = str_to_num(request.argget.all("pre", 20))
    s, r = arg_verify(reqargs=[("user id", user_id)], required=True)
    if not s:
        return r
    data = {"users": []}
    fans = mdb_user.db.user_follow.find({"type": "account", "follow": user_id})
    data_cnt = fans.count(True)
    for user in fans.skip(pre * (page - 1)).limit(pre):
        s, r = get_user_public_info(
            user_id=user["user_id"],
            is_basic=False,
            current_user_isauth=current_user.is_authenticated)
        if s:
            data["users"].append(r)
    data["users"] = datas_paging(pre=pre,
                                 page_num=page,
                                 data_cnt=data_cnt,
                                 datas=data["users"])
    return data
def del_business():

    '''
    删除厂家
    :return:
    '''
    ids = json_to_pyseq(request.argget.all('ids'))
    s, r = arg_verify([(gettext("ids"), ids)], required=True)
    if not s:
        return r
    user_id = current_user.str_id
    obj_ids = []
    faied_cnt = 0
    for id in ids:
        if mdb_web.dbs["plug_warehouse_goods"].find_one({"business_id":id, "user_id":user_id}):
            faied_cnt += 1
            continue
        obj_ids.append(ObjectId(id))

    r = mdb_web.dbs["plug_warehouse_business"].delete_many({"_id": {"$in": obj_ids}, "user_id":user_id})
    if r.deleted_count:
        data = {"msg": gettext("Successfully deleted {} business").format(r.deleted_count), "msg_type": "s",
                "http_status": 204}
    else:
        data = {"msg": gettext("Failed to delete"), "msg_type": "w", "http_status": 400}

    if faied_cnt:
        data["msg"] = gettext("There are {} business below the goods, can not be deleted, can not be deleted").format(faied_cnt)
    return data
Beispiel #11
0
def audit_rule_add():

    project = request.argget.all('project')
    rule = request.argget.all('rule')

    reqargs = [(gettext("rule"), rule), ("project", project)]
    s, r = arg_verify(reqargs=reqargs, required=True)
    if not s:
        return r
    else:
        if mdbs["sys"].db.audit_rules.find_one({
                "project": project,
                "rule": rule
        }):
            data = {
                "msg": gettext("The rule already exists"),
                "msg_type": "w",
                "custom_status": 403
            }
        else:
            mdbs["sys"].db.audit_rules.insert_one({
                "rule": rule,
                "project": project,
                "time": time.time()
            })
            data = {
                "msg": gettext("Add a success"),
                "msg_type": "s",
                "custom_status": 201
            }
    return data
def del_goods():
    '''
    删除
    :return:
    '''
    ids = json_to_pyseq(request.argget.all('ids'))
    s, r = arg_verify([(gettext("ids"), ids)], required=True)
    if not s:
        return r
    user_id = current_user.str_id
    obj_ids = []
    for id in ids:
        obj_ids.append(ObjectId(id))
    r = mdb_web.dbs["plug_warehouse_goods"].delete_many({
        "_id": {
            "$in": obj_ids
        },
        "user_id": user_id
    })
    if r.deleted_count:
        data = {
            "msg":
            gettext("Successfully deleted {} goods").format(r.deleted_count),
            "msg_type": "s",
            "http_status": 204
        }
    else:
        data = {
            "msg": gettext("Failed to delete"),
            "msg_type": "w",
            "http_status": 400
        }
    return data
def add_business():

    '''
    添加厂家
    :return:
    '''
    goods_type_id = request.argget.all('goods_type_id')
    mobile_phone = request.argget.all('mobile_phone')
    addr = request.argget.all('addr')
    name = request.argget.all('name')
    s, r = arg_verify([(gettext("name"), name), (gettext("goods_type_id"), goods_type_id)],
                      required=True)
    if not s:
        return r

    user_id = current_user.str_id
    if mdb_web.dbs["plug_warehouse_business"].find_one({"name":name, "type_id":goods_type_id,"user_id":user_id}):
        data = {"msg": gettext("business already exists"), "msg_type": "w", "http_status": 403}
    else:
        up_data = {
            "name": name,
            "type_id":goods_type_id,
            "mobile_phone":mobile_phone,
            "addr":addr,
            "user_id": user_id
        }
        mdb_web.dbs["plug_warehouse_business"].insert(up_data)
        data = {"msg": gettext("Add business successfully"), "msg_type": "s", "http_status": 201}

    return data
Beispiel #14
0
def edit_static_file():
    """
    静态文件编辑, 如html文件
    :return:
    """
    filename = request.argget.all('filename', "index").strip("/")
    file_path = request.argget.all('file_path', "").strip("/")
    content = request.argget.all('content', "")
    theme_name = request.argget.all("theme_name")

    s, r = arg_verify([(gettext("theme name"), theme_name)], required=True)
    if not s:
        return r
    path = os.path.join(THEME_TEMPLATE_FOLDER, theme_name)
    file = "{}/{}/{}".format(path, file_path, filename)

    if not os.path.exists(file):
        data = {
            "msg":
            gettext("File does not exist can not be edited,'{}'").format(file),
            "msg_type":
            "w",
            "custom_status":
            404
        }
    else:
        with open(file, "w") as wf:
            wf.write(content)

        data = {
            "msg": gettext("Saved successfully"),
            "msg_type": "s",
            "custom_status": 201
        }
    return data
Beispiel #15
0
def update_user_msgs():
    """
    api更新消息
    :return:
    """
    ids = json_to_pyseq(request.argget.all("ids", []))
    status_update = request.argget.all("status_update")
    if status_update:
        s, r = arg_verify(reqargs=[("status_update", status_update)],
                          only=["have_read"])
        if not s:
            return r
    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)

    # 标记
    r = mdb_user.db.message.update_many({"_id": {
        "$in": ids
    }}, {"$set": {
        "status": status_update
    }})
    if r.modified_count:
        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
Beispiel #16
0
def start_plugin():
    """
    开启一个插件
    :return:
    """

    name = request.argget.all('name')
    s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True)
    if not s:
        return r
    find_query = {"plugin_name": name, "error": {"$in": [0, False]}}
    plugin = mdbs["sys"].db.plugin.find_one(find_query)
    if plugin:
        other_plugin = mdbs["sys"].db.plugin.find_one({
            "hook_name":
            plugin["hook_name"],
            "active": {
                "$in": [1, True]
            }
        })
        if other_plugin:
            data = {
                "msg":
                gettext("Plugin[{}] with similar functionality is in use,"
                        " please stop it first").format(
                            other_plugin["plugin_name"]),
                "msg_type":
                "w",
                "custom_status":
                400
            }
            return data
    r = mdbs["sys"].db.plugin.update_one(find_query, {"$set": {"active": 1}})
    register_r = plugin_manager.register_plugin(name)
    if r.modified_count and register_r:
        # 清除缓存
        r = mdbs["sys"].db.plugin.find_one({"plugin_name": name})
        if r:
            cache.delete_autokey(fun="get_plugin_info",
                                 db_type="redis",
                                 hook_name=r['hook_name'])

        data = {
            "msg": gettext("Plug-in activated successfully"),
            "msg_type": "s",
            "custom_status": 201
        }
    elif r.matched_count and register_r:
        data = {
            "msg": gettext("Plug-in is already activated"),
            "msg_type": "w",
            "custom_status": 400
        }
    else:
        data = {
            "msg": gettext("Plug-in activation failed"),
            "msg_type": "w",
            "custom_status": 400
        }
    return data
Beispiel #17
0
def stop_plugin():
    """
    停用一个插件
    :return:
    """

    name = request.argget.all('name')
    s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True)
    if not s:
        return r
    r = mdbs["sys"].db.plugin.update_one({"plugin_name": name},
                                         {"$set": {
                                             "active": 0
                                         }})
    if r.matched_count:
        # 清除缓存
        r = mdbs["sys"].db.plugin.find_one({"plugin_name": name})
        if r:
            cache.delete_autokey(fun="get_plugin_info",
                                 db_type="redis",
                                 hook_name=r['hook_name'])

        data = {
            "msg": gettext("Plug-in stopped successfully"),
            "msg_type": "s",
            "custom_status": 201
        }
    else:
        data = {
            "msg": gettext("Plug-in failed to stop"),
            "msg_type": "w",
            "custom_status": 400
        }
    return data
def add_goods_categorys():

    '''
    添加商品分类
    :return:
    '''
    goods_type_id = request.argget.all('goods_type_id')
    name = request.argget.all('name')
    s, r = arg_verify([(gettext("name"), name), (gettext("goods_type_id"), goods_type_id)],
                      required=True)
    if not s:
        return r

    user_id = current_user.str_id
    if mdb_web.dbs["plug_warehouse_category"].find_one({"name":name, "type_id":goods_type_id,"user_id":user_id}):
        data = {"msg": gettext("Item category already exists"), "msg_type": "w", "http_status": 403}
    else:
        up_data = {
            "name": name,
            "type_id":goods_type_id,
            "user_id": user_id
        }
        mdb_web.dbs["plug_warehouse_category"].insert(up_data)
        data = {"msg": gettext("Add item category successfully"), "msg_type": "s", "http_status": 201}

    return data
Beispiel #19
0
def refresh_plugin_setting():
    """
    获取插件设置
    :return:
    """

    plugin_name = request.argget.all('plugin_name')
    s, r = arg_verify(reqargs=[("plugin name", plugin_name)], required=True)
    if not s:
        return r

    register_r = plugin_manager.load_plugin(plugin_name, is_import=True)
    if register_r:
        if mdbs["sys"].db.plugin.find_one(
                {"plugin_name": plugin_name, "active": {"$nin": [1, True]}}):
            # 刷新后, 判断如果并位激活的插件,那就注销注册
            plugin_manager.unregister_plugin(plugin_name)
        data = {
            "msg": gettext("Refreshed successfully"),
            "msg_type": "s",
            "custom_status": 201}
    else:
        data = {
            "msg": gettext("Failed to refresh. Please check the previous plug-in page for error messages"),
            "msg_type": "e",
            "custom_status": 400}

    return data
Beispiel #20
0
def get_static_file_content():
    """
    获取静态文件内容, 如html文件
    :return:
    """
    filename = request.argget.all('filename', "index").strip("/")
    file_path = request.argget.all('file_path', "").strip("/")
    theme_name = request.argget.all("theme_name")

    s, r = arg_verify([(gettext("theme name"), theme_name)], required=True)
    if not s:
        return r
    path = os.path.join(THEME_TEMPLATE_FOLDER, theme_name)
    file = "{}/{}/{}".format(path, file_path, filename)
    if not os.path.exists(file) or THEME_TEMPLATE_FOLDER not in file:
        data = {
            "msg": gettext("File not found,'{}'").format(file),
            "msg_type": "w",
            "custom_status": 404
        }
    else:
        with open(file) as wf:
            content = wf.read()
        data = {
            "content": content,
            "file_relative_path": file_path.replace(path, "").strip("/")
        }
    return data
Beispiel #21
0
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
Beispiel #22
0
def get_media(user_id=None):
    """
    :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0
    :return:
    """

    if user_id is None:
        user_id = current_user.str_id
    tid = request.argget.all("id")

    s, r = arg_verify([("id", tid)], required=True)
    if not s:
        return r

    data = {}

    media = mdb_web.db.media.find_one({
        "_id": ObjectId(tid),
        "user_id": user_id
    })
    if media:
        media["_id"] = str(media["_id"])
        if "url" in media and media["url"]:
            media["url"] = get_file_url(media["url"])

    data["media"] = media
    return data
Beispiel #23
0
def api_account_data_availability():
    """
    GET:
        查看用户名,email,个性域是否可以使用
        field:<str>, username or email or custom_domain
        vaule:<str>
        :return:
    """

    field = request.argget.all('field', 'email').strip()
    value = request.argget.all('value')
    s, r = arg_verify(reqargs=[(field, value)], required=True)
    if not s:
        data = r
    elif mdb_user.db.user.find_one({"_id": {"$ne": current_user.id}, field: value}):
        data = {'msg': gettext("This {} address has been registered").format(
            field), 'msg_type': "w", "http_status": 403}
    elif mdb_user.db.user.find_one({"_id": current_user.id, field: value}):
        data = {
            'msg': gettext(
                "This is the email address you currently use".format(field)),
            'msg_type': "w",
            "http_status": 403}
    else:
        data = {'msg': gettext("This {} can be used").format(field),
                'msg_type': "s", "http_status": 200}
    return response_format(data)
Beispiel #24
0
def get_medias(user_id=None):
    """
    :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0
    :return:
    """

    if user_id is None:
        user_id = current_user.str_id
    keyword = request.argget.all("keyword")
    category_id = request.argget.all("category_id")
    ctype = request.argget.all("ctype")
    page = str_to_num(request.argget.all("page", 1))
    pre = str_to_num(request.argget.all("pre", 12))
    sort = json_to_pyseq(request.argget.all('sort'))
    s, r = arg_verify([(gettext("type"), ctype)],
                      only=get_config("category", "CATEGORY_TYPE").values())
    if not s:
        return r

    data = {}
    if category_id:
        if category_id == "default":
            category_id = {"$in": [None, ""]}
        query = {"category_id": category_id, "type": ctype}
    else:
        query = {"type": ctype}

    if keyword:
        k_rule = {"$regex": keyword, "$options": "$i"}
        query["$or"] = [{
            "name": k_rule
        }, {
            "title": k_rule
        }, {
            "link": k_rule
        }, {
            "text": k_rule
        }]
    query["user_id"] = user_id

    # sort
    if sort:
        for i, srt in enumerate(sort):
            sort[i] = (list(srt.keys())[0], list(srt.values())[0])
    else:
        sort = [("time", -1)]

    medias = mdb_web.db.media.find(query)
    data_cnt = medias.count(True)
    medias = list(medias.sort(sort).skip(pre * (page - 1)).limit(pre))
    for d in medias:
        d["_id"] = str(d["_id"])
        if "url" in d and d["url"]:
            d["url"] = get_file_url(d["url"])

    data["medias"] = datas_paging(pre=pre,
                                  page_num=page,
                                  data_cnt=data_cnt,
                                  datas=medias)
    return data
def update_business():

    '''
    更新厂家名称
    :return:
    '''
    name = request.argget.all('name')
    mobile_phone = request.argget.all('mobile_phone')
    addr = request.argget.all('addr')
    goods_type_id = request.argget.all('goods_type_id')
    id = request.argget.all('id')
    s, r = arg_verify([(gettext("name"), name), ("id", id)], required=True)
    if not s:
        return r
    user_id = current_user.str_id
    if mdb_web.dbs["plug_warehouse_business"].find_one({"name":name, "user_id":user_id,"type_id":goods_type_id,
                                                 "_id":{"$ne":ObjectId(id)}}):
        data = {"msg": gettext("Business already exists"), "msg_type": "w", "http_status": 403}
    else:
        up_data = {
            "name": name,
            "mobile_phone": mobile_phone,
            "addr": addr,
        }
        print(up_data)
        mdb_web.dbs["plug_warehouse_business"].update_one({"_id":ObjectId(id), "user_id":current_user.str_id},
                                                   {"$set":up_data})
        data = {"msg": gettext("Update business successfully"), "msg_type": "s", "http_status": 201}

    return data
Beispiel #26
0
def get_followed_users():
    """
    获取一个用户已经关注的用户
    :return:
    """
    user_id = request.argget.all("user_id")
    page = str_to_num(request.argget.all("page", 1))
    pre = str_to_num(request.argget.all("pre", 20))

    s, r = arg_verify(reqargs=[("user id", user_id)], required=True)
    if not s:
        return r
    data = {"users": []}
    follow_user = mdb_user.db.user_follow.find_one({
        "user_id": user_id,
        "type": "account"
    })
    if follow_user:
        data_cnt = len(follow_user["follow"])
        for tid in follow_user["follow"][(page - 1) * pre:page * pre]:
            s, r = get_user_public_info(
                user_id=str(tid),
                is_basic=False,
                determine_following=False,
                current_user_isauth=current_user.is_authenticated)
            if s:
                data["users"].append(r)
    else:
        data_cnt = 0
    data["users"] = datas_paging(pre=pre,
                                 page_num=page,
                                 data_cnt=data_cnt,
                                 datas=data["users"])

    return data
Beispiel #27
0
def del_navs():
    ids = json_to_pyseq(request.argget.all("ids"))
    s, r = arg_verify([(gettext("ids"), ids)], required=True)
    if not s:
        return r
    del_ids = []
    for id in ids:
        del_ids.append(ObjectId(id))

    r = mdbs["sys"].dbs["theme_nav_setting"].delete_many(
        {"_id": {
            "$in": del_ids
        }})
    if r.deleted_count:
        data = {
            "msg": gettext("Deleted successfully"),
            "msg_type": "s",
            "custom_status": 200
        }
    else:
        data = {
            "msg": gettext("Delete failed"),
            "msg_type": "s",
            "custom_status": 200
        }
    cache.delete_autokey(fun="get_global_theme_navs",
                         theme_name=".*",
                         lang=".*",
                         db_type="redis",
                         key_regex=True)
    return data
Beispiel #28
0
def follow_user():
    """
    关注一个用户
    :return:
    """

    ids = json_to_pyseq(request.argget.all("ids", []))

    s, r = arg_verify(reqargs=[("id", ids)], required=True)
    if not s:
        return r

    cnt = 0
    for tid in ids[:]:

        if tid != current_user.str_id and get_one_user(user_id=str(tid)):
            r = mdb_user.db.user_follow.update_one(
                {
                    "user_id": current_user.str_id,
                    "type": "account"
                }, {"$addToSet": {
                    "follow": tid
                }},
                upsert=True)
            if r.modified_count or r.upserted_id:
                cnt += 1
                # 更新粉丝统计
                update_one_user(user_id=str(tid),
                                updata={"$inc": {
                                    "fans_num": 1
                                }})
            delete_user_info_cache(user_id=tid)

    if cnt:
        # 更新关注统计
        update_one_user(user_id=current_user.str_id,
                        updata={"$inc": {
                            "follow_user_num": cnt
                        }})
        delete_user_info_cache(user_id=current_user.str_id)
        data = {
            "msg": gettext("Followed"),
            "msg_type": "s",
            "http_status": 201
        }

    elif len(ids) == 1 and ids[0] == current_user.str_id:
        data = {
            "msg": gettext("You can't follow yourself"),
            "msg_type": "w",
            "http_status": 400
        }
    else:
        data = {
            "msg": gettext("You are already following this user"),
            "msg_type": "w",
            "http_status": 400
        }

    return data
Beispiel #29
0
def short_str_verifi(short_str, project=None, allow_special_chart=False):
    """
    各种名字短字符串验证
    Character name to verify
    :param s:
    allow_special_chart: 是否允许特殊字符
    :return:
    """

    s, r = arg_verify(reqargs=[(gettext("name"), short_str)], required=True)
    if not s:
        return False, r["msg"]

    if not allow_special_chart:
        if re.search(r"[\.\*#\?]+", short_str):
            return False, gettext(
                "The name format is not correct,You can't use '.','*','#','?'")
    warning_msg = gettext(
        "Some contents contain sensitive information or do not meet the requirements of this site."
        " Please correct it and try again."
    )
    if not (current_user.is_authenticated and current_user.is_staff):
        rules = mdbs["sys"].db.audit_rules.find({"project": project})
        for rule in rules:
            if re.search(r"^{}$".format(rule["rule"]), short_str):
                return False, warning_msg

    r = content_inspection_text(short_str)
    if r["label"] != "no_plugin" and r["score"] == 100:
        return False, warning_msg

    return True, ""
Beispiel #30
0
def unfollow():
    '''
    取消关注
    :return:
    '''

    ids = json_to_pyseq(request.argget.all("ids", []))

    s, r = arg_verify(reqargs=[("id", ids)], required=True)
    if not s:
        return r

    for id in ids[:]:
        if mdb_user.db.user_follow.find_one({"user_id":current_user.str_id, "type": "account", "follow":id}):
            # 更新粉丝统计
            update_one_user(user_id=str(id), updata={"$inc": {"fans_num": -1}})
        else:
            ids.remove(id)
        delete_user_info_cache(user_id=id)

    r = mdb_user.db.user_follow.update_one({"user_id":current_user.str_id, "type": "account"},
                                           {"$pullAll": {"follow": ids}})

    if r.modified_count:
        # 更新关注统计
        update_one_user(user_id=current_user.str_id,
                        updata={"$inc": {"follow_user_num": -len(ids)}})
        delete_user_info_cache(user_id=current_user.str_id)
        data = {"msg": gettext("Unfollow success"), "msg_type": "s", "http_status": 201}
    else:
        delete_user_info_cache(user_id=current_user.str_id)
        data = {"msg": gettext("Unfollow failed"), "msg_type": "w", "http_status": 400}

    return data