package com.ssyf.common.security.handler;

import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.exception.NotRoleException;
import cn.hutool.json.JSONUtil;
import com.ssyf.common.web.apicode.ApiCodeServer;
import com.ssyf.common.web.apicode.ApiCodeUser;
import com.ssyf.common.web.result.Result;

/**
 * 安全错误处理
 * @author huwei
 * @date 2023/11/5 10:35
 */
public interface SecurityErrorHandler {

    /**
     * 未登录处理
     * @param e
     * @return
     */
    default Object notLoginHandle(NotLoginException e){
        // 设置响应头
        SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
        return JSONUtil.toJsonStr(Result.fail(ApiCodeUser.NOT_AUTHORIZED));
    }

    /**
     * 没权限处理
     * @param e
     * @return
     */
    default Object notPermissionHandle(NotPermissionException e){
        // 设置响应头
        SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
        return JSONUtil.toJsonStr(Result.fail(ApiCodeUser.NOT_AUTHORIZED));
    }

    /**
     * 没角色权限处理
     * @param e
     * @return
     */
    default Object notRoleHandle(NotRoleException e){
        // 设置响应头
        SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
        return JSONUtil.toJsonStr(Result.fail(ApiCodeUser.NOT_AUTHORIZED));
    }

    /**
     * 其它异常处理
     * @param e
     * @return
     */
    default Object otherHandle(Throwable e){
        e.printStackTrace();
        // 设置响应头
        SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
        return JSONUtil.toJsonStr(Result.fail(ApiCodeServer.ERROR));
    }
}
