Browse Source

Fix token bug

xcbosa-itx 2 years ago
parent
commit
d80fad3296

+ 7 - 2
controller/EntryController.cpp

@@ -16,13 +16,18 @@ using namespace configor;
 namespace xc::controller {
 
     ResponseData *EntryController(RequestData request) {
-        return new TemplateResponseData({
-            If(user::isLogin(request.getCookie("Token")), {
+        bool isUserLogin = user::isLogin(request.getCookie("Token"));
+        auto data = new TemplateResponseData({
+            If(isUserLogin, {
                 ContentGeneratorReference("PortListController", request)
             }, {
                 ContentGeneratorReference("LoginController", request)
             })
         });
+        if (!isUserLogin) {
+            data->addCookie("Token", "");
+        }
+        return data;
     }
 
     ContentGeneratorDefineS(request.getURLPath() == "/", EntryController(request))

+ 12 - 8
controller/LoginController.cpp

@@ -19,6 +19,9 @@ namespace xc::controller {
     ResponseData *LoginController(RequestData request) {
         return new TemplateResponseData({
             Framework7Document({
+                If(request.getCookie("Token") == "loginFailed", {
+                    script("window.onload = function() { app.dialog.alert('登陆失败,请检查用户名或密码') }")
+                }),
                 BlockTitleView("需要登陆"),
                 FormView({
                     FormInputView("username", "用户名", "text", "输入您的用户名").id("username"),
@@ -27,7 +30,7 @@ namespace xc::controller {
                         BlockView({
                             ButtonView("登陆").onclick("doLogin('" + conf::userPasswordSalt + "')"),
                             VerticalSpacer(10),
-                            Label("如果您需要注册,请联系管理员")
+                            Label("如果您需要注册,请联系管理员,管理员请参考GitHub中的Readme来创建账号。")
                         })
                     })
                 }).action("/").method("get").id("loginForm"),
@@ -47,13 +50,6 @@ namespace xc::controller {
         string username = model["username"];
         string password = model["password"];
         string token = user::tryLogin(username, password);
-//        TemplateResponseData *resp = new TemplateResponseData({
-//            If(token.empty(), {
-//                ContentGeneratorReference("LoginController", request)
-//            }, {
-//                ContentGeneratorReference("PortListController", request)
-//            })
-//        });
         auto resp = new RedirectResponse("/");
         resp->addCookie("Token", token);
         return resp;
@@ -61,4 +57,12 @@ namespace xc::controller {
 
     ContentGeneratorDefineS(request.getURLPath() == "/login", ValidAuthController(request))
 
+    ResponseData *QuitLoginStateController(RequestData request) {
+        auto resp = new RedirectResponse("/");
+        resp->addCookie("Token", "");
+        return resp;
+    }
+
+    ContentGeneratorDefineS(request.getURLPath() == "/quitLogin", QuitLoginStateController(request))
+
 }

+ 2 - 0
controller/PortListController.cpp

@@ -17,6 +17,8 @@ namespace xc::controller {
     ResponseData *PortListController(RequestData request) {
         return new TemplateResponseData({
             Framework7Document({
+                a("退出登陆").classAdd("link").onclick("window.location='/quitLogin'")
+            }, {
                 p("登陆成功")
             }, {
                 a("2023 © Frp-WebUI by XCBOSA")

+ 5 - 2
processor/templates/framework7/Framework7Document.hpp

@@ -10,7 +10,7 @@
 namespace xc::processor::templates::framework7 {
     class Framework7Document: public View {
     public:
-        Framework7Document(ViewCollection pageContent, ViewCollection tabBarContent): View({ }) {
+        Framework7Document(ViewCollection titleContent, ViewCollection pageContent, ViewCollection tabBarContent): View({ }) {
             html html({
                 head({
                     meta().charset("utf-8"),
@@ -27,7 +27,8 @@ namespace xc::processor::templates::framework7 {
                             div({
                                 div().classAdd("navbar-bg"),
                                 div({
-                                    div(conf::title).classAdd("title")
+                                    div(conf::title).classAdd("title"),
+                                    View("", titleContent)
                                 }).classAdd("navbar-inner")
                             }).classAdd("navbar"),
                             div({
@@ -43,6 +44,8 @@ namespace xc::processor::templates::framework7 {
             });
             this->inner(html);
         }
+
+        Framework7Document(ViewCollection pageContent, ViewCollection tabBarContent): Framework7Document({ }, pageContent, tabBarContent) { };
     };
 
     class FormView: public form {

+ 3 - 3
user.hpp

@@ -26,7 +26,7 @@ namespace user {
         ::time(&t);
         oss << (t + conf::userTokenExpireSeconds);
         oss << "/";
-        oss << sha256(oss.str());
+        oss << sha256(oss.str() + conf::userJWTSecret);
         return oss.str();
     }
 
@@ -39,7 +39,7 @@ namespace user {
                 return generateToken(username);
             }
         }
-        return "";
+        return "loginFailed";
     }
 
     static vector<string> split(const string& str, const string& delim) {
@@ -92,7 +92,7 @@ namespace user {
         oss << "/";
         oss << time;
         oss << "/";
-        string rhash = sha256(oss.str());
+        string rhash = sha256(oss.str() + conf::userJWTSecret);
         if (hash != rhash) {
             return "";
         }