From 37670b2ff5379e8603d3b0eec6d493daf2d6cfcb Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 10 Jul 2025 19:26:55 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/controller/AdminApiController.java |  119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 112 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/nq/controller/AdminApiController.java b/src/main/java/com/nq/controller/AdminApiController.java
index 3820b97..920ddc4 100644
--- a/src/main/java/com/nq/controller/AdminApiController.java
+++ b/src/main/java/com/nq/controller/AdminApiController.java
@@ -1,9 +1,13 @@
 package com.nq.controller;
 
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.google.common.collect.Maps;
 import com.nq.common.ServerResponse;
-import com.nq.pojo.SiteAdminIndex;
-import com.nq.pojo.SiteSpread;
+import com.nq.dao.SiteAdminMapper;
+import com.nq.pojo.*;
 import com.nq.service.*;
+import com.nq.service.impl.GoogleAuthenticator;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.redis.CookieUtils;
 import com.nq.utils.redis.JsonUtil;
@@ -13,14 +17,19 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.validation.Valid;
 
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.Map;
 
 @Controller
 @RequestMapping({"/api/admin/"})
@@ -29,6 +38,9 @@
 
     @Autowired
     ISiteAdminService iSiteAdminService;
+
+    @Autowired
+    SiteAdminMapper siteAdminMapper;
 
     @Autowired
     ISiteSettingService iSiteSettingService;
@@ -51,8 +63,13 @@
     //管理系统登录
     @RequestMapping({"login.do"})
     @ResponseBody
-    public ServerResponse login(@RequestParam("adminPhone") String adminPhone, @RequestParam("adminPwd") String adminPwd, @RequestParam("verifyCode") String verifyCode, HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) {
-        ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, request);
+    public ServerResponse login(@RequestParam("adminPhone") String adminPhone,
+                                @RequestParam("adminPwd") String adminPwd,
+                                @RequestParam("verifyCode") String verifyCode,
+                                @RequestParam(value = "googleAuthCode", required = false) Integer googleAuthCode,
+                                HttpSession httpSession, HttpServletRequest request,
+                                HttpServletResponse response) {
+        ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, googleAuthCode,request);
 
         return serverResponse;
     }
@@ -125,8 +142,96 @@
     }
 
 
+    /**
+     * 获取当前登录用户
+     * @return
+     */
+    @GetMapping("getAdmin")
+    @ResponseBody
+    public ServerResponse getAdmin(HttpServletRequest request) {
+        String cookie_name = PropertiesUtil.getProperty("admin.cookie.name");
+        SiteAdmin siteAdmin = null;
+        if(StringUtils.isNotEmpty(cookie_name)){
+            String logintoken = CookieUtils.readLoginToken(request, cookie_name);
+            String adminJson = RedisShardedPoolUtils.get(logintoken);
+            siteAdmin = (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class);
+            siteAdmin = siteAdminMapper.selectById(siteAdmin.getId());
+        }
+        return ServerResponse.createBySuccess(siteAdmin);
+    }
 
 
+    /**
+     * 获取谷歌验证码密钥
+     * @return
+     */
+    @GetMapping("getLoginGoogleAuthSecret")
+    @ResponseBody
+    public ServerResponse getLoginGoogleAuthSecret(HttpServletRequest request) {
+        GoogleAuthDto dto = iSiteAdminService.getGoogleAuth(request);
+        return ServerResponse.createBySuccess(dto);
+    }
+
+    /**
+     * 绑定谷歌验证码
+     */
+    @PostMapping("bindGoogleAuth")
+    @ResponseBody
+    public ServerResponse updateGoogleAuth(@RequestParam("id") String id,
+                                           @RequestParam("googleAuthCode") String googleAuthCode,
+                                           @RequestParam("secret") String secret) {
+        SiteAdmin siteAdmin = siteAdminMapper.selectById(id);
+        if (siteAdmin == null) {
+            return ServerResponse.createByErrorMsg("当前用户未找到");
+        }
+        long t = System.currentTimeMillis();
+        GoogleAuthenticator ga = new GoogleAuthenticator();
+        ga.setWindowSize(5);
+        if (siteAdmin.getGoogleAuthBind()) {
+            return ServerResponse.createByErrorMsg("谷歌验证码已绑定");
+        }
+        boolean userFlag = ga.check_code(secret, Long.valueOf(googleAuthCode), t);
+        if (!userFlag) {
+            return ServerResponse.createByErrorMsg("谷歌验证码错误");
+        }
+        siteAdmin.setGoogleAuthBind(true);
+        siteAdmin.setGoogleAuthSecret(secret);
+        siteAdminMapper.updateById(siteAdmin);
+        return ServerResponse.createBySuccess();
+    }
+
+
+    /**
+     * 解绑谷歌验证码
+     * @param param
+     * @return
+     */
+    @PostMapping("/unbindingGoogleAuth")
+    @ResponseBody
+    public ServerResponse unbindingGoogleAuth(@RequestParam("id") String id,
+                                              @RequestParam("rootGoogleAuthCode") String rootGoogleAuthCode) {
+        SiteAdmin siteAdmin = siteAdminMapper.selectById(id);
+        if (siteAdmin == null) {
+            return ServerResponse.createByErrorMsg("当前用户未找到");
+        }
+        long t = System.currentTimeMillis();
+        GoogleAuthenticator ga = new GoogleAuthenticator();
+        ga.setWindowSize(5);
+        boolean flag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(rootGoogleAuthCode), t);
+        if (flag) {
+            if (!siteAdmin.getGoogleAuthBind()) {
+                return ServerResponse.createByErrorMsg("谷歌验证码未绑定,无需解绑!");
+
+            }
+            siteAdmin.setGoogleAuthBind(false);
+            siteAdmin.setGoogleAuthSecret("");
+            siteAdminMapper.updateById(siteAdmin);
+        } else {
+            return ServerResponse.createByErrorMsg("超级谷歌验证码错误");
+        }
+        return ServerResponse.createBySuccess();
+    }
+
 
 
 //    //页面样式设置

--
Gitblit v1.9.3