""" Cookie管理 - 登录网站视图 URL: /system/cookie-site """ import os from flask import Blueprint, render_template, request from flask_login import current_user from applications.common import curd from applications.common.utils.http import table_api, fail_api, success_api from applications.common.utils.rights import authorize from applications.common.utils.validate import str_escape from applications.extensions import db from applications.extensions.init_limit import limiter from applications.models import CookieSite from applications.schemas import CookieSiteManageSchema dir_path = os.path.dirname(os.path.abspath(__file__)) bp = Blueprint('cookie_site', __name__, url_prefix='/system/cookie-site', template_folder=os.path.join(dir_path, '..', 'templates')) @bp.get('/') @authorize("system:cookie-site:main") def main(): return render_template('system/cookie_site/main.html') @bp.get('/data') @limiter.limit("60 per minute") @authorize("system:cookie-site:main") def data(): keyword = str_escape(request.args.get('keyword', type=str)) query = CookieSite.query.filter() if keyword: query = query.filter( db.or_( CookieSite.name.contains(keyword), CookieSite.url.contains(keyword), ) ) items = query.order_by(CookieSite.id.desc()).layui_paginate() return table_api( msg="请求成功", data=curd.model_to_dicts(schema=CookieSiteManageSchema, data=items.items), count=items.total, ) @bp.get('/add') @authorize("system:cookie-site:add", log=True) def add(): return render_template('system/cookie_site/add.html') @bp.post('/save') @authorize("system:cookie-site:add", log=True) def save(): req_json = request.get_json(force=True, silent=True) or {} name = str_escape(req_json.get('name')) url = str_escape(req_json.get('url')) cookie_value = str_escape(req_json.get('cookie_value')) if not all([name, url, cookie_value]): return fail_api(msg="名称/网址/Cookie值不得为空") try: obj = CookieSite( name=name, url=url, cookie_value=cookie_value, domain=str_escape(req_json.get('domain')), path=str_escape(req_json.get('path')) or '/', expiry=req_json.get('expiry'), secure=int(req_json.get('secure') or 0), http_only=int(req_json.get('http_only') or 0), enable=int(req_json.get('enable') or 1), create_by=current_user.username if current_user.is_authenticated else 'admin', ) db.session.add(obj) db.session.commit() except Exception as e: db.session.rollback() return fail_api(msg=f"新增失败:{e}") return success_api(msg="新增成功") @bp.get('/edit') @authorize("system:cookie-site:edit", log=True) def edit(): sid = request.args.get('cookieSiteId', type=int) obj = curd.get_one_by_id(CookieSite, sid) if not obj: return fail_api(msg="记录不存在") return render_template('system/cookie_site/edit.html', obj=obj) @bp.put('/update') @authorize("system:cookie-site:edit", log=True) def update(): req_json = request.get_json(force=True, silent=True) or {} sid = req_json.get('cookieSiteId') obj = curd.get_one_by_id(CookieSite, sid) if not obj: return fail_api(msg="记录不存在") name = str_escape(req_json.get('name')) url = str_escape(req_json.get('url')) cookie_value = str_escape(req_json.get('cookie_value')) if not all([name, url, cookie_value]): return fail_api(msg="名称/网址/Cookie值不得为空") try: obj.name = name obj.url = url obj.cookie_value = cookie_value obj.domain = str_escape(req_json.get('domain')) obj.path = str_escape(req_json.get('path')) or '/' obj.expiry = req_json.get('expiry') obj.secure = int(req_json.get('secure') or 0) obj.http_only = int(req_json.get('http_only') or 0) obj.enable = int(req_json.get('enable') or 1) db.session.commit() except Exception as e: db.session.rollback() return fail_api(msg=f"更新失败:{e}") return success_api(msg="更新成功") @bp.delete('/remove/') @authorize("system:cookie-site:remove", log=True) def remove(sid): res = curd.delete_one_by_id(CookieSite, sid) if not res: return fail_api(msg="删除失败") return success_api(msg="删除成功") @bp.put('/enable') @authorize("system:cookie-site:edit", log=True) def enable(): req_json = request.get_json(force=True, silent=True) or {} sid = req_json.get('cookieSiteId') if not sid: return fail_api(msg="数据错误") res = curd.enable_status(CookieSite, sid) if not res: return fail_api(msg="操作失败") return success_api(msg="已启用") @bp.put('/disable') @authorize("system:cookie-site:edit", log=True) def disable(): req_json = request.get_json(force=True, silent=True) or {} sid = req_json.get('cookieSiteId') if not sid: return fail_api(msg="数据错误") res = curd.disable_status(CookieSite, sid) if not res: return fail_api(msg="操作失败") return success_api(msg="已禁用")