VYPR
Critical severityNVD Advisory· Published Mar 7, 2022· Updated Aug 3, 2024

CVE-2022-24193

CVE-2022-24193

Description

CasaOS before v0.2.7 contains a command injection vulnerability that allows an attacker to execute arbitrary commands.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

CasaOS before v0.2.7 contains a command injection vulnerability that allows an attacker to execute arbitrary commands.

Vulnerability

CasaOS versions before v0.2.7 contain a command injection vulnerability. The issue exists in how user-supplied input is handled, allowing the injection of arbitrary commands into system calls. The exact vulnerable code path is not fully detailed in the public references, but the commit d060968 [3] suggests that the fix involved adding input sanitization for a language parameter used in constructing API requests, which indicates the vulnerability likely stems from unsanitized input being passed to a shell or command execution function [1]. The vulnerability affects all CasaOS installations running versions prior to 0.2.7.

Exploitation

An attacker can exploit this vulnerability by sending a specially crafted request to the CasaOS server, likely through the web interface or API, containing malicious command injection payloads in parameters that are not properly sanitized. No authentication is required if the vulnerable endpoint is exposed; the attacker only needs network access to the CasaOS service. The exact steps involve identifying an input field (e.g., language) that is unsafely concatenated into a command or shell execution, and injecting shell metacharacters (e.g., ;, |, ` ``) to terminate the intended command and execute arbitrary commands [1][4].

Impact

Successful exploitation allows an attacker to execute arbitrary commands on the underlying operating system with the privileges of the CasaOS process. This can lead to full compromise of the system, including data exfiltration, installation of malware, lateral movement within the network, and denial of service. The attacker gains the ability to control the CasaOS instance and potentially access sensitive data stored on the server [1][4].

Mitigation

The vulnerability is fixed in CasaOS version 0.2.7. Users should update their CasaOS installations to v0.2.7 or later immediately to remediate the issue. The fix is included in commit d060968 [3]. No workarounds are documented, so updating is the only recommended mitigation. The CVE is not listed on the CISA Known Exploited Vulnerabilities (KEV) catalog as of the publication date [1].

AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
github.com/IceWhaleTech/CasaOSGo
< 0.2.80.2.8

Affected products

2

Patches

1
d060968b7ab0

Apply multilingual support

15 files changed · +3550 1421
  • route/init.go+1 1 modified
    @@ -35,7 +35,7 @@ func installSyncthing(appId string) {
     	m := model.CustomizationPostData{}
     	var dockerImage string
     	var dockerImageVersion string
    -	appInfo = service.MyService.OAPI().GetServerAppInfo(appId, "system")
    +	appInfo = service.MyService.OAPI().GetServerAppInfo(appId, "system", "us_en")
     	dockerImage = appInfo.Image
     	dockerImageVersion = appInfo.ImageVersion
     
    
  • route/v1/app.go+4 2 modified
    @@ -35,7 +35,8 @@ func AppList(c *gin.Context) {
     	t := c.DefaultQuery("type", "rank")
     	categoryId := c.DefaultQuery("category_id", "0")
     	key := c.DefaultQuery("key", "")
    -	recommend, list, community := service.MyService.OAPI().GetServerList(index, size, t, categoryId, key)
    +	language := c.GetHeader("Language")
    +	recommend, list, community := service.MyService.OAPI().GetServerList(index, size, t, categoryId, key, language)
     	// for i := 0; i < len(recommend); i++ {
     	// 	ct, _ := service.MyService.Docker().DockerListByImage(recommend[i].Image, recommend[i].ImageVersion)
     	// 	if ct != nil {
    @@ -137,7 +138,8 @@ func AppUsageList(c *gin.Context) {
     func AppInfo(c *gin.Context) {
     
     	id := c.Param("id")
    -	info := service.MyService.OAPI().GetServerAppInfo(id, "")
    +	language := c.GetHeader("Language")
    +	info := service.MyService.OAPI().GetServerAppInfo(id, "", language)
     	if info.NetworkModel != "host" {
     		for i := 0; i < len(info.Ports); i++ {
     			if p, _ := strconv.Atoi(info.Ports[i].ContainerPort); port2.IsPortAvailable(p, info.Ports[i].Protocol) {
    
  • route/v1/disk.go+1 1 modified
    @@ -82,7 +82,7 @@ func GetDiskList(c *gin.Context) {
     			continue
     		}
     
    -		if list[i].Tran == "sata" {
    +		if list[i].Tran == "sata" || list[i].Tran == "nvme" {
     			temp := service.MyService.Disk().SmartCTL(list[i].Path)
     			if reflect.DeepEqual(temp, model.SmartctlA{}) {
     				continue
    
  • route/v1/docker.go+2 1 modified
    @@ -145,6 +145,7 @@ func SpeedPush(c *gin.Context) {
     // @Router /app/install/{id} [post]
     func InstallApp(c *gin.Context) {
     	appId := c.Param("id")
    +	language := c.GetHeader("Language")
     	var appInfo model.ServerAppList
     	m := model.CustomizationPostData{}
     	c.BindJSON(&m)
    @@ -174,7 +175,7 @@ func InstallApp(c *gin.Context) {
     		dockerImageVersion = "latest"
     	}
     	if m.Origin != "custom" {
    -		appInfo = service.MyService.OAPI().GetServerAppInfo(appId, "")
    +		appInfo = service.MyService.OAPI().GetServerAppInfo(appId, "", language)
     
     	} else {
     
    
  • route/v1/system.go+1 1 modified
    @@ -286,7 +286,7 @@ func Info(c *gin.Context) {
     			findSystem += 1
     			continue
     		}
    -		if list[i].Tran == "sata" {
    +		if list[i].Tran == "sata" || list[i].Tran == "nvme" {
     			temp := service.MyService.Disk().SmartCTL(list[i].Path)
     			if reflect.DeepEqual(temp, model.SmartctlA{}) {
     				continue
    
  • route/v1/zerotier.go+21 5 modified
    @@ -2,12 +2,13 @@ package v1
     
     import (
     	json2 "encoding/json"
    +	"net/http"
    +
     	"github.com/IceWhaleTech/CasaOS/model"
     	"github.com/IceWhaleTech/CasaOS/pkg/config"
     	oasis_err2 "github.com/IceWhaleTech/CasaOS/pkg/utils/oasis_err"
     	"github.com/IceWhaleTech/CasaOS/service"
     	"github.com/gin-gonic/gin"
    -	"net/http"
     )
     
     // @Summary 登录zerotier获取token
    @@ -432,11 +433,17 @@ func ZeroTierDeleteNetwork(c *gin.Context) {
     // @Router /zerotier/join/{id} [post]
     func ZeroTierJoinNetwork(c *gin.Context) {
     	networkId := c.Param("id")
    -	service.MyService.ZeroTier().ZeroTierJoinNetwork(networkId)
    -	if len(networkId) == 0 {
    +	if len(networkId) != 16 {
     		c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
     		return
     	}
    +	for _, v := range networkId {
    +		if !service.MyService.ZeroTier().NetworkIdFilter(v) {
    +			c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
    +			return
    +		}
    +	}
    +	service.MyService.ZeroTier().ZeroTierJoinNetwork(networkId)
     	c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
     }
     
    @@ -450,10 +457,19 @@ func ZeroTierJoinNetwork(c *gin.Context) {
     // @Router /zerotier/leave/{id} [post]
     func ZeroTierLeaveNetwork(c *gin.Context) {
     	networkId := c.Param("id")
    -	service.MyService.ZeroTier().ZeroTierLeaveNetwork(networkId)
    -	if len(networkId) == 0 {
    +
    +	if len(networkId) != 16 {
     		c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
     		return
     	}
    +
    +	for _, v := range networkId {
    +		if !service.MyService.ZeroTier().NetworkIdFilter(v) {
    +			c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
    +			return
    +		}
    +	}
    +	service.MyService.ZeroTier().ZeroTierLeaveNetwork(networkId)
    +
     	c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
     }
    
  • service/casa.go+7 7 modified
    @@ -13,10 +13,10 @@ import (
     )
     
     type CasaService interface {
    -	GetServerList(index, size, tp, categoryId, key string) (recommend, list, community []model.ServerAppList)
    +	GetServerList(index, size, tp, categoryId, key, language string) (recommend, list, community []model.ServerAppList)
     	GetServerCategoryList() []model.ServerCategoryList
     	GetTaskList(size int) []model2.TaskDBModel
    -	GetServerAppInfo(id, t string) model.ServerAppList
    +	GetServerAppInfo(id, t string, language string) model.ServerAppList
     	ShareAppFile(body []byte) string
     }
     
    @@ -45,9 +45,9 @@ func (o *casaService) GetTaskList(size int) []model2.TaskDBModel {
     	return list
     }
     
    -func (o *casaService) GetServerList(index, size, tp, categoryId, key string) (recommend, list, community []model.ServerAppList) {
    +func (o *casaService) GetServerList(index, size, tp, categoryId, key, language string) (recommend, list, community []model.ServerAppList) {
     
    -	keyName := fmt.Sprintf("list_%s_%s_%s_%s", index, size, tp, categoryId)
    +	keyName := fmt.Sprintf("list_%s_%s_%s_%s_%s", index, size, tp, categoryId, language)
     
     	if result, ok := Cache.Get(keyName); ok {
     		res, ok := result.(string)
    @@ -63,7 +63,7 @@ func (o *casaService) GetServerList(index, size, tp, categoryId, key string) (re
     
     	head["Authorization"] = GetToken()
     
    -	listS := httper2.Get(config.ServerInfo.ServerApi+"/v2/app/newlist?index="+index+"&size="+size+"&rank="+tp+"&category_id="+categoryId+"&key="+key, head)
    +	listS := httper2.Get(config.ServerInfo.ServerApi+"/v2/app/newlist?index="+index+"&size="+size+"&rank="+tp+"&category_id="+categoryId+"&key="+key+"&language="+language, head)
     
     	json2.Unmarshal([]byte(gjson.Get(listS, "data.list").String()), &list)
     	json2.Unmarshal([]byte(gjson.Get(listS, "data.recommend").String()), &recommend)
    @@ -88,12 +88,12 @@ func (o *casaService) GetServerCategoryList() []model.ServerCategoryList {
     
     	return list
     }
    -func (o *casaService) GetServerAppInfo(id, t string) model.ServerAppList {
    +func (o *casaService) GetServerAppInfo(id, t string, language string) model.ServerAppList {
     
     	head := make(map[string]string)
     
     	head["Authorization"] = GetToken()
    -	infoS := httper2.Get(config.ServerInfo.ServerApi+"/v2/app/info/"+id+"?t="+t, head)
    +	infoS := httper2.Get(config.ServerInfo.ServerApi+"/v2/app/info/"+id+"?t="+t+"&language="+language, head)
     
     	info := model.ServerAppList{}
     	json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info)
    
  • service/zerotier.go+16 6 modified
    @@ -4,18 +4,20 @@ import (
     	"bytes"
     	"errors"
     	"fmt"
    -	"github.com/IceWhaleTech/CasaOS/pkg/config"
    -	command2 "github.com/IceWhaleTech/CasaOS/pkg/utils/command"
    -	httper2 "github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
    -	"github.com/IceWhaleTech/CasaOS/pkg/zerotier"
    -	"github.com/PuerkitoBio/goquery"
    -	"github.com/tidwall/gjson"
     	"io/ioutil"
     	"math/rand"
     	"net/http"
     	"strconv"
     	"strings"
     	"time"
    +	"unicode"
    +
    +	"github.com/IceWhaleTech/CasaOS/pkg/config"
    +	command2 "github.com/IceWhaleTech/CasaOS/pkg/utils/command"
    +	httper2 "github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
    +	"github.com/IceWhaleTech/CasaOS/pkg/zerotier"
    +	"github.com/PuerkitoBio/goquery"
    +	"github.com/tidwall/gjson"
     )
     
     type ZeroTierService interface {
    @@ -33,6 +35,7 @@ type ZeroTierService interface {
     	DeleteMember(token string, id, mId string) interface{}
     	DeleteNetwork(token, id string) interface{}
     	GetJoinNetworks() string
    +	NetworkIdFilter(letter rune) bool
     }
     type zerotierStruct struct {
     }
    @@ -333,6 +336,13 @@ func (c *zerotierStruct) GetJoinNetworks() string {
     	return json
     }
     
    +func (c *zerotierStruct) NetworkIdFilter(letter rune) bool {
    +	if unicode.IsNumber(letter) || unicode.IsLetter(letter) {
    +		return true
    +	} else {
    +		return false
    +	}
    +}
     func NewZeroTierService() ZeroTierService {
     	//初始化client
     	client = http.Client{Timeout: 30 * time.Second, CheckRedirect: func(req *http.Request, via []*http.Request) error {
    
  • types/system.go+2 2 modified
    @@ -1,5 +1,5 @@
     package types
     
    -const CURRENTVERSION = "0.2.6"
    +const CURRENTVERSION = "0.2.7"
     
    -const BODY = "<li>Fix a disk that cannot be formatted under certain circumstances</li><li>Add a bug report panel.</li>"
    +const BODY = "<li>Apply multilingual support</li><li>Fix a security vulnerability</li>"
    
  • UI+1 1 modified
    @@ -1 +1 @@
    -Subproject commit d457b64e2656febd680e92b974a14776edfa2a7f
    +Subproject commit a6074812f4dc40424cf6468e47d98eb8a26f9d58
    
  • web/js/2.js+135 157 modified
  • web/js/3.js+4 4 modified
    @@ -12,15 +12,15 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vee_
     
     /***/ }),
     
    -/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"c25436b0-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Welcome.vue?vue&type=template&id=e4731dd0&":
    +/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"445a19f9-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Welcome.vue?vue&type=template&id=e4731dd0&":
     /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
    -  !*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"c25436b0-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/Welcome.vue?vue&type=template&id=e4731dd0& ***!
    +  !*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"445a19f9-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/Welcome.vue?vue&type=template&id=e4731dd0& ***!
       \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
     /*! exports provided: render, staticRenderFns */
     /***/ (function(module, __webpack_exports__, __webpack_require__) {
     
     "use strict";
    -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"is-flex is-justify-content-center is-align-items-center\",\n      attrs: { id: \"login-page\" }\n    },\n    [\n      !_vm.isLoading\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"animate-css\",\n                  rawName: \"v-animate-css\",\n                  value: _vm.initAni,\n                  expression: \"initAni\"\n                }\n              ],\n              staticClass: \"login-panel is-shadow\",\n              class: \"step\" + _vm.step\n            },\n            [\n              _vm.step == 1\n                ? _c(\n                    \"div\",\n                    { staticClass: \"has-text-centered\" },\n                    [\n                      _c(\n                        \"div\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s1Ani,\n                              expression: \"s1Ani\"\n                            }\n                          ],\n                          staticClass: \" is-flex is-justify-content-center\"\n                        },\n                        [\n                          _c(\"b-image\", {\n                            staticClass: \"is-128x128 mb-4\",\n                            attrs: { src: __webpack_require__(/*! @/assets/img/wuji.svg */ \"./src/assets/img/wuji.svg\") }\n                          })\n                        ],\n                        1\n                      ),\n                      _c(\n                        \"h2\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s2Ani,\n                              expression: \"s2Ani\"\n                            }\n                          ],\n                          staticClass: \"title is-2 mb-5 has-text-centered\"\n                        },\n                        [_vm._v(_vm._s(_vm.$t(\"Welcome to CasaOS\")))]\n                      ),\n                      _c(\n                        \"h2\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s3Ani,\n                              expression: \"s3Ani\"\n                            }\n                          ],\n                          staticClass: \"subtitle  has-text-centered\"\n                        },\n                        [\n                          _vm._v(\n                            _vm._s(_vm.$t(\"Let's create your initial account\"))\n                          )\n                        ]\n                      ),\n                      _c(\n                        \"b-button\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s4Ani,\n                              expression: \"s4Ani\"\n                            }\n                          ],\n                          staticClass: \"mt-2\",\n                          attrs: { type: \"is-primary\", rounded: \"\" },\n                          on: {\n                            click: function($event) {\n                              return _vm.goToStep(2)\n                            }\n                          }\n                        },\n                        [_vm._v(_vm._s(_vm.$t(\"Go →\")))]\n                      )\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _vm.step == 2\n                ? _c(\n                    \"div\",\n                    [\n                      _c(\n                        \"h2\",\n                        { staticClass: \"title is-3  has-text-centered\" },\n                        [_vm._v(_vm._s(_vm.$t(\"Create Account\")))]\n                      ),\n                      _c(\n                        \"div\",\n                        { staticClass: \"is-flex is-justify-content-center \" },\n                        [\n                          _c(\n                            \"div\",\n                            { staticClass: \"has-text-centered\" },\n                            [\n                              _c(\"b-image\", {\n                                staticClass: \"is-128x128\",\n                                attrs: {\n                                  src: __webpack_require__(/*! @/assets/img/Account.png */ \"./src/assets/img/Account.png\"),\n                                  rounded: \"\"\n                                }\n                              })\n                            ],\n                            1\n                          )\n                        ]\n                      ),\n                      _c(\"ValidationObserver\", {\n                        ref: \"observer\",\n                        scopedSlots: _vm._u(\n                          [\n                            {\n                              key: \"default\",\n                              fn: function(ref) {\n                                var handleSubmit = ref.handleSubmit\n                                return [\n                                  _c(\"ValidationProvider\", {\n                                    attrs: { rules: \"required\", name: \"User\" },\n                                    scopedSlots: _vm._u(\n                                      [\n                                        {\n                                          key: \"default\",\n                                          fn: function(ref) {\n                                            var errors = ref.errors\n                                            var valid = ref.valid\n                                            return [\n                                              _c(\n                                                \"b-field\",\n                                                {\n                                                  attrs: {\n                                                    label: _vm.$t(\"Username\"),\n                                                    type: {\n                                                      \"is-danger\": errors[0],\n                                                      \"is-success\": valid\n                                                    },\n                                                    message: _vm.$t(errors)\n                                                  }\n                                                },\n                                                [\n                                                  _c(\"b-input\", {\n                                                    attrs: { type: \"text\" },\n                                                    nativeOn: {\n                                                      keyup: function($event) {\n                                                        if (\n                                                          !$event.type.indexOf(\n                                                            \"key\"\n                                                          ) &&\n                                                          _vm._k(\n                                                            $event.keyCode,\n                                                            \"enter\",\n                                                            13,\n                                                            $event.key,\n                                                            \"Enter\"\n                                                          )\n                                                        ) {\n                                                          return null\n                                                        }\n                                                        return handleSubmit(\n                                                          _vm.reg\n                                                        )\n                                                      }\n                                                    },\n                                                    model: {\n                                                      value: _vm.username,\n                                                      callback: function($$v) {\n                                                        _vm.username = $$v\n                                                      },\n                                                      expression: \"username\"\n                                                    }\n                                                  })\n                                                ],\n                                                1\n                                              )\n                                            ]\n                                          }\n                                        }\n                                      ],\n                                      null,\n                                      true\n                                    )\n                                  }),\n                                  _c(\"ValidationProvider\", {\n                                    attrs: {\n                                      rules: \"required|min:5\",\n                                      vid: \"password\",\n                                      name: \"Password\"\n                                    },\n                                    scopedSlots: _vm._u(\n                                      [\n                                        {\n                                          key: \"default\",\n                                          fn: function(ref) {\n                                            var errors = ref.errors\n                                            var valid = ref.valid\n                                            return [\n                                              _c(\n                                                \"b-field\",\n                                                {\n                                                  staticClass: \"mt-4\",\n                                                  attrs: {\n                                                    label: _vm.$t(\"Password\"),\n                                                    type: {\n                                                      \"is-danger\": errors[0],\n                                                      \"is-success\": valid\n                                                    },\n                                                    message: _vm.$t(errors)\n                                                  }\n                                                },\n                                                [\n                                                  _c(\"b-input\", {\n                                                    attrs: {\n                                                      type: \"password\",\n                                                      \"password-reveal\": \"\"\n                                                    },\n                                                    nativeOn: {\n                                                      keyup: function($event) {\n                                                        if (\n                                                          !$event.type.indexOf(\n                                                            \"key\"\n                                                          ) &&\n                                                          _vm._k(\n                                                            $event.keyCode,\n                                                            \"enter\",\n                                                            13,\n                                                            $event.key,\n                                                            \"Enter\"\n                                                          )\n                                                        ) {\n                                                          return null\n                                                        }\n                                                        return handleSubmit(\n                                                          _vm.reg\n                                                        )\n                                                      }\n                                                    },\n                                                    model: {\n                                                      value: _vm.password,\n                                                      callback: function($$v) {\n                                                        _vm.password = $$v\n                                                      },\n                                                      expression: \"password\"\n                                                    }\n                                                  })\n                                                ],\n                                                1\n                                              )\n                                            ]\n                                          }\n                                        }\n                                      ],\n                                      null,\n                                      true\n                                    )\n                                  }),\n                                  _c(\"ValidationProvider\", {\n                                    attrs: {\n                                      rules: \"required|confirmed:password\",\n                                      name: \"Password Confirmation\"\n                                    },\n                                    scopedSlots: _vm._u(\n                                      [\n                                        {\n                                          key: \"default\",\n                                          fn: function(ref) {\n                                            var errors = ref.errors\n                                            var valid = ref.valid\n                                            return [\n                                              _c(\n                                                \"b-field\",\n                                                {\n                                                  staticClass: \"mt-4\",\n                                                  attrs: {\n                                                    label: _vm.$t(\n                                                      \"Confirm Password\"\n                                                    ),\n                                                    type: {\n                                                      \"is-danger\": errors[0],\n                                                      \"is-success\": valid\n                                                    },\n                                                    message: _vm.$t(errors)\n                                                  }\n                                                },\n                                                [\n                                                  _c(\"b-input\", {\n                                                    attrs: {\n                                                      type: \"password\",\n                                                      \"password-reveal\": \"\"\n                                                    },\n                                                    nativeOn: {\n                                                      keyup: function($event) {\n                                                        if (\n                                                          !$event.type.indexOf(\n                                                            \"key\"\n                                                          ) &&\n                                                          _vm._k(\n                                                            $event.keyCode,\n                                                            \"enter\",\n                                                            13,\n                                                            $event.key,\n                                                            \"Enter\"\n                                                          )\n                                                        ) {\n                                                          return null\n                                                        }\n                                                        return handleSubmit(\n                                                          _vm.reg\n                                                        )\n                                                      }\n                                                    },\n                                                    model: {\n                                                      value: _vm.confirmation,\n                                                      callback: function($$v) {\n                                                        _vm.confirmation = $$v\n                                                      },\n                                                      expression: \"confirmation\"\n                                                    }\n                                                  })\n                                                ],\n                                                1\n                                              )\n                                            ]\n                                          }\n                                        }\n                                      ],\n                                      null,\n                                      true\n                                    )\n                                  }),\n                                  _c(\n                                    \"b-button\",\n                                    {\n                                      staticClass: \"mt-5\",\n                                      attrs: {\n                                        type: \"is-primary\",\n                                        rounded: \"\",\n                                        expanded: \"\"\n                                      },\n                                      on: {\n                                        click: function($event) {\n                                          return handleSubmit(_vm.reg)\n                                        }\n                                      }\n                                    },\n                                    [_vm._v(_vm._s(_vm.$t(\"Create\")))]\n                                  )\n                                ]\n                              }\n                            }\n                          ],\n                          null,\n                          false,\n                          3231920384\n                        )\n                      })\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _vm.step == 3\n                ? _c(\"div\", { staticClass: \"has-text-centered \" }, [\n                    _c(\"h2\", { staticClass: \"title is-3  has-text-centered\" }, [\n                      _vm._v(_vm._s(_vm.$t(\"All things done!\")))\n                    ]),\n                    _c(\n                      \"div\",\n                      {\n                        staticClass:\n                          \"is-flex is-align-items-center is-justify-content-center\"\n                      },\n                      [\n                        _c(\"lottie-animation\", {\n                          staticClass: \"animation\",\n                          attrs: {\n                            animationData: __webpack_require__(/*! @/assets/ani/done.json */ \"./src/assets/ani/done.json\"),\n                            autoPlay: true,\n                            loop: false\n                          },\n                          on: { complete: _vm.complete }\n                        })\n                      ],\n                      1\n                    )\n                  ])\n                : _vm._e()\n            ]\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/Welcome.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22c25436b0-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
    +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"is-flex is-justify-content-center is-align-items-center\",\n      attrs: { id: \"login-page\" }\n    },\n    [\n      !_vm.isLoading\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"animate-css\",\n                  rawName: \"v-animate-css\",\n                  value: _vm.initAni,\n                  expression: \"initAni\"\n                }\n              ],\n              staticClass: \"login-panel is-shadow\",\n              class: \"step\" + _vm.step\n            },\n            [\n              _vm.step == 1\n                ? _c(\n                    \"div\",\n                    { staticClass: \"has-text-centered\" },\n                    [\n                      _c(\n                        \"div\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s1Ani,\n                              expression: \"s1Ani\"\n                            }\n                          ],\n                          staticClass: \" is-flex is-justify-content-center\"\n                        },\n                        [\n                          _c(\"b-image\", {\n                            staticClass: \"is-128x128 mb-4\",\n                            attrs: { src: __webpack_require__(/*! @/assets/img/wuji.svg */ \"./src/assets/img/wuji.svg\") }\n                          })\n                        ],\n                        1\n                      ),\n                      _c(\n                        \"h2\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s2Ani,\n                              expression: \"s2Ani\"\n                            }\n                          ],\n                          staticClass: \"title is-2 mb-5 has-text-centered\"\n                        },\n                        [_vm._v(_vm._s(_vm.$t(\"Welcome to CasaOS\")))]\n                      ),\n                      _c(\n                        \"h2\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s3Ani,\n                              expression: \"s3Ani\"\n                            }\n                          ],\n                          staticClass: \"subtitle  has-text-centered\"\n                        },\n                        [\n                          _vm._v(\n                            _vm._s(_vm.$t(\"Let's create your initial account\"))\n                          )\n                        ]\n                      ),\n                      _c(\n                        \"b-button\",\n                        {\n                          directives: [\n                            {\n                              name: \"animate-css\",\n                              rawName: \"v-animate-css\",\n                              value: _vm.s4Ani,\n                              expression: \"s4Ani\"\n                            }\n                          ],\n                          staticClass: \"mt-2\",\n                          attrs: { type: \"is-primary\", rounded: \"\" },\n                          on: {\n                            click: function($event) {\n                              return _vm.goToStep(2)\n                            }\n                          }\n                        },\n                        [_vm._v(_vm._s(_vm.$t(\"Go →\")))]\n                      )\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _vm.step == 2\n                ? _c(\n                    \"div\",\n                    [\n                      _c(\n                        \"h2\",\n                        { staticClass: \"title is-3  has-text-centered\" },\n                        [_vm._v(_vm._s(_vm.$t(\"Create Account\")))]\n                      ),\n                      _c(\n                        \"div\",\n                        { staticClass: \"is-flex is-justify-content-center \" },\n                        [\n                          _c(\n                            \"div\",\n                            { staticClass: \"has-text-centered\" },\n                            [\n                              _c(\"b-image\", {\n                                staticClass: \"is-128x128\",\n                                attrs: {\n                                  src: __webpack_require__(/*! @/assets/img/Account.png */ \"./src/assets/img/Account.png\"),\n                                  rounded: \"\"\n                                }\n                              })\n                            ],\n                            1\n                          )\n                        ]\n                      ),\n                      _c(\"ValidationObserver\", {\n                        ref: \"observer\",\n                        scopedSlots: _vm._u(\n                          [\n                            {\n                              key: \"default\",\n                              fn: function(ref) {\n                                var handleSubmit = ref.handleSubmit\n                                return [\n                                  _c(\"ValidationProvider\", {\n                                    attrs: { rules: \"required\", name: \"User\" },\n                                    scopedSlots: _vm._u(\n                                      [\n                                        {\n                                          key: \"default\",\n                                          fn: function(ref) {\n                                            var errors = ref.errors\n                                            var valid = ref.valid\n                                            return [\n                                              _c(\n                                                \"b-field\",\n                                                {\n                                                  attrs: {\n                                                    label: _vm.$t(\"Username\"),\n                                                    type: {\n                                                      \"is-danger\": errors[0],\n                                                      \"is-success\": valid\n                                                    },\n                                                    message: _vm.$t(errors)\n                                                  }\n                                                },\n                                                [\n                                                  _c(\"b-input\", {\n                                                    attrs: { type: \"text\" },\n                                                    nativeOn: {\n                                                      keyup: function($event) {\n                                                        if (\n                                                          !$event.type.indexOf(\n                                                            \"key\"\n                                                          ) &&\n                                                          _vm._k(\n                                                            $event.keyCode,\n                                                            \"enter\",\n                                                            13,\n                                                            $event.key,\n                                                            \"Enter\"\n                                                          )\n                                                        ) {\n                                                          return null\n                                                        }\n                                                        return handleSubmit(\n                                                          _vm.reg\n                                                        )\n                                                      }\n                                                    },\n                                                    model: {\n                                                      value: _vm.username,\n                                                      callback: function($$v) {\n                                                        _vm.username = $$v\n                                                      },\n                                                      expression: \"username\"\n                                                    }\n                                                  })\n                                                ],\n                                                1\n                                              )\n                                            ]\n                                          }\n                                        }\n                                      ],\n                                      null,\n                                      true\n                                    )\n                                  }),\n                                  _c(\"ValidationProvider\", {\n                                    attrs: {\n                                      rules: \"required|min:5\",\n                                      vid: \"password\",\n                                      name: \"Password\"\n                                    },\n                                    scopedSlots: _vm._u(\n                                      [\n                                        {\n                                          key: \"default\",\n                                          fn: function(ref) {\n                                            var errors = ref.errors\n                                            var valid = ref.valid\n                                            return [\n                                              _c(\n                                                \"b-field\",\n                                                {\n                                                  staticClass: \"mt-4\",\n                                                  attrs: {\n                                                    label: _vm.$t(\"Password\"),\n                                                    type: {\n                                                      \"is-danger\": errors[0],\n                                                      \"is-success\": valid\n                                                    },\n                                                    message: _vm.$t(errors)\n                                                  }\n                                                },\n                                                [\n                                                  _c(\"b-input\", {\n                                                    attrs: {\n                                                      type: \"password\",\n                                                      \"password-reveal\": \"\"\n                                                    },\n                                                    nativeOn: {\n                                                      keyup: function($event) {\n                                                        if (\n                                                          !$event.type.indexOf(\n                                                            \"key\"\n                                                          ) &&\n                                                          _vm._k(\n                                                            $event.keyCode,\n                                                            \"enter\",\n                                                            13,\n                                                            $event.key,\n                                                            \"Enter\"\n                                                          )\n                                                        ) {\n                                                          return null\n                                                        }\n                                                        return handleSubmit(\n                                                          _vm.reg\n                                                        )\n                                                      }\n                                                    },\n                                                    model: {\n                                                      value: _vm.password,\n                                                      callback: function($$v) {\n                                                        _vm.password = $$v\n                                                      },\n                                                      expression: \"password\"\n                                                    }\n                                                  })\n                                                ],\n                                                1\n                                              )\n                                            ]\n                                          }\n                                        }\n                                      ],\n                                      null,\n                                      true\n                                    )\n                                  }),\n                                  _c(\"ValidationProvider\", {\n                                    attrs: {\n                                      rules: \"required|confirmed:password\",\n                                      name: \"Password Confirmation\"\n                                    },\n                                    scopedSlots: _vm._u(\n                                      [\n                                        {\n                                          key: \"default\",\n                                          fn: function(ref) {\n                                            var errors = ref.errors\n                                            var valid = ref.valid\n                                            return [\n                                              _c(\n                                                \"b-field\",\n                                                {\n                                                  staticClass: \"mt-4\",\n                                                  attrs: {\n                                                    label: _vm.$t(\n                                                      \"Confirm Password\"\n                                                    ),\n                                                    type: {\n                                                      \"is-danger\": errors[0],\n                                                      \"is-success\": valid\n                                                    },\n                                                    message: _vm.$t(errors)\n                                                  }\n                                                },\n                                                [\n                                                  _c(\"b-input\", {\n                                                    attrs: {\n                                                      type: \"password\",\n                                                      \"password-reveal\": \"\"\n                                                    },\n                                                    nativeOn: {\n                                                      keyup: function($event) {\n                                                        if (\n                                                          !$event.type.indexOf(\n                                                            \"key\"\n                                                          ) &&\n                                                          _vm._k(\n                                                            $event.keyCode,\n                                                            \"enter\",\n                                                            13,\n                                                            $event.key,\n                                                            \"Enter\"\n                                                          )\n                                                        ) {\n                                                          return null\n                                                        }\n                                                        return handleSubmit(\n                                                          _vm.reg\n                                                        )\n                                                      }\n                                                    },\n                                                    model: {\n                                                      value: _vm.confirmation,\n                                                      callback: function($$v) {\n                                                        _vm.confirmation = $$v\n                                                      },\n                                                      expression: \"confirmation\"\n                                                    }\n                                                  })\n                                                ],\n                                                1\n                                              )\n                                            ]\n                                          }\n                                        }\n                                      ],\n                                      null,\n                                      true\n                                    )\n                                  }),\n                                  _c(\n                                    \"b-button\",\n                                    {\n                                      staticClass: \"mt-5\",\n                                      attrs: {\n                                        type: \"is-primary\",\n                                        rounded: \"\",\n                                        expanded: \"\"\n                                      },\n                                      on: {\n                                        click: function($event) {\n                                          return handleSubmit(_vm.reg)\n                                        }\n                                      }\n                                    },\n                                    [_vm._v(_vm._s(_vm.$t(\"Create\")))]\n                                  )\n                                ]\n                              }\n                            }\n                          ],\n                          null,\n                          false,\n                          3231920384\n                        )\n                      })\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _vm.step == 3\n                ? _c(\"div\", { staticClass: \"has-text-centered \" }, [\n                    _c(\"h2\", { staticClass: \"title is-3  has-text-centered\" }, [\n                      _vm._v(_vm._s(_vm.$t(\"All things done!\")))\n                    ]),\n                    _c(\n                      \"div\",\n                      {\n                        staticClass:\n                          \"is-flex is-align-items-center is-justify-content-center\"\n                      },\n                      [\n                        _c(\"lottie-animation\", {\n                          staticClass: \"animation\",\n                          attrs: {\n                            animationData: __webpack_require__(/*! @/assets/ani/done.json */ \"./src/assets/ani/done.json\"),\n                            autoPlay: true,\n                            loop: false\n                          },\n                          on: { complete: _vm.complete }\n                        })\n                      ],\n                      1\n                    )\n                  ])\n                : _vm._e()\n            ]\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/Welcome.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22445a19f9-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
     
     /***/ }),
     
    @@ -101,7 +101,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
     /***/ (function(module, __webpack_exports__, __webpack_require__) {
     
     "use strict";
    -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_c25436b0_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Welcome_vue_vue_type_template_id_e4731dd0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"c25436b0-vue-loader-template\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib??vue-loader-options!./Welcome.vue?vue&type=template&id=e4731dd0& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"c25436b0-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Welcome.vue?vue&type=template&id=e4731dd0&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_c25436b0_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Welcome_vue_vue_type_template_id_e4731dd0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_c25436b0_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Welcome_vue_vue_type_template_id_e4731dd0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/Welcome.vue?");
    +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_445a19f9_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Welcome_vue_vue_type_template_id_e4731dd0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"445a19f9-vue-loader-template\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib??vue-loader-options!./Welcome.vue?vue&type=template&id=e4731dd0& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"445a19f9-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Welcome.vue?vue&type=template&id=e4731dd0&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_445a19f9_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Welcome_vue_vue_type_template_id_e4731dd0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_445a19f9_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Welcome_vue_vue_type_template_id_e4731dd0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/Welcome.vue?");
     
     /***/ })
     
    
  • web/js/4.js+5 5 modified
    @@ -8,19 +8,19 @@
     /***/ (function(module, __webpack_exports__, __webpack_require__) {
     
     "use strict";
    -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vee_validate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vee-validate */ \"./node_modules/vee-validate/dist/vee-validate.esm.js\");\n/* harmony import */ var _plugins_vee_validate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/plugins/vee-validate */ \"./src/plugins/vee-validate.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  name: \"Login\",\n  data: function data() {\n    return {\n      username: '',\n      password: '',\n      isLoading: true,\n      message: \"\",\n      notificationShow: false\n    };\n  },\n  components: {\n    ValidationObserver: vee_validate__WEBPACK_IMPORTED_MODULE_0__[\"ValidationObserver\"],\n    ValidationProvider: vee_validate__WEBPACK_IMPORTED_MODULE_0__[\"ValidationProvider\"]\n  },\n  mounted: function mounted() {\n    var _this = this;\n\n    this.isLoading = false;\n    this.$api.user.getUserInfo().then(function (user) {\n      _this.username = user.data.data.user_name;\n    });\n  },\n  methods: {\n    login: function login() {\n      var _this2 = this;\n\n      this.$api.user.login({\n        username: this.username,\n        pwd: this.password\n      }).then(function (res) {\n        if (res.data.success == 200) {\n          localStorage.setItem(\"user_token\", res.data.data.token);\n          localStorage.setItem(\"version\", res.data.data.version);\n\n          _this2.$store.commit('setToken', res.data.data.token);\n\n          _this2.$api.user.getUserInfo().then(function (res) {\n            if (res.data.success == 200) {\n              _this2.$store.commit('changeUserInfo', res.data.data);\n\n              _this2.$router.push('/');\n            }\n          });\n        } else {\n          _this2.notificationShow = true;\n          _this2.message = _this2.$t(\"Password error!\");\n        }\n      });\n    }\n  }\n});\n\n//# sourceURL=webpack:///./src/views/Login.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
    +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vee_validate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vee-validate */ \"./node_modules/vee-validate/dist/vee-validate.esm.js\");\n/* harmony import */ var _plugins_vee_validate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/plugins/vee-validate */ \"./src/plugins/vee-validate.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  name: \"Login\",\n  data: function data() {\n    return {\n      username: '',\n      password: '',\n      isLoading: true,\n      message: \"\",\n      notificationShow: false,\n      isInit: false\n    };\n  },\n  components: {\n    ValidationObserver: vee_validate__WEBPACK_IMPORTED_MODULE_0__[\"ValidationObserver\"],\n    ValidationProvider: vee_validate__WEBPACK_IMPORTED_MODULE_0__[\"ValidationProvider\"]\n  },\n  mounted: function mounted() {\n    var _this = this;\n\n    this.$api.info.guideCheck().then(function (res) {\n      if (res.data.success == 200 && res.data.data.need_init_user) {\n        _this.isLoading = false;\n      } else {\n        _this.isLoading = true;\n      }\n    });\n    this.$api.user.getUserInfo().then(function (user) {\n      _this.username = user.data.data.user_name;\n    });\n  },\n  methods: {\n    login: function login() {\n      var _this2 = this;\n\n      this.$api.user.login({\n        username: this.username,\n        pwd: this.password\n      }).then(function (res) {\n        if (res.data.success == 200) {\n          localStorage.setItem(\"user_token\", res.data.data.token);\n          localStorage.setItem(\"version\", res.data.data.version);\n\n          _this2.$store.commit('setToken', res.data.data.token);\n\n          _this2.$api.user.getUserInfo().then(function (res) {\n            if (res.data.success == 200) {\n              _this2.$store.commit('changeUserInfo', res.data.data);\n\n              _this2.$router.push('/');\n            }\n          });\n        } else {\n          _this2.notificationShow = true;\n          _this2.message = _this2.$t(\"Password error!\");\n        }\n      });\n    }\n  }\n});\n\n//# sourceURL=webpack:///./src/views/Login.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
     
     /***/ }),
     
    -/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"c25436b0-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Login.vue?vue&type=template&id=26084dc2&":
    +/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"445a19f9-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Login.vue?vue&type=template&id=26084dc2&":
     /*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
    -  !*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"c25436b0-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/Login.vue?vue&type=template&id=26084dc2& ***!
    +  !*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"445a19f9-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/Login.vue?vue&type=template&id=26084dc2& ***!
       \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
     /*! exports provided: render, staticRenderFns */
     /***/ (function(module, __webpack_exports__, __webpack_require__) {
     
     "use strict";
    -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"is-flex is-justify-content-center is-align-items-center \",\n      attrs: { id: \"login-page\" }\n    },\n    [\n      !_vm.isLoading\n        ? _c(\n            \"div\",\n            { staticClass: \"login-panel step4 is-shadow\" },\n            [\n              _c(\"div\", { staticClass: \"is-flex is-justify-content-center \" }, [\n                _c(\n                  \"div\",\n                  { staticClass: \"has-text-centered\" },\n                  [\n                    _c(\"b-image\", {\n                      staticClass: \"is-128x128\",\n                      attrs: {\n                        src: __webpack_require__(/*! @/assets/img/Account.png */ \"./src/assets/img/Account.png\"),\n                        rounded: \"\"\n                      }\n                    }),\n                    _c(\n                      \"p\",\n                      { staticClass: \"is-size-5 has-text-weight-bold mt-3\" },\n                      [_vm._v(_vm._s(_vm.username))]\n                    )\n                  ],\n                  1\n                )\n              ]),\n              _c(\n                \"b-notification\",\n                {\n                  attrs: {\n                    \"auto-close\": \"\",\n                    type: \"is-danger\",\n                    \"aria-close-label\": \"Close notification\",\n                    role: \"alert\"\n                  },\n                  model: {\n                    value: _vm.notificationShow,\n                    callback: function($$v) {\n                      _vm.notificationShow = $$v\n                    },\n                    expression: \"notificationShow\"\n                  }\n                },\n                [_vm._v(\" \" + _vm._s(_vm.message) + \" \")]\n              ),\n              _c(\"ValidationObserver\", {\n                ref: \"observer\",\n                scopedSlots: _vm._u(\n                  [\n                    {\n                      key: \"default\",\n                      fn: function(ref) {\n                        var handleSubmit = ref.handleSubmit\n                        return [\n                          _c(\"ValidationProvider\", {\n                            attrs: {\n                              rules: \"required|min:5\",\n                              vid: \"password\",\n                              name: \"Password\"\n                            },\n                            scopedSlots: _vm._u(\n                              [\n                                {\n                                  key: \"default\",\n                                  fn: function(ref) {\n                                    var errors = ref.errors\n                                    var valid = ref.valid\n                                    return [\n                                      _c(\n                                        \"b-field\",\n                                        {\n                                          staticClass: \"mt-5 has-text-light\",\n                                          attrs: {\n                                            label: _vm.$t(\"Password\"),\n                                            type: {\n                                              \"is-danger\": errors[0],\n                                              \"is-success\": valid\n                                            },\n                                            message: _vm.$t(errors)\n                                          }\n                                        },\n                                        [\n                                          _c(\"b-input\", {\n                                            attrs: {\n                                              type: \"password\",\n                                              \"password-reveal\": \"\"\n                                            },\n                                            nativeOn: {\n                                              keyup: function($event) {\n                                                if (\n                                                  !$event.type.indexOf(\"key\") &&\n                                                  _vm._k(\n                                                    $event.keyCode,\n                                                    \"enter\",\n                                                    13,\n                                                    $event.key,\n                                                    \"Enter\"\n                                                  )\n                                                ) {\n                                                  return null\n                                                }\n                                                return handleSubmit(_vm.login)\n                                              }\n                                            },\n                                            model: {\n                                              value: _vm.password,\n                                              callback: function($$v) {\n                                                _vm.password = $$v\n                                              },\n                                              expression: \"password\"\n                                            }\n                                          })\n                                        ],\n                                        1\n                                      )\n                                    ]\n                                  }\n                                }\n                              ],\n                              null,\n                              true\n                            )\n                          }),\n                          _c(\n                            \"b-button\",\n                            {\n                              staticClass: \"mt-5\",\n                              attrs: {\n                                type: \"is-primary\",\n                                rounded: \"\",\n                                expanded: \"\"\n                              },\n                              on: {\n                                click: function($event) {\n                                  return handleSubmit(_vm.login)\n                                }\n                              }\n                            },\n                            [_vm._v(_vm._s(_vm.$t(\"Login\")))]\n                          )\n                        ]\n                      }\n                    }\n                  ],\n                  null,\n                  false,\n                  327051097\n                )\n              })\n            ],\n            1\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/Login.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22c25436b0-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
    +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"is-flex is-justify-content-center is-align-items-center \",\n      attrs: { id: \"login-page\" }\n    },\n    [\n      !_vm.isLoading\n        ? _c(\n            \"div\",\n            { staticClass: \"login-panel step4 is-shadow\" },\n            [\n              _c(\"div\", { staticClass: \"is-flex is-justify-content-center \" }, [\n                _c(\n                  \"div\",\n                  { staticClass: \"has-text-centered\" },\n                  [\n                    _c(\"b-image\", {\n                      staticClass: \"is-128x128\",\n                      attrs: {\n                        src: __webpack_require__(/*! @/assets/img/Account.png */ \"./src/assets/img/Account.png\"),\n                        rounded: \"\"\n                      }\n                    }),\n                    _c(\n                      \"p\",\n                      { staticClass: \"is-size-5 has-text-weight-bold mt-3\" },\n                      [_vm._v(_vm._s(_vm.username))]\n                    )\n                  ],\n                  1\n                )\n              ]),\n              _c(\n                \"b-notification\",\n                {\n                  attrs: {\n                    \"auto-close\": \"\",\n                    type: \"is-danger\",\n                    \"aria-close-label\": \"Close notification\",\n                    role: \"alert\"\n                  },\n                  model: {\n                    value: _vm.notificationShow,\n                    callback: function($$v) {\n                      _vm.notificationShow = $$v\n                    },\n                    expression: \"notificationShow\"\n                  }\n                },\n                [_vm._v(\" \" + _vm._s(_vm.message) + \" \")]\n              ),\n              _c(\"ValidationObserver\", {\n                ref: \"observer\",\n                scopedSlots: _vm._u(\n                  [\n                    {\n                      key: \"default\",\n                      fn: function(ref) {\n                        var handleSubmit = ref.handleSubmit\n                        return [\n                          _c(\"ValidationProvider\", {\n                            attrs: {\n                              rules: \"required|min:5\",\n                              vid: \"password\",\n                              name: \"Password\"\n                            },\n                            scopedSlots: _vm._u(\n                              [\n                                {\n                                  key: \"default\",\n                                  fn: function(ref) {\n                                    var errors = ref.errors\n                                    var valid = ref.valid\n                                    return [\n                                      _c(\n                                        \"b-field\",\n                                        {\n                                          staticClass: \"mt-5 has-text-light\",\n                                          attrs: {\n                                            label: _vm.$t(\"Password\"),\n                                            type: {\n                                              \"is-danger\": errors[0],\n                                              \"is-success\": valid\n                                            },\n                                            message: _vm.$t(errors)\n                                          }\n                                        },\n                                        [\n                                          _c(\"b-input\", {\n                                            attrs: {\n                                              type: \"password\",\n                                              \"password-reveal\": \"\"\n                                            },\n                                            nativeOn: {\n                                              keyup: function($event) {\n                                                if (\n                                                  !$event.type.indexOf(\"key\") &&\n                                                  _vm._k(\n                                                    $event.keyCode,\n                                                    \"enter\",\n                                                    13,\n                                                    $event.key,\n                                                    \"Enter\"\n                                                  )\n                                                ) {\n                                                  return null\n                                                }\n                                                return handleSubmit(_vm.login)\n                                              }\n                                            },\n                                            model: {\n                                              value: _vm.password,\n                                              callback: function($$v) {\n                                                _vm.password = $$v\n                                              },\n                                              expression: \"password\"\n                                            }\n                                          })\n                                        ],\n                                        1\n                                      )\n                                    ]\n                                  }\n                                }\n                              ],\n                              null,\n                              true\n                            )\n                          }),\n                          _c(\n                            \"b-button\",\n                            {\n                              staticClass: \"mt-5\",\n                              attrs: {\n                                type: \"is-primary\",\n                                rounded: \"\",\n                                expanded: \"\"\n                              },\n                              on: {\n                                click: function($event) {\n                                  return handleSubmit(_vm.login)\n                                }\n                              }\n                            },\n                            [_vm._v(_vm._s(_vm.$t(\"Login\")))]\n                          )\n                        ]\n                      }\n                    }\n                  ],\n                  null,\n                  false,\n                  327051097\n                )\n              })\n            ],\n            1\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/Login.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22445a19f9-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
     
     /***/ }),
     
    @@ -56,7 +56,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
     /***/ (function(module, __webpack_exports__, __webpack_require__) {
     
     "use strict";
    -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_c25436b0_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Login_vue_vue_type_template_id_26084dc2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"c25436b0-vue-loader-template\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib??vue-loader-options!./Login.vue?vue&type=template&id=26084dc2& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"c25436b0-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Login.vue?vue&type=template&id=26084dc2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_c25436b0_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Login_vue_vue_type_template_id_26084dc2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_c25436b0_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Login_vue_vue_type_template_id_26084dc2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/Login.vue?");
    +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_445a19f9_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Login_vue_vue_type_template_id_26084dc2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"445a19f9-vue-loader-template\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib??vue-loader-options!./Login.vue?vue&type=template&id=26084dc2& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"445a19f9-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Login.vue?vue&type=template&id=26084dc2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_445a19f9_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Login_vue_vue_type_template_id_26084dc2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_445a19f9_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Login_vue_vue_type_template_id_26084dc2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/Login.vue?");
     
     /***/ })
     
    
  • web/js/app.js+84 24 modified
  • web/js/chunk-vendors.js+3266 1204 modified

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

7

News mentions

0

No linked articles in our index yet.