diff --git a/api.go b/api.go index ee35271..6b72c29 100644 --- a/api.go +++ b/api.go @@ -5,14 +5,17 @@ package main import ( + "bytes" + "encoding/json" "fmt" + "io/ioutil" "net/http" "strconv" "strings" "time" "eonza/lib" - "eonza/script" + es "eonza/script" "eonza/users" "github.com/gentee/gentee" @@ -59,6 +62,11 @@ type TasksResponse struct { Error string `json:"error,omitempty"` } +type Feedback struct { + Like int `json:"like"` + Feedback string `json:"feedback"` +} + func jsonError(c echo.Context, err interface{}) error { return c.JSON(http.StatusOK, Response{Error: fmt.Sprint(err)}) } @@ -89,7 +97,7 @@ func compileHandle(c echo.Context) error { title = val } } - header := script.Header{ + header := es.Header{ Name: name, Lang: langCode, } @@ -131,7 +139,40 @@ func runHandle(c echo.Context) error { return jsonError(c, err) } if console { - return c.Blob(http.StatusOK, ``, rs.Data) + return c.Blob(http.StatusOK, ``, rs.Encoded) + } + return c.JSON(http.StatusOK, RunResponse{Success: true, Port: rs.Port, ID: rs.ID}) +} + +func runScriptHandle(c echo.Context) error { + var ( + postScript es.PostScript + err error + ) + if err = c.Bind(&postScript); err != nil { + return jsonError(c, err) + } + if !strings.HasPrefix(c.Request().Host, Localhost+`:`) && tasks[postScript.TaskID] == nil { + return echo.NewHTTPError(http.StatusForbidden, "Access denied") + } + rs := RunScript{ + Name: postScript.Script, + Open: !postScript.Silent, + Console: false, + Data: postScript.Data, + User: users.User{ + ID: postScript.TaskID, + Nickname: GetTaskName(postScript.TaskID), + RoleID: users.ScriptsID, + }, + Role: users.Role{ + ID: users.ScriptsID, + Name: users.ScriptsRole, + }, + IP: c.RealIP(), + } + if err := systemRun(&rs); err != nil { + return jsonError(c, err) } return c.JSON(http.StatusOK, RunResponse{Success: true, Port: rs.Port, ID: rs.ID}) } @@ -329,3 +370,36 @@ func trialHandle(c echo.Context) error { } return proSettingsHandle(c) } + +func feedbackHandle(c echo.Context) error { + var ( + feedback Feedback + resp *http.Response + body []byte + err error + ) + if err = c.Bind(&feedback); err != nil { + return jsonError(c, err) + } + // user := c.(*Auth).User + jsonValue, err := json.Marshal(feedback) + if err == nil { + resp, err = http.Post(appInfo.Homepage+"feedback", + "application/json", bytes.NewBuffer(jsonValue)) + if err == nil { + if body, err = ioutil.ReadAll(resp.Body); err == nil { + var answer Response + if err = json.Unmarshal(body, &answer); err == nil { + if len(answer.Error) > 0 { + err = fmt.Errorf(answer.Error) + } + } + } + resp.Body.Close() + } + } + if err != nil { + return jsonError(c, err) + } + return jsonSuccess(c) +} diff --git a/assets.go b/assets.go index ca9bf5d..08bb24f 100644 --- a/assets.go +++ b/assets.go @@ -209,6 +209,23 @@ func FSMustString(useLocal bool, name string) string { var _escData = map[string]*_escFile{ + "/eonza-assets/init/data-print.yaml": { + name: "data-print.yaml", + local: "../eonza-assets/init/data-print.yaml", + size: 1330, + modtime: 1617688774, + compressed: ` +H4sIAAAAAAAC/6RUTW8TMRC976948h42UeuIEwdL3BCIU5EqcUEcnGTSOPLaiz1ePgr/Hdl1tgtpIwK3 +nbf2+5ixHYnZuLuoGsDpnhS2mrUcgnHcAGzYksJrzRrvKzZo3it07Yopcmy7BrD+ztJIVuFlw4FINbKy +RWI56mD02lIDjNomKmKANZEVPn4qxaN2KWNa55/ihShl2VY084q2m+jNbkXefc+b/EBOgUN6Uqd8SWz6 +QYE+J20LADj6OtMBnGeFnbaRKlClhZjqMPnc7I3dBnKZ/egoEKfgqqsj+CUYJrnxLvqTNnBx8ENW/rYk +rIWU8qKoZCMVg4MONcFJ+sg6cLwwfnff/WX+oiwP0bvHyVV3QKCYLBcKM816Nt5/mO5zkXH/86zDb7q3 +/+9wfrzjmXM37S+kK5f69reGxtRPnDsfSG/250JnSaZeZfAI1JYV/iz9TProU9jks7ilJ+JneHYYAb8+ +YMQrvCX+oMPN+rAQo7ZiOS24LT8WIqZeXNdl7xw/AEtcIRtdjNcQRUksV8bxYrm85G5cVbXb1Cu0MfXH ++3GTeEiMNyY/UrW3+Xlqmz/od+aEWw8Due3UXiCvedjTzam62fuUx/QrAAD//zreA34yBQAA +`, + }, + "/eonza-assets/init/demo.url.yaml": { name: "demo.url.yaml", local: "../eonza-assets/init/demo.url.yaml", @@ -257,6 +274,31 @@ JV7py2vJu7m/d2d7v5e345zJTZF2KxDrqbkOqCTiUhlbFuRWw0fp31VMk52358eFKzO4NAhQ6PHUgDAH `, }, + "/eonza-assets/init/test-data.yaml": { + name: "test-data.yaml", + local: "../eonza-assets/init/test-data.yaml", + size: 2505, + modtime: 1617688774, + compressed: ` +H4sIAAAAAAAC/6RW227cNhB911cMKATbFtZ6d31JS8APBXJB0MIu6m1fqmJBS+NdthSpkCMnqet/LyhS +1zhG0rws7OHM0ZmZcyg5JJJ673gCoEWFHAgdZaUgkQCQJIUctugIXoRQLejAYZEufZ5LFwmAMnuFd6g4 +nCe1sKJyPMkiWintgLNIl768LaIPNXLYJGQRh3SHlN0JK8WNQpcA3AnVYEsOQElH4a8sxDmw9eaEtSGf +armPr2cpp2fn85TNLOU+1znTTZUzDjk7Oc3ZkY94riGUmoZupcI0nngq/uQPyHWAvo+PAMhZ220ofCWt +I3hDWOXsCHLWPtEfZacPR33ttOYaC6PLrmiE2xfnLFuvcvbQAvyZ64dJg2T+Rr1rN9iP1TS2wKwwJSYA +pkbNgWyDswnvSnQFBxbgfDaHxbMbU3545ldWHKQqLWqf3CEXjQ0rniIB7OStb4PD4rvXSL8L+w0rpWXf +wsUFrBYD37FMOlBl9plpqG7oEeAotZ+vXu/eXL66ilHC9xSFineoyS2Xy0dV9YSobhtdcBB1jbr0u4/Q +raQ5oNH/iCyCU1W3pwE/qqONuObGEQe2YgN3r/xS2nTRM7KNzlxhZU0zPn5tHJgjy+GarNR7qNA5scdc +66bisHq/OTk9y7V0YYW5Do6ciDTXQ1/QazTrfDiosj/rmeYs9SZqQWZlnTQjbBDopxA2aR51FPrkbWtZ +baUOW3VSoaaow35TCrFetqOeDYZkhabxkz1brVhfUFgUhGEtj49ybO7nz7/c2CNzdvP8tK3X68+09aio +R12ffOzptrFwKf//Ie2Rsnd4U4v9XP6NVRwORDU/PlamEOpgHPE0gNfGUnosanlshS5lmUws62N/OaP7 +p9TCOsza0PQhFl2jqL2bfNHUFx3MyBxfZNeDcDOjuoPYnJ2P7OnkXj/hTT/bdLg005bS0v+k25fX2932 +6qeXlz05PyyLbxu/kCm3A4oSreNw/9D+XyEdTMnhl6vrbRL5uY58APO/ycQ8FHCHlPgmnsxsRHYxSe7H +Oxtw6Gaa209llOtjMe0zldEZbywM/AqpWhRlFi/TcboPhYxF79nF9AruMd5ZSf5lp535CCe8J/7NYue/ +/nj5Ai5gNKR4cPXb1sdNQ+nwLYMKCR9j130UDcy6GuEcWpJGP/U1U1Q1B3zbCBWfrg1xuBXKzdTBfjhf +fb9erTeryRvfN/9fAAAA//+sQGPAyQkAAA== +`, + }, + "/eonza-assets/init/test-email.yaml": { name: "test-email.yaml", local: "../eonza-assets/init/test-email.yaml", @@ -498,18 +540,18 @@ tE/XQkH677E/AQAA///sgBH0LQYAAA== "/eonza-assets/init/tests.yaml": { name: "tests.yaml", local: "../eonza-assets/init/tests.yaml", - size: 1375, - modtime: 1615266510, + size: 1425, + modtime: 1617688774, compressed: ` -H4sIAAAAAAAC/5SUsY7UMBCG+zzFKFsEilxBQWHpCiRaEDohUa6GZLJrNLFz9iR7R3dLCRUNr4GQTqLj -FZI3Qnayq83u6aR0zh/P98947PEkos3GqwTAYE0KhLz4BEC0MCnIVuugr7IEoEHZBuUq7olSSb6Im8Ii -Kmw3TB2xgteJOCKV5BPZk+QdOo2fmYJDh9xSdAZg7WVc5SD3DSlIX6Xxe9oXfbFpQg7RZ/zjxoSDevSp -rKufwdtGtDVeQXowELoTBdkHlG0Ihiwja75iHshZFg2gslySg4PzZY5PZRKEvNKX5ZbahYIOAatsHrLT -prS786C1rgprSgXvsHD2Rbq6sn6VvoTra0iniHTO+eKtmSlXjbMbh3WtzeaMXtuSFDiSDl0UxqWC+t6R -LKbstprpjDNqS0kziLGnyaD35GI3n+l3UTcK6LZFnnplrCiokD3NL9hbqrBlgRvyLctpY8cjWIh7b58g -xfzvlqLS9IKxFPHp2I9jTfN27JwWygtrvI0bT49zfCAfyYdZAeiKre7Iz+/apC676AG88G1QjZrnkr/l -hHGaYmSm1zKOppvWADJDOTX3MN4A1iPhDXOsLIiuncX2v/rf/b/h2/Aw7Pu/w374Af2f4aF/hGHfPwZ1 -+H6K6n+e//wfAAD//w403FNfBQAA +H4sIAAAAAAAC/5SUsY7TQBCGez/FyCkMhVNQUKx0BRItCJ2QKKPBHieLxru+3XFyR3ehhIqG10BIJ9Hx +CvYboV07UZyc7uRu/Xvm+2d3ZteTiDZrrxIAgzUpEPLiEwDRwqQgW6yCvsgSgAZlE5RljIlSSb6IQWER +FbZrpi2xgteJOCKV5CPZk+RbdBo/MwWHLXJL0RmAtZdhlYPcNaQgfZXG7zEu+mLThBqiz/DHDQUH9ehT +WVc/gbeNaGu8gvRgIHQrCrIPKJuQDFlG1nzFPJCzLBpAZbkkBwfnyxofqyQIeYmCZ+WU2oX9HOIX2TSj +0pcH9EzKTpvS7s6TVroqrCkVvMPC2RfpYmn9In0JV1eQjhnplPPFWzNRlo2za4d1rc36jF7bkhQ4ki26 +KAxLBfWdI5lN2W000xln0OaSJhBjT4tB78nF/j8xIUXdKKCbFnnsrrGioEL2NB3Jt1RhywLX5FuW01EY +jmAm7r19hBTrv52LStMLxlzEp2M/jnuatmPntFBeWONtDDw9zuFKfSQfXhdAV2z0lvx01kZ13qAH8My7 +QTVqnkr+hhPG8d0jM96W4TG7bg0gM5Rjcw8PIsBqILxhjjsLomsnud2v7nf3r//W3/f77m+/739A96e/ +7x6g33cPQe2/n6K6n+c//wcAAP//q0IfFpEFAAA= `, }, @@ -517,7 +559,7 @@ hHGaYmSm1zKOppvWADJDOTX3MN4A1iPhDXOsLIiuncX2v/rf/b/h2/Aw7Pu/w374Af2f4aF/hGHfPwZ1 name: "welcome.yaml", local: "../eonza-assets/init/welcome.yaml", size: 5387, - modtime: 1616405065, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/7RYbYsbR/J/r09RGZGsvayk2H/iP0y0ghCbnMG5+LI+m2CMac2UNH076p7r7llZfgB7 DZeADYHjXh53L+4LrDfeZP20/go93+io7pnRSCutTeBe7U531a+qflXdVS2NxnAx1mELQLAJhjDFNJIT @@ -560,150 +602,157 @@ DB+TtWKf8kQuLFkqC83+vXhmX9gjkneBFU/sgX1FuXtp3xQ/e+reFE+LH73DtPSbPbC/0LLj8rU9gJLn "/eonza-assets/languages/en.yaml": { name: "en.yaml", local: "../eonza-assets/languages/en.yaml", - size: 7649, - modtime: 1616382267, - compressed: ` -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 + size: 8001, + modtime: 1617688774, + compressed: ` +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 +U7//CQAA//9ZYPAUQR8AAA== `, }, "/eonza-assets/languages/ru.yaml": { name: "ru.yaml", local: "../eonza-assets/languages/ru.yaml", - size: 12208, - modtime: 1616382303, - compressed: ` -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 -vFLvPbHDLCrE/wYAAP//YkE6ArAvAAA= + size: 12770, + modtime: 1617688774, + compressed: ` +H4sIAAAAAAAC/5x6328bSXL/e/8VAwHG3gGyDHwf9WJ8ERySIBtkb5M8BXloDZvkQMOZ8fQMKd2TSNnn +XchnnX17WSO7stbrTe7pcBQlShQpUv9C9X8UVFX3/CLly+bFFrtrenrqx6c+Vd1yL06zXQ/OzRFMzRFM +YGxG5pWQe3GO4+89uDdHsIJLcwRjuIM7mArp+0rrXQ++gZUZmpE5hnsh/SyIIx6dwi2OwwRm5pRm+mrX +g9/D3IxgBhNYmhO4FbLV8nstXgcuYEzyI/PKgyWsYGKOzWsP5rCCOxjDEq7MsQcTzwxhbo5gBvdmhEu0 +ZX/TEhMP3sENXNC+l/TGKYoHuE0Z2kfuYQULWOJDMIWFecWCuIMxfRp++y3MYSZkq69VlgVRBz/yB5r/ +CmaoOLf+xsfCTpwGWbdHCljAJaxw92YEd0KGYTzgxeCGLPCV03+EenknZBTFmcQt73rwBqZmCPewQCF6 +1em6ecaeGXqwMiPUkjkxI3MCdx7MzNC8gBVc0U7vWK9XqFsPrmCBK41hYkasbTLTDYzNb2EGM/sS81t8 +vxmibYRMkjDwpbP5OVlkASu4JnWQ3VO/aw1vjswLMjytiHN6f9eDD7TwGNVYep7ej9Rg86RHCljgjshD +YIo2zbPY7yp/nxRc+wTzkh6YVzU1IT+fw9gjj+F1FrxpuBV7qZL7GwJiL88yMsJ/0iP3uILwZeQrdKX3 +aE5aYyz8row6Kow7aEAKAzb4qUc6ZTH3Otr4Xnyw68GfYApzuIAVzM2QJ/KkJTNld+O2bv17ffNT4cdh +KBOtSHssvTTHtH83JcNwfdaDiRnS870efeR7uDBf2yVxqOL4xdQmZ/fjXiJTlR0muIcfMUg9MyTfnLiv +NqckFoSKtInGukffMafWN+xszB5SxLoHF+YEFp45piDAWFnCiuCgXITiEZUyhuWO8OOI4x03/pFcZ2VB +yY8jHRdbWJJXL0hPURZEean0K0KIa1a78OPk0D5zX76rmGqXX3Vf3Qrp65FGVHqkhZ9K3VUt+ryFgzfh +p4dJFndSmXTpFe67XXSb57zxPE2k1oM4bZGKpzA3x2SRWw/uYUwvxS9pySDEhf5IIXlF6kcjrERLZnJP +kpu8IeQ5QQywKGleCOt031AQjUVLHlpUX+Kyai/vWJdfwBiuKBJaqt2XIantW/KLl84pcVMrzxzDHe3r +JavDvBYtFfpx1A5SRMa35gRl2CvxRSfbnnmJH+8hbFEwj2CKMrjTRYHy5gSuELkLEL71zO/oJwWaGf3C +nPzyKb5M0Ud9rD6Pw0EvyFTqQNguVqQDlNB+GiTZ/32T5neEAaNa5sItJcXKVTf/7JH+jPCak5N5BTfm +GKZmZIaIIRMPrsyROYZLmJkXtTVhbF54v3ikfylaSvsUq/e0kPVAHM4SmXV3Pfhvq7SJxUYYW0xrBVru +kRejheewMK/NS/MGljijIlmf4E98Am/rAygbBvu4yhkhhYWAGX+FaMWDKIxly8bLB4Lolwz0jWjZ2dkp +xHVFloOulScUbxhGy0ZAtg4j2Qt88t0ZOiXcVVICoq9qBRlZfkoGI3ZSWwIFgkz1HhKye617HIzpuTht +PLUyR0JFftwKoo7DHXYmMh2Dn4oydZAVkT1E3FtissJ3XaJPIbdiyBMq6quDQGeMy3Nyi+si8MyQgGHK +VIx9SKhnOZGfHywkr4RKU9XbIzhCB0ec8ChYr/EB/FGkLXNK1nb+zT8pedgsUDKhql+akx18SztQIb7l +nBB1ah29yu9OeMycYlYzp6XTr+DCnBIhqdK0O1q2p7SWHXajFUl+XWLPCi6QDCGHuIA5TPGBKPD3I9lT +bisYYc7mvLrdBinzATWmaRSnedSI3Ud6w+YReG8wvihzzWGMroLbx1XiRG1YhI2ALntLiLQk0ZRiz33L +GMeSUB4mesDpDd3IcgLiN2U2OLWM0MbolF1q4hGOXcMMzet9EcrDThrnUQtXTtWzpq1+nl0Y3Kyi1wDu +ryg3k3qfoNlRMUR68xXtfMVOs3DBTIXGymNyS4XDkQtGZgiIPRekgLF5jamyiZsrmHifUIf3b4/6/y5U +X0WZtm52gcyaA7av0sMs6HHeH8M1+jFMtxFsmF9tE1oRbd4m/n2Kk7hxZDxTHF0STHDGUQd+mLeUhcZ3 +5DJsNsuBMZ8Sw8UZCk9kxLT3yx3SE37w9Y5QB4FNW0z9aeDn51xKsrf4k6BgreQwJ09pZRmqopZsVCQj +G2dzXJtfwWwO3fCG8JFqFXTqgyCLI+fu3xJMIUTayqhizaIcXJhj4hXTaqjPhDpIuIz6gXVly6FXdoKZ +cGPOMWF1kHBh/GcEYVQ5orRoywBJS6T8bNfb4tx2Rx977JGF0YwzrifNK4oRrMaaNdoKbr1fxdFv5A5/ +ISGD0/fuFr2GALka7W3Zx0JSoQuuV7ZtpVp7koqg9zxVlIhmCBOMUvOqkCJu/Yb42yXFzZhi4Y6MwVhx +Y05gsuPBWyrB6DuXNU5X5ghGqjt0JjIFlcXsqg1POd4ptmDT3EcCxGvnagvzmhzDvuKaWAozxtNtdhUM +HcciTwvvH9ax34JT1SHG5oXAoCoy5k8Er4sncO7Iz2Y4wocsjL2DO1Toc34SjRKEqrIW5s8ZkmluC8xd +8Qcz0Q6iQHc5UVPF8bKgZTxFBq/6O8J+Ow5bxE6LPdqh2oYK+jYT7TjtxBmnBFyMo2xWKw2eolSPdo27 +u6NF0x6WBUz7yyz+nCXMCUlwstoqn9stOg3o02RCTIEU4fhq5wG1IooBxXVeSrZSJbJb9D5d7pE1u25m +0c4j3/ZHfjLHsIS5ZVJuQtdnYCY6KlIpsaCyzu2E8R7WhOiTfyA6eUEUp2gIsdFsjkVOI7oqTGyKvIOV ++dq8Et2gVWQ7CzY4lKVUQtnhspsx41WxgiMoG5HXTEU30FmcHjYbCKIbk9H/QDEx4fAW3Zg2bV1zaLsW ++O9YdOM8pdbC2AxFN+uFHHV/9y//+LlHKZsYpgjaWCnXa2SYiqBdxAvWkbb14rx/c7AEnShO2TMvMfvS +zquUOuhZZH1HNTvjKg9mQRaq+sxanhZBROlRpz6lMDbIpCSj9UbXrW10iSBqx7T00vl0QbmDqKtSypRn +lAwWhOKVHUdB5orbM6492DEQ7xGTavWuCKK+DIOWY7ubymFiZEx/l9T1wW91gIGc3K7BYXxGZRq3a06a +Vb6VfLD4fmD9RLZaKTVx//6Lx1jFU7trKIJk0A0yFZLJP9uCN0RKTmC6VReE8WcilFEnJfT7C2WLOXEv +gg2SMcfmyAzNCQnmTNGtpAilzlzT7hxWhdaxxNjUqnNkwQxthT6mXlsY+LKTKtVTEdrvO5gRo1rCDcwo +sthGBBuX1Df9qrBTGPgq0ipPw12vm2WJ3n3yZDAY7ChKzHHaeZLmT1qxr59YyR0MIOHK2kZFyxqDD7bi +XuE3UgvwO3w1/l12nN4SBqzgiqp5jLdLShvzWicqjDsBotpbC60zHAlVnxqOH52CYIlOT2ugPuIO9+3f +OspmhwqyAzdWuGAplvKYF17ZcKiWQzCFW9FTUb7rwff0wteCay6uY9/DBZPtDeiMJFj0giin3sv3jhHD +WPTiiPoQ3zsizCOVjpWjyC/JY2lWdwk6tuAvWDlvw0/Mnr/HeNiG36Pb0C+43YZ35jUs+b8Fzk3gchs+ +4Ma2qVYebcMZrJCLf4OBsSV6cV+14gFXY1cEgWV7lHzmhmSo4/CgRDUvi0jak48fiOC5tkOkOq6l/54w +H7226CUc1/qUkcoGccqt0CnBUYQVB8ECp49LpG+Ce+aNUxAc9btBuPGMZWI3784vXq+dtuDjFfJzRpta +ccnR4EEo6ajKmfWeWlspUgPbSDmzMNFs1KFI0RCrCFWPeyI14I+vnDxxLbssX8r8aWjVd5DZ3PaBIcYc +Uw04bagapiTrSvqqKHVWKwW8qDYQMHRgQvkC7XcnopghG3cbR6ryg7/rj/iX1PuVJi6VEXzEMiyYc4nx +PDer7QG3G2dBu3IE85HggI503JEAKiDv7SnmADP+WhG324EfyFAHGbf5npMDzip8h9Q+RgQRWCr80z+I +OFJY5OKuKeavbHIfM1isJ6Y4CoNIWY70HpaE2bewLGoHIky2/fG+clzFg3tpPNAqbc4RYnJ5cww3XLmK +OOEzvUSm3PSkr1lRVVJhcLw7LiBGuKCgEvMdfAfvRJxnSZ7ZotuyeSaqEy6QRNxX6SBlnZ3bmpksQpSj +ZHVNWmR9aFouwLG6tsYnzrgSmcqeylSquRRofEfFl84rJkikzlSNJTEq2BbwuT0aSmSWqTSy3/69bSyM +H2wsFBk0Uam2Z6nnNuYaShdI60JKE+eW6iWp6gesAOvxd1TMH4kkjTup7PU4rTS7CI2eK0oTFHyRxpgj +y5DniU+n9SSNH/dVqoM44qz+LFfaQjLmWxuMIlW+ijJKSme2kzvhDpSLxa/LnidK56m2iG8PZmhX7sSb +fX9GIJKqdqpsQehO8tg8qeoEOiP6j6tMubuKw+rAjl1SqX2KlJABed04JN6Tmd/d9b5UnV8deH9D77in +M5tSqieDyLav3js/IZY0tecN3E0zpygb9xUft3+sH8NQW6jRlDAvRKqSQOu83pt155eO5V24JIDiofSV +rVzvLIaxSp7lQUoV8p+5e3RvG5ObWpCwEqnSKvt/bflz2lz3lYC8pF76jdvsFQXyC0p4rqhf8v2EMREa +bvzPEEqp1UCVxVPcRh5mfemOAm7Ibq/4CMFCg02U01rXckz61jnZBT3ypnLg63TCPnJO+OuKRJphmvmD +hQH8qd1vmIk0jrN9ZY8xyYWmBHJUK1GnUXAabLSmcKk80kgIOCTW5r2ylUZW0LJvbW9eWMfgdXBCanfO +35j1qCU0d7dATuCW5O3R60ZxPm59TXKfOFTjA+TKecYbWO548F/Vs7vh+vpTuITVU6F9GT2zGck28pds +R9v6+PWXttrELPW3MbJ17//nWVdFGebpOBVaydTvtgLC8Xf2agIprtoh3dg/4kddv+nBZx0nMydCIxwF +2SHfHCEPuidwX1ry9EpoFVIrk+qFCzqh0irEeq0Ys1cOUDWnXLx5xHtHBLnP+a4PjIVWWSUN1U8j1jmN +qNwoOFu7RqD9rmrloW18uQYg4T/l0rnYZGQ7qOujqAgaz5Trev+V3pOrNi1C2Vsg7NC0Ep3fNy8njIkA +4M/bMkO4Vt4MFrXGtbWmjV5KCOudDq1Cvh51RsB+53BqyXVw+e5qv+2qSfPJea2h8ySMZWuTaZ+X/Ut7 +G6iKgmSTTxqsm2e2dnpLnYDqWbAOok6obL/XMUf7PFZ3zDfLbpQOfqOKYhVJzpHQ+0FScII6JOk4T33l +xy17WrKp+aOfhT7m9n/+9ef1Nr1LgzqTaVZt76DKcEy19vgyxqia9OntsGCRLA2IAjWOwMv0Zj+wOFvC +x7Kc3JSOpEa4otBZK4gSLN6L0KG2PEIpf8uEqShKhsGee7wqx7nkghreC6TArFWMzixO6vcY6qnPws2R +vTf1v+zSPqV1nQLWrgV8SgX5Hqegc7KWyzs639M2XTYoQKPPtiFnEuPQeWLbix9gQWeMF3wSim+5ogeu +2WNznaioVWE91dxqZ9X6PFVWAgu4noxkxxajM3slaUQnkkfsKWiWlySq7fdc8S0HgVAURDKj9c+rGCMy +xYcTP1redyKa9wFoQKZKEllfUgfgk/Fk2d3bgsjhQMovwainEMMX2fbrGQVeybSzeJ+KtB9hhYUnbjKV +kQ5dD8MVMuyd5A09Dsfzh8xPQi15qHe9LVsHfEWI+0gzmcT/+crSrUdIVb33SF/sESnCamNeL3l3tnh5 +ti5vbsZZ+ectVIdw+u5B3OYjkg10kIPvE3RQVK/Fib4M62c4Df8WD7R0RV+mgdxjGnDeDAE7H7WoVDhf +Z5WUvKkAmJshyXJXZpNooz/Tl2unTvVnVnArbFW1W6/JHqj4cJgb+R/cGDe5Hmzj59F+FA+iXNtO05TI +3MRW25Uia9OtjkcHIo+Y2p49cCej0W/Kk04qWypJ44qK7FE4puEv0lgUSfXbZt0g8iSL7WW6dw/d57pf +735XG1hUx/7rl58L/OSm+jd95ilJ6ocut8BMDGSQFaeR/0GgZG+U1g4m0QFKymKP8pp3fHEt1wbG0L4q +UGMg06is5KmbZtPMdaX+HCi1X7tf6JV3IXCrSu1XWsKVaxJEx3C66Am/NcNtOIflNrw1o234YI624U/4 +1zn9hIstcaj4fvoY1eruaBVtfh7gfgDNP3YZsyFix2uSBTtak7UzVelqO6cpX85VnyiPUJrybuZxqpgK +1Z7joQ27ovHHSJuq4sXF3Ka8nShkkzR+XByjFsLkeTWZsgYphKrDNVmLroVgNogft6WPr5dlFVW0bOxT +1tsf2AP3H4tJ/FnMNRqohVBtvJAuiotCzo5UJLqP3SWhUn80UJNx6bf8UBooZdZ9ac2JagSkXEjq/cd2 +mEWF+J8AAAD//7yH7lDiMQAA `, }, @@ -899,6 +948,23 @@ XTrm18uD//ne9eZHvbB8VbZeq+8AAAD//66pvj+0AQAA `, }, + "/eonza-assets/scripts/create-event.yaml": { + name: "create-event.yaml", + local: "../eonza-assets/scripts/create-event.yaml", + size: 842, + modtime: 1617688774, + compressed: ` +H4sIAAAAAAAC/3yRwYoUMRCG73mKgj7saWdQPOUmulcV1pvIUHYX0w2ZdExXBvQ07k1WWLx5E99AFxcH +dcdXqLyRJJ12Zljw0nT+/PX/X5KBmDu7HLQCsLgiDbUnZDqlNVlWANyxIQ0n1SJtVycKwCG3SZkN3Jju +VTWvZuic6WrkrrdD9jQ01Hkq/WTF9EtDazIaHiiAYH2wGtgHUgAtGXenOYkG7VKDD8qhx9Wg1WmhvIuX +ldzEbxxpuK8AepeJ0uEAPL0OnaemtE5JDTIeBSXhIOeeYk+0b26ZXYqiIfWv0QQqBS1hQ37Q8OJlXq+I +277R8Ozp+fMsOPTFOoWlbxZKUgLYH2TvK5BHvn+cAMGbEUzP56av0bT9wLqaUW/fous9V3N03Xy6tBTi +x2BPrNIlZy6yI12+Ag0PmbFuqYHHU/tifNZH+aEA7fgM0Fk4T8ZgyI++rGs4y9tPpkMuxs4yflZofDhq +lc9xI1v5GTdyI3/kV/wot3IbL+UG5Lt8nRaHPPJFdvIj7caL+AHiO9nJt3gZL2Sbpq4h5eTRbdzITq7j ++9QwhRRY+SS/49XRdLw65P5vjfobAAD//1+cWUdKAwAA +`, + }, + "/eonza-assets/scripts/create-file.yaml": { name: "create-file.yaml", local: "../eonza-assets/scripts/create-file.yaml", @@ -1292,7 +1358,7 @@ JPEmvgRlc0PYZr7GYzwvyS6Wq4v+Ccy6umfHFqcCeLXVhlIBkRj3TfE6ZYjfksJKuYv+fmd4SmGgTQfW name: "foreach-file.yaml", local: "../eonza-assets/scripts/foreach-file.yaml", size: 1433, - modtime: 1607779636, + modtime: 1616936928, compressed: ` H4sIAAAAAAAC/4RSUUsbTRR9319x2SBqvrh+fA/fw4L4UBUCYiGhQmFBx91JMmUyG2Ym0mgFkb5ZKPRH 9DlQW7ampn/h7j8qd2ez3dRofXFz7jlnzp05hlsrVN+EHoBiQx5CL9WcxYOtnpDcA7DCSh7CeuOExo11 @@ -1486,19 +1552,20 @@ MhX6RR67Kfl7Cislxv77M/Yxx7VzFJHfAQAA///cPdUckwUAAA== "/eonza-assets/scripts/if.eonza.yaml": { name: "if.eonza.yaml", local: "../eonza-assets/scripts/if.eonza.yaml", - size: 1363, - modtime: 1607779636, + size: 1490, + modtime: 1617688774, compressed: ` -H4sIAAAAAAAC/7RUz24TPxC++ylGu6r6+0kkFBAcfEUcuMABxLVyN5OtJa93sb1Ryh+pTSWuPXHhgniD -qFKkqJDyCuM3QvZukk26FSf2ZM833/eNPTu26JzUueUMQIsCOcjxEEv9QTAAJ51CDofpsRxbJxwWqF16 -yABGaLMIhEWMVMKdckjSoXUjJU/Sh+mwMmVuRFFInacJAzhFVQX9wUarDSqhcw6mZgCqzBVOUHF4xgBq -bWrNwZkaWSWMKCxng7ZOVBYnwuyU2cZiQe6sQg6PN/lKWtdNHmalHkknS207+U8ZQFnFaLgSiLRmtRZq -TMO31ZoIE8AoFJHWvMvTpbvD05iLYLZHPGp3O5XEQO2q2m33A0iSzubV67c7lllR3bHMyqISBoPRnuuT -+1wb2DqziUiHhe2WsdXH97VQG+XwTYSqQ8MC0EsZS4U4ldbZPt4W7ffTk/u5G7CXajDHaSFcdtrHjcBe -51WNPb1X9V86j9O+1k9d+AX/SRNER7dzpOQo6U0vTW/2o4SF0YweqBun42b0n6+HRyiwmZFVc8D1BHJ4 -oSzCO2GkOFHNnXUfEQ4vx/Cm8wyYekeeftCNP6cl/fYz8Jf+gn7SLV3T0l/t+dB3WvhzWtAvWtCKVjT3 -V0DXNI/0Oa38jOY9/vSNbmnlL/zMn/tLuvFfgjjQ1+i1ZFk5Qg6fBgxAjrfH/a81fhAfhv/hY3ttByfl -6OyAAXxmfwIAAP//eGCRq1MFAAA= +H4sIAAAAAAAC/7RUzW7TThC/71OMHFX9/yUSCggOviIOXOAAgmO1dSbuSuu12R2HlA+pSSU49sQFCSHe +IKoUKSqkvMLsG6G13cRJXXHCJ3t+8/vw7uw6JFImdbEAMDLDGNRogLl5JwUAKdIYw37vUI0cScIMDfX2 +BcAQXVIB4aWqFJKOY4h6A0dDrY56d3uDwuaplVmmTNqLBMAx6iLo99daTVFLk8ZgSwGg81TjGHUMjwRA +aWxpYiBboiiklZmLRb/JidrhWNqtmE2tCkQnBcZwf92vlaN28yDJzVCRyo1r9T8UAHlRVcOSQEWr366F +atPwbLTG0gawEqqQxrzNMznd4BlMZTDbIR40X1tJqkJJRUmb7z5EUevj2fOXW5ZJVtywTPKskBaD0Y7r +g9tca9iRXVcUYebaMTb6+KaUeq0cnrHUZdiwAHRSRkojTpQj18XboN1+Znw7dw12Ui2mOMkkJcdd3Aro +4h06kpbcW0WdvBrdGRldYsfQ6PIvI4OTrpmZUJjdf7J7sqXb+qfoIOpsz21n971IhDNdeaCpnQ7rO+Px +9amTGlxiVVH/4PXRjeGJdgivpFXySNdr1r59Yng6ghet+wOgtR1xgCw5eK0obJ0tt7z5B1/6U17ybz8D +f+an/JOv+IKX/nwnBH/nhT/lBf/iBa94xXN/DnzB84o+55Wf8bwjHH/lK175qZ/5U3/Gl/5TEAf+Unkt +b+blbzz3n3kZLHjhZ37qz8FPRZIPMYYPfQGgRptF+69JeKe6l/6H983i7x3lw5M9AfBR/AkAAP//5DcB +jtIFAAA= `, }, @@ -1537,7 +1604,7 @@ X7LHAAAA//+etb1f3gIAAA== name: "markdown-to-html.yaml", local: "../eonza-assets/scripts/markdown-to-html.yaml", size: 567, - modtime: 1616308507, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/2yQv07zMBTFdz/FkTK0/dT2k77hG7x0YICBTlSslWmu0gjHDs5NEBJD1Zkn4ClQJSQW +gzOGyHnX6lgs+6553fucUHMqUkKKQCjMpLIlLuP7aOZsZ1tOdMC4JQ1SYyidViJRgLIFW/DZF5wrNO7 @@ -1552,7 +1619,7 @@ FtNT6Wn/m5PpgFnZABnjsvX2C5hMxFcAAAD//xfqX403AgAA name: "message.yaml", local: "../eonza-assets/scripts/message.yaml", size: 4368, - modtime: 1616248768, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/9xY327bthe+91McUChi/362mzRz16lNgK1dBxQoBqzDbqqioeVjmy1FuiTl2ssCrL0b tlcYhr1BNiBYUazZK9BvNJD6Y0lOkDboRbBcGNQhv+8cne8jK1ajMUxMdNgCEDTBEBLUmk6wBWCY4RjC @@ -1737,7 +1804,7 @@ Y5zze7zj57jgZVzEe8RbXvILv4KfwB+8inNe8RuveM3reBMfftL/QIhRVZLEdU8AZ+TPleuk3AfZUTLU name: "readme.yaml", local: "../eonza-assets/scripts/readme.yaml", size: 1149, - modtime: 1616405222, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/4STz04bPRTF9/MU95sIhQgS+DYsRtBtWRSpKqibqopMfJNYeOyR7eFPC1IaVeqiSH0E XgFVRU2BpK9w/UaVnUlI0qqdlX3P8e8ej22LzgnVs1kCoFiOGRhkPMcEwAknMYN6rR2EWj0BKJjrh0rL @@ -1873,6 +1940,22 @@ ueBBcnVzm1yPMJ0OhfgKAAD//8b7nCn5AQAA `, }, + "/eonza-assets/scripts/run-script.yaml": { + name: "run-script.yaml", + local: "../eonza-assets/scripts/run-script.yaml", + size: 659, + modtime: 1617688774, + compressed: ` +H4sIAAAAAAAC/4RRO27jMBDteYqBVXgXsL0fbMVugT3B7gEWjETYBGiKIakA7iwHSJM0qVLmCi5iwHDg +6AozNwpI2onsFOmkN2/eZ+hlCMpMPWcARswlB9eYsS+dsoEBBBW05DAs/sdhMWQAVoRZRCY+VFpdFN+K +ibBWq1IEVRufOJX0ZdqKHwnR9VTLK6k5/GIAM6ntmVOEtDDTCDMrnJh7zsaHTB/zTDKUtMPCSg4/GUBt +U4ZYBsDJy0Y5WXEIrpFvWpUI4qRZBHo6P95dlZbm1NU1JqN60Vv5DnBurowKSmgOg2g+YLFaGkmTCcmW +w+8QRDmTFfzJseIgHe9vYw61AYQHAdbVpfQ+c3LAyPl3PI1rToTxkZa4xR0tcYMdPtM97nFPt7gBfML1 +8adviQ+4xo6uqaUVbmlFd0BtUthiRyvAHa5xB9jREl/oBjfUUtvP84kAK+sqp86hv+R+o/Qko8O5v7LX +AAAA///Tg7chkwIAAA== +`, + }, + "/eonza-assets/scripts/run.eonza.yaml": { name: "run.eonza.yaml", local: "../eonza-assets/scripts/run.eonza.yaml", @@ -2264,15 +2347,16 @@ VP0EAAD//y294FPxAQAA "/eonza-assets/scripts/write-file.yml": { name: "write-file.yml", local: "../eonza-assets/scripts/write-file.yml", - size: 564, - modtime: 1607779636, + size: 734, + modtime: 1617688774, compressed: ` -H4sIAAAAAAAC/5SQT0rDQBTG93OKj2bRFmwFcTUH0AuILsu0ebYD00mcTCqCC/8txa3XKEJB0dIrvLmR -zKTBalduQvJ7j1++91XkvbbTSgrAqjlJXDvtaXCpDQnAa29IopuNEo406wogp2qScHxJpFR+JtHJhpXP -jR5nh9kwbldZBxDAjEz5xx2RUXYq4WoBmGJqaEFG4lgAtXW1lfCuJlEqp+aVFINtwvjczTZcKBdZyuFv -SpI4EkBRel3YdBng6KrWjvKtslXFKHu6Fv7DF+9IE7LNfNQ0dBEPhsJCOa3GhuALKGwLAH5abVfPCpw0 -U1f/MvErL3nD7+Gel+EhPIM3vAp3vOIvXvGa1+ExvIDfEJ54yR/8ufeDfcPO8qTISeJ2INAEiSF6bREH -OCV/rlwvfvT73wEAAP//DrshETQCAAA= +H4sIAAAAAAAC/5yRz6rTQBjF9/MUh2bRFmwVcTU7QfQFRJcybb62A9NJnEwqggv/7RRXgq8Ri4GK9vYV +vrzRZSYJN7eFu7ib/Dlz5jfnO1OQ99quCykAq7Yk8c5pT7OVNiQAr70hiXHyJspBTcYCSKlYRjl8RCVX +fiMxSuaFT41eJA+TeXAXyQgQwIZMfsYOklF2LeFKAZhsbWhHRuKJAErrSivhXUkiV05tCylmXcLwHGab +75QLWszh3+ck8VgAWe51ZuNkgKO3pXaUdsgeFaJc4HrxHjyV52TTW8W10oD1SISpI4dsS+tMEk/jG8+U +V+1CW/Tr0BsUdspptTAEn0Gh6xG4uZze+jLD83bVlWdH8E++4t9c8Z4PzefmO/gPV3zkY/ON6+Gh/Isr +PvGh+cRVazxx3Xzkmv9zHTd8aX6A92i+csV/+d9FlkvCwLzMUpL4MBOAXnXFoW8ghJ/09/AAL8i/Um4S +fqbT0JspCN2sd1mvAwAA//91qE+t3gIAAA== `, }, @@ -6475,7 +6559,7 @@ pkwzv14p5QLGWkwn5HwBFM6rGZaYLoC+eOGarWXjUliDKv9c05uKw7+AMYULmMNXHcuMwmt600OZaVHK name: "dyncomp.tpl", local: "../eonza-assets/themes/default/templates/dyncomp.tpl", size: 16415, - modtime: 1616388909, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/+w77Y7jOHL//RTV2puWvG3J7pnbvT3Z8m3uEiABLpsFbpAgMBo4WqJtZiRKoWh19/X4 3YMi9S3KdvfOLBLk/KMtk6xiVbG+xV7loWCZBPmc0cCS9EnOn1xJkywmklrAosAK3fBAw0/b9MlaTwAA @@ -6640,26 +6724,32 @@ YE6ZVUim5pJSiPXrcv8XAAD//4uSBL2/YwAA "/eonza-assets/themes/default/templates/help.tpl": { name: "help.tpl", local: "../eonza-assets/themes/default/templates/help.tpl", - size: 2369, - modtime: 1615266510, - compressed: ` -H4sIAAAAAAAC/5xVUW/jNgx+96/gdPMlBeqkSQ87wLG9De0BPWDYw7bbS2AMiq3EWmVJk+g0WZH/PkhO -nLjO3cP8kpD8SH6kKDGxheEaAfeapQTZDqe7CFmtBUVGgJcpqZjQJAsAkm1UKImUS2bA4l6wlNR0F73w -EqsYZnfzD3q3qBjfVBjP7u7ChaZlyeUmQqVjuJ/rnY/jIyFdWdhGtSqZSAnS1dF0NmchXakGw2Taiq1n -K9gsaMWSb2Eb2Uq9+CBpekdO1I5EoKCiGDs6EMHs7ge9u1moLTNroV6ifUwbVAsC5+QASTWHQlBrU1Lv -ow8kWy4nP2s9+YOjYHmeTKt5H36fhVRKhRS5kmEyre57dp2FW2ass8WQrFy4P1vZBVtlkNiaCnHiXSih -TAzvPn78uPC5H1StuWCPFH12D+4laJvA1ylpdDmRCvl6T2AbVViLni5LpiXffsX3uzMQ3r8HJwlqsahY -8cxKkoWNRlVSZOG3ogzdOimEhGevr28Qh0My5UNiyyVfA/sHJl8sM5PflGCfH2GW58k2WqEE36SUaMNr -avbdmbsBjtBQadfK1LFUki0I/FQIXjynxGf8ol0N4xsC3SHTaEYucwOEHtp4aHhZ6NSnz5ZLJss871n0 -m0NPLBolN1lCoTJsnZJQGzd4jREhAaRmwzAlf60Elc8kOxrDZEqzZHpyHQR9UHpv3FzDcSg7RZ4nK3OJ -vnQ8UznWrPfRPTnxErxg0rKvEBO8oBvDWM0k9ukFb/lV9xfx5yQL1XrNC06F5X5sBhdj0KNjVU+qZppu -WJ4PCQ0g32zZgJJttFYGr7I5sagpF6jiY6ZPTszzH39vVn+zAtNPSv5LSebVPne/729r+Wxtc7WQ0DDN -nbHtqj69cN1NGL5us//1umXQj+ymuHvJ3Sm2SyALgqT7VyhpEZ6Y0JDCq/c/rYUYRu/cUhjdenVJkcbg -FI8UaaurGVaqtPHRE6B39Tqt/+iOK9u7fZMNw/FoSjWfunwWRzd9O1ZMjg2zWknLIM36Af3H19AhJo7i -hBmjzM0VqK+t4nbyvVEKHa62m6vOi6u+hmFj5MB0CK4maXQJKfSi94CHN7UWFItq7PO7SodEW2odt0N7 -AsefWjUSWRnDupGFW0+97ltUhk0KVdccx6P2ufNbbnQLo9AdaTi6KPoa/MkPAozCxoiew+E2CA6LIDgl -7iakY9D2raPT6DK+4HZcmbF76NrBOW/N2w7V7qsYLlC/etUl6GLbxDBaLpHXbG7RwMnlF2rxoQXk+ei2 -30kApKsYZCNEW1hwCM535r8AAAD//zwMEb5BCQAA + size: 3915, + modtime: 1617688774, + compressed: ` +H4sIAAAAAAAC/7xW247bNhB991fMMlVkoytfdoMEkC1tiyRA8to2fVkYDSXRFrsUyZKUd92N/70gdfcl +RdOieciKM8PDw+GZ8ax0qqg0YPaSRMiQJzN7CgwpJMOGIKBZhHLCJIpHAKtdkApuMOVEgTZ7RiJU4Kfg +kWYmD2Exv3kln5Y5odvchIv53FtKnGWUbwMjZAi3N/LJ4TgkgxMNu6AQGWERMjipXZ079jaEZAlOH7zV +rLKcROBElGborhe6XmV0B7tA5+LRnRJFc9Rwr5lCilk6tnwhgMX8tXyaLMWOqA0Tj8E+xKURy5acw0sZ +1jpCch+8RjH0SWFGlOmupcs0JVqjOr3tMqO6oFrThJHuTtDeV1Q3dmDxV+CpJkoJ1cDXi/Pgz8/OfTic +QW6vsNoFieGQCiZUhBJWkmCryB5BhtUDhKI0jHKSRYjRB3IVLRD8kDKaPlSGaOz+jxZwB3MIYTFBXXKg +ybrVWGAU5nojVBFywckSxatdQFPBQReYsXiDA5OXRaKDUlq+1hW/5ImWS8+e4dKTGB5/I/HgAvOgoR4s +JujfUs/EIz8mn1F9ib8Fx4rgRl2FCW5Q99aNNhBYQQZbJR6B4cS6Wt1YCA/FrgJqtAsZkooWWO27LGjC +s/aI2LPLE5IWJb/tqf8GCmNLwNOllELZQsxvB+EyXmHIFdnYTkGZEeH9/fRHKafv7XK9vvu5TH4nqYne +C/4nRrEzr2Y4XiVqANSg1Ns/al2S9RqBwWpLTIR+Sxjmlrkiklqn51BkPGoKd5bRXdMhus+T9rD4pvYA +wyTdtI+4D16huCb9CzWMrNerWX5zlNPYw5wLgw0V/FwSvR1R2vpCWCUW7tdqbcGSGFZOeg1v98QhvHjz +5s3Snf1WFJIy8g4bd3ql0/4BVRLoJkKlzKZcGLrZW+nlpmADW9xL3cneqy4QXr4Eu2JYmzQn6QPJUOyV +0ogMG/s0l1FOt7UrD1Y0fn4+irAdjZ4Su7+nGyB/wPSTJmr6k2Dk4ztYrNcX6uBrFd4WiTvxk7R3GE8Q +tI+MgwXqnw3gudDShXr9i9YldX9PeLZeDzzyuHK0UYJvuwrypLLCKxXzzgi/claynzVbT0DfCrlXVtdQ +i7I1rNdHNdff2FHpqv8WNbwYTQnX5AIxRlO8VYQUhJshvdExv2F3QbEnNhuaUsw0dbI57S7HOapv9UEU +ROLt2RZxEnI+Za2i7Ju1c4/lXI1M8Wi0ar9SwbWBD4RJiODZ7W+GqBD8F3aE8q+dOcMGh2AN77DBla0g +JheZDuudAP1uPJ60ZgC6gbHJqZ7aXxG4imAOX76AszTx/XD7Dz9RoQeWqRTajD/PsKSzZtfna3i2mCG0 +8NfQOMPhCYfJEM7khI8V0VJwTSCKjwg0vJuIqU3B1E0jkzOhLnf2uHq6gQiMKsnluCbqDP7ZTYqYUvET +12F0Fr2e2S6x6B4jgvl5b5M2iMD3ByHHiUyxSfNxfZ/TNP59Vgb5OM3AYbIcHV/3cF1/9Jsb1SlOc3L0 +PGeUtCVm7DshWalr48P3ML66qvfDHfh37iuyZH0Iwfdh8v/I5zslhLFxhd6e3bz8D9RRyuxYef/khU+J +VtRabvXr1H8KUXJDshA2JU/trDDoDdoIRaapKApqxn712+NGDv8afM92HM/vXfpc+AfXp8D3SsVONjiy +fZXYN500/A7L0aih1ba3ll+V1ZZs1WnmjfTqGgthg5kmjbVW+pG1tvl+Y+iaVGcrZRb2MlNPT/0IgGpS +CWFg7M0V/ei2SAxOQuAlY9W1R4dR93vwVwAAAP//HfsLO0sPAAA= `, }, @@ -6717,122 +6807,122 @@ R9VBnCPRfL6JnY9CYbgIw7n9rrOwQHFxvlX+PwAA//9gxnsIdCIAAA== "/eonza-assets/themes/default/templates/index.tpl": { name: "index.tpl", local: "../eonza-assets/themes/default/templates/index.tpl", - size: 27595, - modtime: 1615975042, - compressed: ` -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 -UDDLawAA + size: 27621, + modtime: 1617688774, + compressed: ` +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 +BQAA//8yJUSK5WsAAA== `, }, @@ -6870,7 +6960,7 @@ TNx05YjdXTtLFep45G82RjfrD7Ze600HeNT/wIvcfwDv7wAAAP//+8FPUhwMAAA= name: "login.tpl", local: "../eonza-assets/themes/default/templates/login.tpl", size: 4521, - modtime: 1615637266, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/6xYX2/bOBJ/96eYqjDstJEUbzfXQrF8d2j3nha4BbZ3wCEIDow4kthQJJekZHu7/u4H Un8s2U62Bc4vITkzv5nhDH+ksn716Z8fP//nl5+gtBXfzNb9HyR0AzOAdYWWQFYSbdCmQW3z8EOwGQSC @@ -6907,7 +6997,7 @@ jNhVkFD6nW3QIWayUrVFOib8473sHMGlvDym3+P+Fg+Hl/LVBSaH9t31LXh2K8OcZFbqkNSOnSxrG/Ac name: "notifications.tpl", local: "../eonza-assets/themes/default/templates/notifications.tpl", size: 1720, - modtime: 1615950089, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/2xUTY+jOBC98ytKzLYg2kDS2yO1RICdwxz2sOrL9p4iDm4ogjXGRnbBJNviv69sTCaZ 6Utk6uPVq1dVyU2t+UBAlwGLkPBMu3NC2A+CEYbAmyKUinjLa0ZcSROWAUA+JbWSxLhEDYYuAouwQ37q @@ -6930,7 +7020,7 @@ PS1GH/YRneVOoi3sN15EeNzv3ccczIcgWFX7dQ2v0ngtVzbrJe63C2Iw3xzw/wEAAP//JM5oyrgGAAA= name: "pro.tpl", local: "../eonza-assets/themes/default/templates/pro.tpl", size: 17812, - modtime: 1615697782, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/+xb/4/bNpb/3X/FG/W0shHL9iTTppAtbxd3m9sFemjRaw44DAYILdE2L7SokrTHA9f/ +4GkvouSM8lMNwn6S2JRj4/vG9/7PFKzEBEnqQT5kOLQkfgop0df4l1KkcQOkDh0Us6c5QBgcfAjlkhE @@ -6994,63 +7084,70 @@ OZRFAAA= "/eonza-assets/themes/default/templates/scheduler.tpl": { name: "scheduler.tpl", local: "../eonza-assets/themes/default/templates/scheduler.tpl", - size: 11526, - modtime: 1616050412, - compressed: ` -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 + size: 16996, + modtime: 1617688774, + compressed: ` +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 `, }, "/eonza-assets/themes/default/templates/script.tpl": { name: "script.tpl", local: "../eonza-assets/themes/default/templates/script.tpl", - size: 14435, - modtime: 1616234836, + size: 14492, + modtime: 1617688774, compressed: ` H4sIAAAAAAAC/9R7fW/bNrf4//4UJ9oc2UtkO2lRPD/Z8vY87YqnP3Rt0fTeYTAMjJZom4tEaiTlxDf1 d78gqRfqxYnT3eHibkAskeccnneeQ6qzszcfX3/57dPPsJVJPO/Nih+Mojn0AGYJlgjCLeICy8DJ5Nr7 @@ -7070,56 +7167,56 @@ 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 -ymxs/pHZbKz/MeF/BwAA//92sTzLYzgAAA== +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 `, }, @@ -7198,7 +7295,7 @@ PCpysF7V6go73ywrBclmt9vHPT+pS77DmcN0o+R8ujHKrwAAAP//68wRS+YEAAA= name: "tasks.tpl", local: "../eonza-assets/themes/default/templates/tasks.tpl", size: 3347, - modtime: 1615950288, + modtime: 1616471833, compressed: ` H4sIAAAAAAAC/8xWTY/bNhO++1fMq8SRjF1Zm+BtD15bCdCi6KGHosmlWAQNlxyviFCkQI68Ngz994LU x0q2GyTbHOoAWX48z8wzQ85Qa8etrAjoUOEmItxTtk8Jy0oxwgik2ETE3GcX5TOA9S7lRhOTGi04Oijc @@ -11872,8 +11969,10 @@ var _escDirs = map[string][]os.FileInfo{ }, "../eonza-assets/init": { + _escData["/eonza-assets/init/data-print.yaml"], _escData["/eonza-assets/init/demo.url.yaml"], _escData["/eonza-assets/init/test-archive.yaml"], + _escData["/eonza-assets/init/test-data.yaml"], _escData["/eonza-assets/init/test-email.yaml"], _escData["/eonza-assets/init/test-files.yaml"], _escData["/eonza-assets/init/test-json.yaml"], @@ -11902,6 +12001,7 @@ var _escDirs = map[string][]os.FileInfo{ _escData["/eonza-assets/scripts/copy-to-clipboard.yaml"], _escData["/eonza-assets/scripts/create-archive.yaml"], _escData["/eonza-assets/scripts/create-dir.yaml"], + _escData["/eonza-assets/scripts/create-event.yaml"], _escData["/eonza-assets/scripts/create-file.yaml"], _escData["/eonza-assets/scripts/crypto-funcs.yaml"], _escData["/eonza-assets/scripts/curdir.yaml"], @@ -11955,6 +12055,7 @@ var _escDirs = map[string][]os.FileInfo{ _escData["/eonza-assets/scripts/rename-files.yaml"], _escData["/eonza-assets/scripts/replace.yaml"], _escData["/eonza-assets/scripts/return.eonza.yaml"], + _escData["/eonza-assets/scripts/run-script.yaml"], _escData["/eonza-assets/scripts/run.eonza.yaml"], _escData["/eonza-assets/scripts/send-email.yaml"], _escData["/eonza-assets/scripts/send-telegram-message.yaml"], diff --git a/auth.go b/auth.go index 0b74107..17bdcc1 100644 --- a/auth.go +++ b/auth.go @@ -209,7 +209,8 @@ func AuthHandle(next echo.HandlerFunc) echo.HandlerFunc { if url == `/` { c.Request().URL.Path = `login` } else if url != `/api/login` && url != `/api/taskstatus` && url != `/api/sys` && - url != `/api/notification` { + url != `/api/notification` && url != `/api/runscript` && url != `/api/event` && + url != `/api/randid` { return AccessDenied(http.StatusUnauthorized) } } diff --git a/const.go b/const.go index 6a886e2..e44f16c 100644 --- a/const.go +++ b/const.go @@ -6,7 +6,7 @@ package main const ( // Version of the application - Version = "1.15.0" + Version = "1.16.0" // DefPort is the default web-server port DefPort = 3234 // DefTheme is the default web-server theme diff --git a/make.g b/make.g index 9380520..ee1f818 100755 --- a/make.g +++ b/make.g @@ -10,7 +10,7 @@ run { $ /home/ak/go/bin/esc -ignore "\.git|LICENSE|README.md" -o assets.go ../eonza-assets // $ go install -ldflags "-s -w" -tags "eonza standard" - $ go install -tags "tray" -ldflags "-s -w -X main.VerType=%{vertype} -X main.CompileDate=%{Format(`YYYY-MM-DD`,Now())}" + $ go install -tags "tray" -ldflags "-s -w -X main.CompileDate=%{Format(`YYYY-MM-DD`,Now())}" // $ go install -ldflags "-s -w -X main.VerType=%{vertype} -X main.CompileDate=%{Format(`YYYY-MM-DD`,Now())}" $ cp ${GOPATH}/bin/eonza /home/ak/app/eonza-dev/eonza $ cp ${GOPATH}/bin/eonza /home/ak/app/eonza/eonza diff --git a/notifications.go b/notifications.go index c364fb3..957836f 100644 --- a/notifications.go +++ b/notifications.go @@ -386,12 +386,18 @@ func AutoCheckUpdate() { } func latestVerHandle(c echo.Context) error { - if err := CheckUpdates(); err != nil { - return jsonError(c, err) + if len(c.QueryParam(`cache`)) == 0 { + if err := CheckUpdates(); err != nil { + return jsonError(c, err) + } + } + var lastChecked string + if nfyData.Update.LastChecked.Year() > 2019 { + lastChecked = nfyData.Update.LastChecked.Format(TimeFormat) } return c.JSON(http.StatusOK, LatestResponse{ Version: nfyData.Update.Version, Notify: GetNewVersion(GetLangCode(c.(*Auth).User)), - LastChecked: nfyData.Update.LastChecked.Format(TimeFormat), + LastChecked: lastChecked, }) } diff --git a/render.go b/render.go index d3e6b9a..d6e3629 100644 --- a/render.go +++ b/render.go @@ -35,12 +35,12 @@ type Render struct { PortShift int64 Favs []Fav Nfy *NfyResponse - Update VerUpdate - Pro bool - ProActive bool - DefLists []DefList - User *users.User - Twofa bool + // Update VerUpdate + Pro bool + ProActive bool + DefLists []DefList + User *users.User + Twofa bool // ProSettings ProSettings // Port int /* Params map[string]string @@ -190,8 +190,8 @@ func RenderPage(c echo.Context, url string) (string, error) { render.PortShift = cfg.PortShift render.Favs = userSettings[user.ID].Favs render.Nfy = NfyList(false, user.ID, user.RoleID) - render.Update = nfyData.Update - render.Update.Notify = GetNewVersion(GetLangCode(c.(*Auth).User)) + // render.Update = nfyData.Update + // render.Update.Notify = GetNewVersion(GetLangCode(c.(*Auth).User)) render.Pro = Pro && !cfg.playground render.ProActive = IsProActive() render.DefLists = defaultList diff --git a/run.go b/run.go index 5f791f0..95e0df2 100644 --- a/run.go +++ b/run.go @@ -20,11 +20,12 @@ type RunScript struct { User users.User Role users.Role IP string + Data string // Result fields - ID uint32 - Port int - Data []byte + ID uint32 + Port int + Encoded []byte } func systemRun(rs *RunScript) error { @@ -69,6 +70,7 @@ func systemRun(rs *RunScript) error { AssetsDir: cfg.AssetsDir, LogDir: cfg.Log.Dir, CDN: cfg.CDN, + Data: rs.Data, Console: rs.Console, IsPlayground: cfg.playground, IP: rs.IP, @@ -130,7 +132,7 @@ func systemRun(rs *RunScript) error { return err } if rs.Console { - rs.Data = data.Bytes() + rs.Encoded = data.Bytes() } rs.Port = header.HTTP.Port rs.ID = header.TaskID diff --git a/scheduler.go b/scheduler.go index 094657a..c59be56 100644 --- a/scheduler.go +++ b/scheduler.go @@ -5,9 +5,12 @@ package main import ( + "crypto/sha256" + "encoding/hex" "eonza/lib" "eonza/users" "fmt" + "net" "net/http" "sort" "strconv" @@ -44,13 +47,65 @@ type TimersResponse struct { Error string `json:"error,omitempty"` } +type Event struct { + ID uint32 `json:"id"` + Name string `json:"name"` + Script string `json:"script"` + Token string `json:"token"` + Whitelist string `json:"whitelist"` + Active bool `json:"active"` +} + +type EventData struct { + Name string `json:"name"` + Data string `json:"data"` + Rand string `json:"rand"` + Sign string `json:"sign"` +} + +type EventsResponse struct { + List []*Event `json:"list"` + Error string `json:"error,omitempty"` +} + +type RandID struct { + ID uint32 + Time time.Time +} + +type RandResponse struct { + Rand string `json:"rand"` + Error string `json:"error,omitempty"` +} + +const RandLimit = 64 + +var ( + randIDs [RandLimit]RandID +) + func GetSchedulerName(id, idrole uint32) (uname string, rname string) { - if idrole == users.TimersID { + switch idrole { + case users.TimersID: if timer, ok := storage.Timers[id]; ok { uname = timer.Name } rname = users.TimersRole + case users.ScriptsID: + if v, ok := tasks[id]; ok { + uname = v.Name + } + rname = users.ScriptsRole + case users.EventsID: + for _, event := range storage.Events { + if event.ID == id { + uname = event.Name + break + } + } + rname = users.EventsRole } + return } @@ -184,3 +239,210 @@ func removeTimerHandle(c echo.Context) error { } return timersResponse(c) } + +func eventsResponse(c echo.Context) error { + listInfo := make([]*Event, 0, len(storage.Events)) + for _, item := range storage.Events { + listInfo = append(listInfo, item) + } + sort.Slice(listInfo, func(i, j int) bool { + if !listInfo[i].Active { + if listInfo[j].Active { + return false + } + return strings.ToLower(listInfo[i].Name) < strings.ToLower(listInfo[j].Name) + } + if !listInfo[j].Active { + return true + } + return strings.ToLower(listInfo[i].Name) < strings.ToLower(listInfo[j].Name) + }) + return c.JSON(http.StatusOK, &EventsResponse{ + List: listInfo, + }) +} + +func eventsHandle(c echo.Context) error { + if err := CheckAdmin(c); err != nil { + return jsonError(c, err) + } + return eventsResponse(c) +} + +func saveEventHandle(c echo.Context) error { + if err := CheckAdmin(c); err != nil { + return jsonError(c, err) + } + var event Event + if err := c.Bind(&event); err != nil { + return jsonError(c, err) + } + if len(event.Script) == 0 { + return jsonError(c, Lang(DefLang, `errreq`, `Script`)) + } + if len(event.Name) == 0 { + return jsonError(c, Lang(DefLang, `errreq`, `Name`)) + } + var curKey string + for _, item := range storage.Events { + if strings.ToLower(event.Name) == strings.ToLower(item.Name) && event.ID != item.ID { + return jsonError(c, fmt.Errorf(`Event '%s' exists`, event.Name)) + } + if item.ID == event.ID { + curKey = item.Name + } + } + isEvent := func(id uint32) bool { + for _, item := range storage.Events { + if item.ID == id { + return true + } + } + return false + } + if event.ID == 0 { + for { + event.ID = lib.RndNum() + if !isEvent(event.ID) { + break + } + } + } else if len(curKey) == 0 { + return jsonError(c, fmt.Errorf(`Access denied`)) + } + if len(curKey) > 0 && curKey != event.Name { + delete(storage.Events, curKey) + } + storage.Events[event.Name] = &event + if err := SaveStorage(); err != nil { + return jsonError(c, err) + } + return eventsResponse(c) +} + +func removeEventHandle(c echo.Context) error { + if err := CheckAdmin(c); err != nil { + return jsonError(c, err) + } + + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + for key, item := range storage.Events { + if item.ID == uint32(id) { + delete(storage.Events, key) + if err := SaveStorage(); err != nil { + return jsonError(c, err) + } + break + } + } + return eventsResponse(c) +} + +func eventHandle(c echo.Context) error { + var ( + err error + eventData EventData + event *Event + ok bool + ) + if err = c.Bind(&eventData); err != nil { + return jsonError(c, err) + } + if event, ok = storage.Events[eventData.Name]; !ok || !event.Active { + return AccessDenied(http.StatusForbidden) + } + ip := c.RealIP() + if len(strings.TrimSpace(event.Whitelist)) > 0 { + whitelist := strings.Split(strings.ReplaceAll(event.Whitelist, `,`, ` `), ` `) + var matched bool + clientip := net.ParseIP(ip) + for _, item := range whitelist { + if len(item) == 0 { + continue + } + _, network, err := net.ParseCIDR(item) + if err == nil && network.Contains(clientip) { + matched = true + break + } + } + if !matched { + return AccessDenied(http.StatusForbidden) + } + } + host := c.Request().Host + if offPort := strings.LastIndex(c.Request().Host, `:`); offPort > 0 { + host = host[:offPort] + } + if !lib.IsLocalhost(host, ip) || len(eventData.Rand) > 0 { + if len(event.Token) == 0 { + return AccessDenied(http.StatusForbidden) + } + var isRnd bool + now := time.Now() + rnd, _ := strconv.ParseUint(eventData.Rand, 10, 32) + if rnd > 0 { + for i := 0; i < RandLimit; i++ { + if uint64(randIDs[i].ID) == rnd { + if randIDs[i].Time.After(now) { + randIDs[i].ID = 0 + isRnd = true + break + } + } + } + } + if !isRnd { + return AccessDenied(http.StatusForbidden) + } + shaHash := sha256.Sum256([]byte(event.Name + eventData.Data + eventData.Rand + event.Token)) + if strings.ToLower(eventData.Sign) != strings.ToLower(hex.EncodeToString(shaHash[:])) { + return AccessDenied(http.StatusForbidden) + } + } + rs := RunScript{ + Name: event.Script, + Open: false, + Console: false, + Data: eventData.Data, + User: users.User{ + ID: event.ID, + Nickname: event.Name, + RoleID: users.EventsID, + }, + Role: users.Role{ + ID: users.EventsID, + Name: users.EventsRole, + }, + IP: ip, + } + if err := systemRun(&rs); err != nil { + return jsonError(c, err) + } + return c.JSON(http.StatusOK, RunResponse{Success: true, Port: rs.Port, ID: rs.ID}) +} + +func randidHandle(c echo.Context) error { + var ( + rnd, i uint32 + rand RandResponse + ) + + for rnd == 0 { + rnd = lib.RndNum() + } + now := time.Now() + for i = 0; i < RandLimit; i++ { + if randIDs[i].ID == 0 || randIDs[i].Time.Before(now) { + randIDs[i].ID = rnd + randIDs[i].Time = now.Add(3 * time.Second) + break + } + } + if i >= RandLimit { + rand.Error = `Too many randid requests` + } else { + rand.Rand = strconv.FormatUint(uint64(rnd), 10) + } + return c.JSON(http.StatusOK, rand) +} diff --git a/script/embedded.go b/script/embedded.go index 5ddd10f..3dff9b9 100644 --- a/script/embedded.go +++ b/script/embedded.go @@ -41,6 +41,15 @@ type PostNfy struct { Script string } +type PostScript struct { + TaskID uint32 `json:"taskid"` + Script string `json:"script"` + Data string `json:"data"` + Silent bool `json:"silent"` + UserID uint32 `json:"userid"` + RoleID uint32 `json:"roleid"` +} + type ScriptItem struct { Title string `json:"title" yaml:"title"` Value string `json:"value,omitempty" yaml:"value,omitempty"` @@ -160,6 +169,7 @@ var ( {Prototype: `SQLValue(str,str,arr.str,str)`, Object: SQLValue}, {Prototype: `ConvertText(str,str,str) str`, Object: ConvertText}, {Prototype: `MarkdownToHTML(str) str`, Object: lib.Markdown}, + {Prototype: `RunScript(str,str,bool)`, Object: RunScript}, // Windows functions {Prototype: `RegistrySubkeys(int,str,int) arr.str`, Object: RegistrySubkeys}, {Prototype: `CreateRegistryKey(int,str,int) handle`, Object: CreateRegistryKey}, @@ -240,6 +250,8 @@ func IsCond(rt *vm.Runtime, item *ConditionItem) (err error) { case `match`: i, err = vm.MatchºStrStr(varVal, val) item.result = i != 0 + case `starts`: + item.result = strings.HasPrefix(varVal, val) default: return fmt.Errorf(`Unknown comparison type: %s`, item.Cmp) } diff --git a/script/encoding.go b/script/encoding.go index 48397fb..bbfc28c 100644 --- a/script/encoding.go +++ b/script/encoding.go @@ -23,6 +23,7 @@ type Header struct { LogDir string Theme string CDN string + Data string Console bool IsPlayground bool SourceCode []byte diff --git a/script/messaging.go b/script/messaging.go index d22e100..cb8b59d 100644 --- a/script/messaging.go +++ b/script/messaging.go @@ -8,6 +8,7 @@ import ( "bytes" "encoding/json" "fmt" + "io/ioutil" "net/http" "strconv" "strings" @@ -19,6 +20,11 @@ import ( mail "github.com/xhit/go-simple-mail/v2" ) +type Response struct { + Success bool `json:"success"` + Error string `json:"error,omitempty"` +} + var ErrInvalidPar = fmt.Errorf(`Invalid parameter`) func ObjStr(obj *core.Obj, key string) string { @@ -112,3 +118,34 @@ func SendNotification(msg string) error { } return nil } + +func RunScript(script, data string, silent int64) error { + jsonValue, err := json.Marshal(PostScript{ + TaskID: scriptTask.Header.TaskID, + Script: script, + Data: data, + UserID: scriptTask.Header.User.ID, + RoleID: scriptTask.Header.Role.ID, + Silent: silent != 0, + }) + var ( + resp *http.Response + body []byte + ) + if err == nil { + resp, err = http.Post(fmt.Sprintf("http://localhost:%d/api/runscript", + scriptTask.Header.ServerPort), "application/json", bytes.NewBuffer(jsonValue)) + if err == nil { + if body, err = ioutil.ReadAll(resp.Body); err == nil { + var answer Response + if err = json.Unmarshal(body, &answer); err == nil { + if !answer.Success && len(answer.Error) > 0 { + err = fmt.Errorf(answer.Error) + } + } + } + resp.Body.Close() + } + } + return err +} diff --git a/script/varobj.go b/script/varobj.go index e61fb45..28bc995 100644 --- a/script/varobj.go +++ b/script/varobj.go @@ -7,6 +7,7 @@ package script import ( "fmt" "strconv" + "strings" "github.com/gentee/gentee/core" "github.com/gentee/gentee/vm" @@ -135,6 +136,20 @@ func ReplaceObj(key string) (ret string, found bool) { func GetVarObj(name string) (*core.Obj, error) { val, ok := dataScript.ObjVars[len(dataScript.ObjVars)-1].Load(name) if !ok { + subfields := strings.Split(name, `.`) + if len(subfields) > 1 { + if val, ok = dataScript.ObjVars[len(dataScript.ObjVars)-1].Load(subfields[0]); ok { + ret := val.(*core.Obj) + for i := 1; i < len(subfields); i++ { + if ret, _ = vm.ItemºObjStr(ret, subfields[i]); ret == nil { + break + } + } + if ret != nil { + return ret, nil + } + } + } return nil, fmt.Errorf(`object var %s doesn't exist`, name) } return val.(*core.Obj), nil diff --git a/server.go b/server.go index 0c6f3fa..6fba998 100644 --- a/server.go +++ b/server.go @@ -293,10 +293,13 @@ func RunServer(options WebSettings) *echo.Echo { e.GET("/api/notifications", nfyHandle) // + e.GET("/api/tasks", tasksHandle) // + e.GET("/api/timers", timersHandle) // + + e.GET("/api/events", eventsHandle) // + e.GET("/api/prosettings", proSettingsHandle) // + + e.GET("/api/randid", randidHandle) // + e.GET("/api/remove/:id", removeTaskHandle) // + e.GET("/api/removenfy/:id", removeNfyHandle) // + e.GET("/api/removetimer/:id", removeTimerHandle) // + + e.GET("/api/removeevent/:id", removeEventHandle) // + e.GET("/api/sys", sysTaskHandle) // e.GET("/api/settings", settingsHandle) // + e.GET("/api/latest", latestVerHandle) // @@ -308,10 +311,14 @@ func RunServer(options WebSettings) *echo.Echo { e.POST("/api/taskstatus", taskStatusHandle) // e.POST("/api/import", importHandle) // + e.POST("/api/notification", notificationHandle) // + e.POST("/api/runscript", runScriptHandle) // e.POST("/api/settings", saveSettingsHandle) // + e.POST("/api/setpsw", setPasswordHandle) // e.POST("/api/timer", saveTimerHandle) // + + e.POST("/api/saveevent", saveEventHandle) // + + e.POST("/api/event", eventHandle) // + e.POST("/api/favs", saveFavsHandle) + e.POST("/api/feedback", feedbackHandle) // + ProApi(e) } go func() { diff --git a/storage.go b/storage.go index 20f3224..5a86050 100644 --- a/storage.go +++ b/storage.go @@ -54,6 +54,7 @@ type Storage struct { Users map[uint32]*User // Deprecated Scripts map[string]*Script Timers map[uint32]*Timer + Events map[string]*Event } var ( @@ -66,6 +67,16 @@ var ( Users: make(map[uint32]*User), Scripts: make(map[string]*Script), Timers: make(map[uint32]*Timer), + Events: map[string]*Event{ + `test`: { + ID: lib.RndNum(), + Name: `test`, + Script: `data-print`, + Token: `TEST_TOKEN`, + Whitelist: `::1/128, 127.0.0.0/31`, + Active: true, + }, + }, } mutex = &sync.Mutex{} ) diff --git a/task.go b/task.go index 4a2195e..1b6a683 100644 --- a/task.go +++ b/task.go @@ -188,6 +188,7 @@ func initTask() script.Settings { ID: scriptTask.Header.TaskID, UserID: scriptTask.Header.User.ID, RoleID: scriptTask.Header.User.RoleID, + IP: scriptTask.Header.IP, Status: TaskActive, Name: scriptTask.Header.Name, StartTime: time.Now().Unix(), @@ -378,6 +379,8 @@ func initTask() script.Settings { (*glob)[`r`] = "\r" (*glob)[`t`] = "\t" (*glob)[`s`] = " " + (*glob)[`data`] = strings.TrimSpace(scriptTask.Header.Data) + (*glob)[`eonzaport`] = fmt.Sprint(scriptTask.Header.ServerPort) script.InitData(chLogout, chForm, glob) return script.Settings{ diff --git a/taskmanager.go b/taskmanager.go index 89f56d5..cbfc54a 100644 --- a/taskmanager.go +++ b/taskmanager.go @@ -41,6 +41,7 @@ type Task struct { ID uint32 `json:"id"` Status int `json:"status"` Name string `json:"name"` + IP string `json:"ip"` StartTime int64 `json:"start"` FinishTime int64 `json:"finish"` UserID uint32 `json:"userid"` @@ -57,7 +58,8 @@ var ( ) func (task *Task) Head() string { - return fmt.Sprintf("%x,%x/%x,%d,%s,%d\r\n", task.ID, task.UserID, task.RoleID, task.Port, task.Name, task.StartTime) + return fmt.Sprintf("%x,%x/%x/%s,%d,%s,%d\r\n", task.ID, task.UserID, task.RoleID, task.IP, + task.Port, task.Name, task.StartTime) } func taskTrace(unixTime int64, status int, message string) { @@ -101,6 +103,15 @@ func RemoveTask(id uint32) { }*/ } +func GetTaskName(id uint32) (ret string) { + if v, ok := tasks[id]; ok { + ret = v.Name + } else { + ret = strconv.FormatUint(uint64(id), 16) + } + return +} + func ListTasks() []*Task { ret := make([]*Task, 0, len(tasks)) for _, task := range tasks { @@ -139,6 +150,7 @@ func NewTask(header script.Header) (err error) { ID: header.TaskID, Status: TaskActive, Name: header.Name, + IP: header.IP, StartTime: time.Now().Unix(), UserID: header.User.ID, RoleID: header.User.RoleID, @@ -155,7 +167,8 @@ func NewTask(header script.Header) (err error) { } func (task *Task) String() string { - return fmt.Sprintf("%x,%x/%x,%d,%s,%d,%d,%d,%s", task.ID, task.UserID, task.RoleID, task.Port, task.Name, + return fmt.Sprintf("%x,%x/%x/%s,%d,%s,%d,%d,%d,%s", task.ID, task.UserID, task.RoleID, task.IP, + task.Port, task.Name, task.StartTime, task.FinishTime, task.Status, task.Message) } @@ -180,6 +193,9 @@ func LogToTask(input string) (task Task, err error) { return } task.RoleID = uint32(uival) + if len(ur) > 2 { + task.IP = ur[2] + } } else { task.RoleID = users.XAdminID } diff --git a/users/users.go b/users/users.go index 955f0ff..c9fba2d 100644 --- a/users/users.go +++ b/users/users.go @@ -13,15 +13,17 @@ import ( ) const ( - RootUser = `root` - RootRole = `admin` - TimersRole = `timers` - EventsRole = `events` - ResRoleID = 0xffffff00 - EventsID = 0xfffffffe - TimersID = 0xffffffff - XRootID = 1 - XAdminID = 1 + RootUser = `root` + RootRole = `admin` + TimersRole = `timers` + EventsRole = `events` + ScriptsRole = `scripts` + ResRoleID = 0xffffff00 + ScriptsID = 0xfffffffd + EventsID = 0xfffffffe + TimersID = 0xffffffff + XRootID = 1 + XAdminID = 1 ) type ProSettings struct { @@ -59,9 +61,10 @@ type Auth struct { func InitUsers(psw []byte, counter uint32) (map[uint32]Role, map[uint32]User) { Roles := map[uint32]Role{ - XAdminID: {ID: XAdminID, Name: RootRole}, - TimersID: {ID: TimersID, Name: TimersRole}, - EventsID: {ID: EventsID, Name: EventsRole}, + XAdminID: {ID: XAdminID, Name: RootRole}, + TimersID: {ID: TimersID, Name: TimersRole}, + EventsID: {ID: EventsID, Name: EventsRole}, + ScriptsID: {ID: ScriptsID, Name: ScriptsRole}, } Users := map[uint32]User{ XRootID: {ID: XRootID, Nickname: RootUser, PasswordHash: psw, RoleID: XAdminID,