diff --git a/api.go b/api.go index bdcb519..e6f6b59 100644 --- a/api.go +++ b/api.go @@ -133,6 +133,7 @@ func runHandle(c echo.Context) error { title = val } } + user := c.(*Auth).User header := script.Header{ Name: name, Title: title, @@ -142,7 +143,9 @@ func runHandle(c echo.Context) error { Console: console, IsPlayground: cfg.playground, IP: c.RealIP(), - UserID: c.(*Auth).User.ID, + User: *user, + ClaimKey: cfg.HTTP.JWTKey + sessionKey, + IsPro: storage.Trial.Mode > TrialOff, Constants: storage.Settings.Constants, Lang: langCode, TaskID: lib.RndNum(), diff --git a/assets.go b/assets.go index 72186c4..d5d8b8e 100644 --- a/assets.go +++ b/assets.go @@ -261,7 +261,7 @@ JV7py2vJu7m/d2d7v5e345zJTZF2KxDrqbkOqCTiUhlbFuRWw0fp31VMk52358eFKzO4NAhQ6PHUgDAH name: "test-email.yaml", local: "../eonza-assets/init/test-email.yaml", size: 1808, - modtime: 1611833026, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5SVzW4bNxDH73qKweogG9CHIdQuulgvirZGjaI9We3VoHZHEmsuuSVn1apJADvnPEWe IAhgQAgS+xWoNwrI/fCuYDi2Tsvh8P+bGQ5HBom4XJqwByBZhiEQGhphxrjoARAngSEM+pdusz/oAeSM @@ -282,65 +282,68 @@ d2M/7a7t1t6XV9+WrY9W0l8DAAD//4J53ooQBwAA "/eonza-assets/init/test-files.yaml": { name: "test-files.yaml", local: "../eonza-assets/init/test-files.yaml", - size: 8139, - modtime: 1609913836, + size: 8199, + modtime: 1613628593, compressed: ` -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 -kP0tl7r6pvPfAAAA//8qF8HCyx8AAA== +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 `, }, "/eonza-assets/init/test-json.yaml": { name: "test-json.yaml", local: "../eonza-assets/init/test-json.yaml", - size: 2784, - modtime: 1607779636, + size: 3773, + modtime: 1613631151, compressed: ` -H4sIAAAAAAAC/7xWwW7jNhC96ysG0qJqUVu7TrpdgKf00sMe2mC7N60OTDSxGVCkTI4cOWn+vSAly5Sc -plYKbBAkNId6b/TmDccWiYRaWxYBKF4hA0JLy3urVQRAgiQy+IqW4PNff/4BP8AXXGMbAdScNgzSJHPn -bZJGAFKvJe5QMvg1IoPIomWPaZGWO24Ev5FoI4Adlw16TgApLHWrZbfPYLvdJplKLN5qVSYZJWgtWkwy -m5RYYrMR7tc/47AMA93QGOLrRljYPqABYYHDDs0epFZrIGwpGz1qxFooLsfPu2PhKWpPCNAgcINQ7a9Q -q0eeabMGrsrjxq2uQgy/eTbKXjfmX3AqLqQdxDWuIkuDteS3OBHXxxj8+O3h55+u/N9vmf/XR+sdlwzS -/N3T6nnZXr17unjOFFKR9nHbSPKcrcFOgB03He2LWdwJVU5S4FIyuOPS4lkZDYwG6U4YO2X1Gp5HSqaZ -z/kaHbcWDQmtph5GYyq7ZvC7UGXHVp94+7aqGeC26Z0GoDSFwsDBE6ETwrIfBMk/FPMhQ6A0GaBWRZLO -BTva+BTv4g14k9cM0C7/P5pBp1d+OVuySc/5rPJV0eV09N9LTRdWXeEDg6OPAbQsGawshfHPeqPC8G/S -X7GBD4WqG5pLm+YJtZT0zdxjp34vDc9dh3E87YnOy7a5sRQ01ZDbcIEOt30tBS37GzTMsEQpKj80VJ+B -O8Tg72Wfgbu1++Ww4H4i9R8qtJavJwm4Fx/I77VQr3EvTq62w+x4Ge8/e/7LUIw39ns/qq4Po+r6MKpy -um6pyMZ2rufCj/TrvezyfFOvulwXwi460EVYjmASH7SrubF4+C4xHkuD+tVe39xHAcVghicAiI3WFDOI -3290he8biyZe9HH3EwtVYhsz+DDavRMSbcwgfwp2R1GHWe3dKqOWRpjDOSse3bmLj79cTsLPi1eBnTZn -wH6aohb9xvN3dN9R2LCKviqZE3/+qDmIOrZch+gLk/cffO2Swm/Ot2J88fFTfJJz7hmKfFVkTufonwAA -AP//hvfjquAKAAA= +H4sIAAAAAAAC/6xWzW7jNhC+6ykG0m7VopYSx00D8JQ9tIdFf4J2L4XWKBhrYjOgSJmkHHnTHLrv1Pdo +3qggLcmU7HQdJ0GQSOTwm0/ffORQozFMzDUJAAQtkIBBbZJbLUUAYJjhSOADagPvf//1F/gKfsM51gFA +Sc2CQBylNl5HcQDA5ZzjCjmB7wOjEEmQNJgaTbKiitFrjjoAWFFeocsJwJk2m6dkM05guVxGqYg0zqTI +o9REqDVqjFId5ZhjtWD2162xWIqArEwf4sOCaVjeoQKmgcIK1Rq4FHMwWJu0t1SxOROU99fbMD/K1DsJ +UCFQhVCsL1GKTzSVag5U5NuBmSx8DDd4MMpaVuoJnIIyrrfiykrNMJnJHAfS/pmjnhFbsh9qV7qS0xm6 +KRtNIH57LfP1W1u82YLxXKGwK1tkZWudKG+Zjw6beQJff7z79ptL9/dj6v518+WKcgJx9uZ+/JDUl2/u +zx5SgWYadxG64sZ9Va3QU3xDoPnSIaMbJvI9dCjnBG4o13gwvy67QnPDlN5l0NTscAJGVcfl/1JqqjUq +w6TQe1KjUoWeE/iRiXyTt2xmtvvLQs2KkgAuq8bv9kdI05cNWnf6nvTmPLmy0+mx0H3AOOogx9MoPg50 +u8H24Z4djbvz+R7q5PVQFVo9s8mRkm5PCZ9lNp62HLcefmpD970i8I6AvysAJM8JjLuBJua9XIh+yDvu +mkTPz0yU7pQ+ikacRaY2UXdwNHliNxr3Y6/6Mbhvt7W7Q1fX2vQ2bcfXawzdUVtyZpKuN/RZ58hZ4Vqi +6BjZUAJ/JR0j25e6F++Rur7bvRaoNZ3vULLCeHRuJRNfYjPac9S23fJp5IPOGr+fvOicaZr1Vdusr9pm +nZmr2kzT4TYpj0sz0LjZI5b3C84Gy33E9GgDPuoXzrudtMqWVGls71e+rl59irW8vg28JJ2B7gEgVFKa +kEB4spAFnlQaVTjqEgKETORYhwROe6M3jKMOCWT33mhv1mIWa/uUmtr0MLs4zT7ZuLPz7yaD6YfR/wJb +dQ6AvRiitofhQ7DXm76CrS/dTdXqzMR854q5U9yd0jaab9X1716uNKmtwHPxtsoGPf9tEF11subFFTCa +usHGl89IFJ6dX4Q7nDOXYZqNp6kVe+DHNS340360s+0FZehIK0XPiyePn//95/Hvx88tB/c1BE6bV8eD +bMucuJFOH3eg+yawbIeGa9e0ptoXf5FOzptxKWXpp7QfxyXNm3P/YGP98e7nn17TWJ1UfrUasV/kMRya +rAVtbNa+vtxo6eQ83MN+6LbnItu67MNNXSnTTfmC/wIAAP//Le1ohr0OAAA= `, }, @@ -348,7 +351,7 @@ AP//hvfjquAKAAA= name: "test-sql.yaml", local: "../eonza-assets/init/test-sql.yaml", size: 8167, - modtime: 1612346845, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/+xZ627byhH+r6cYUD6gfA5l6xInKE8UQ7GV1o0juZIcNAiChCJHMhGKS+8u7ahpgLZA f+Ut+gRp0aD5kz6D/EbFLi8iaVKyfGmK9BiwvRruznxz1X4SQ85td8L0EoBrTFEHjoxX2alTAuA2d1AH @@ -385,32 +388,44 @@ IYiGnOcfAAA= "/eonza-assets/init/test-texts.yaml": { name: "test-texts.yaml", local: "../eonza-assets/init/test-texts.yaml", - size: 4199, - modtime: 1611291182, + size: 7226, + modtime: 1613559688, compressed: ` -H4sIAAAAAAAC/6RX227bRhO+11MMSBiyElO/Do7iEDB+oIekAdKmaIP2xoC9IofSoiSX3V26dhwDsXOZ -AnmEFn2CtGgAN23jV1i+UbHLg0mJciLHN6Z2d77ZOX0zK1BKGs+E2wGISYQuSBTSkXgkRQdAUhmiC117 -X2/a3Q5AQuRcr/T1QWGWfBSeOaQ/zErIZiEeYujCpJMQTiLhdpxCgU95A9mn3MjI4wRdGHUkR7w6LVjK -PXQ85mMHgCUYuyB5qn8ckjBFc3OA/fwOn3IkEoHGVFISQkBDFEBiHwIW+siFOauxXOhuTJl/vKE1e3Ma -+hxjDVXq9VKeX7SpB2CfBh6LfRe6tx6g/I7wTcun3OrB7i4MusWhQ8LrxpagIZs5LJVJKluAC4c9evxg -/+FX9x8XqzoShV00nuUW9fv9GqhA6RwSTsk0xDZYKmT57UCQxp4LJEkw9nUkiw0dVk4i16hzZJQU63Uj -KmgXLGuFfvHeCxQIXVuH/X/anL48kt3qHoeEuxDII7lCIqQxijYRs7FCCKNEHrcJmY1FoWdOdQrgCQoJ -EQpBZlhbVr9mL7Kz7Ey9VRfqL8jO1Rv1NjvLzpsKvJAm2qX1xDIp6rQnV1lcZU20V8GiVJ7QzyrVQnJg -qax+B4wDBRrDsN8fDgaDAZzUTAGgAVDYGN41Kbywp/9YKuH2Llh7sdXYOwUMBV4j8IjG6MLeCT2FXdg7 -gf9v0o07RsvWQd2xB1twIH6gSYJ+tdSDUyO5qBROO8tf33Mq8T4NcbOsSZ1CVm9LX6VXHfu22JRHkqXS -WrEbGPajT9HagluNE9qu3Tz7lz07Wnbssh+29k7orZH+9wUebX5DYp9Fn6TB5nDQ6+lV46Jx7qIK6uDJ -nHIfqMRIe4pxOqMxCfOFHhjQ0z1e99S1rjGlsuScloOmPPRBy+p9HOPMiVjimsi/06CZPCo1PZodnEqy -qYSEM8apnEcufPlZiaMFctGunVtplxXPUaShNEWpEXO2uGGTCWkyZYT7a3QTlhw7kjleQ7RpUc70Xbvk -jAYBzFBeK1w1HH1ouIagF6L2SWHtEtRofaiAhKIVa1zDIkIgl5TF7+8YXpS4gD+mJKwSKGayqQeuCL/h -vgUqHn4M6LANcXQzxBqFVFDjKh0DxpF4c0cnqaNzeiEPG2kuK1MrZ2teWJGINOgji58SI9BI9PWDYPLV -Glg3sLe4YfOOq9vd4t3KqisZ22NprOk8J66HsSyXenAbhr1O6/xVh2ybvYp6vJ8HAzSHa6avBhATBrCN -Irt7s+DVOepDwrfEvD4V+vsDo1if/hbZuGtrvbbd57bdj6tcLxxXDFfrzCNlcPJuUwan/K0jU65oxWbB -Mk3sKl4L5jYiVhnW0mIKk4qsy7Fi/KnZSrTJpf9baWmVuqVaWMr7Cr9QatfeBfX+syaeNR6OdiZDq9MY -lYthZW2wOzs7DSSTyOuijPzxxJ/sDKbeZDsY3d2ejrcDbxLcI9ujAZkO7tUVFP39ukJZ2XobVWPGkjWq -BjlnvMZ7bX33c41p1Fw9VDHEalKvyzSn9JAU7+eSxYoxwQy4Ghw8FkUk9kWxS7kLXxM5N9OjfkUXr9N8 -O9dthB14UrzDedqAVr+pN/qxoS6y5+qd+kO9Vv+qC/UG9IMke64u1GV2rjdA/an+zl5B9ly9Vr+rd9l5 -9hKys9p7Rb1T/9TupX7JXmTn2c+loLpUr9WlfuUYmWWl2av6tcuLgWM+cxXZy85/AQAA///aMAMfZxAA -AA== +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 `, }, @@ -453,7 +468,7 @@ tE/XQkH677E/AQAA///sgBH0LQYAAA== name: "tests.yaml", local: "../eonza-assets/init/tests.yaml", size: 1303, - modtime: 1612347246, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5SUsY7bMAyGdz8F4QyefEOHDtoKdC6KQ4GOARvTiQpa8km0767bpWM7delrFAUO6NZX sN/oIMkJ4uQQwJvym/x+UmTkSUSbrVcZgMGGFAh58RmAaGFSUKzWQV8VGUCLsgvKTYyJUkV+E4PCISps @@ -502,136 +517,137 @@ tM82Mx9MOQ2LZxN+0W+K7kKpvfSrPgALfqQPVkG/0nuG+2FqPdavaUQnNEp3k3J5V97PLL39lN683tMf "/eonza-assets/languages/en.yaml": { name: "en.yaml", local: "../eonza-assets/languages/en.yaml", - size: 6802, - modtime: 1612235943, + size: 6876, + modtime: 1613378846, compressed: ` -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 +3BoAAA== `, }, "/eonza-assets/languages/ru.yaml": { name: "ru.yaml", local: "../eonza-assets/languages/ru.yaml", - size: 10906, - modtime: 1612235960, + size: 11038, + modtime: 1613378856, compressed: ` -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 -0b1pmioAAA== +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 `, }, @@ -655,6 +671,23 @@ VBTuHC+MdypXGBhCeLZw8pWJPoQFUWE80EZF8RLOFi+jrayQJowHYylZFPdhJKSBUR9GI4/dQk541qzT `, }, + "/eonza-assets/scripts/base64-encoding.yaml": { + name: "base64-encoding.yaml", + local: "../eonza-assets/scripts/base64-encoding.yaml", + size: 1078, + modtime: 1613531275, + compressed: ` +H4sIAAAAAAAC/5xTTWsbMRC961c87EPsUrvpB6EItoVC2x/Qptcge8eOQNZuJa2h0EPoodfe+ytCiMEU +4t8w+4+KVuvNOjg9dE/ivTdv3oy0nkLQdumlAKxakcRMeTp7NSE7L3JtlwIIOhiSOBleRMXwRAClCpcR +mfqQGz0bPhtO9wUNn5OfNxXx0CCmWBpak5E4E0BlXWUlgqtIAJdkymONI26UXUq4SpTKqZWXYtLmXCsX +D/180xZrGoZvJUm8EEBRBl3YZkTA0ddKO8rb5nu3o+MejJT8Xj7001YHrYzE4HTQAEmnbUh0oFWrnPSc +Q5GmbZzjt1amonuTvnbhitUj6ueDbgBHvjJhrdzBQjr0YCVxp00osinaRbqvd02XbhdQNkdO3WKAbiMS +720fv8/YuWRvcP75w+R1EqSQLXVYu9+FTPpYmHQCcNWxgPyHd3zL2/qKd3zD13zHW96At+Bb3hxnH+bn +37zjO77hTX1V/+Dr+idv61//M82/+j0+27zISeK7AHxw8G6ODB8pfFFu1L7iccuFVSkAveju5S0kIoos +8qNzmyxH3s3HsYiMJ8hW0XKzatHxeoEn3cNAluEUvfeDrPdrfUqJOvJpdB2LvwEAAP//+htSTTYEAAA= +`, + }, + "/eonza-assets/scripts/bash.yaml": { name: "bash.yaml", local: "../eonza-assets/scripts/bash.yaml", @@ -685,6 +718,24 @@ HZfWnGd/s8mFsdRlI0ABNdn2wzb9bO4qDR8UYJvK0hVZjf8KCM4Hp8E+kGpzny86rf6c9kopn9eaJGHI `, }, + "/eonza-assets/scripts/convert-text.yaml": { + name: "convert-text.yaml", + local: "../eonza-assets/scripts/convert-text.yaml", + size: 1073, + modtime: 1613555006, + compressed: ` +H4sIAAAAAAAC/6xSzWoUTRTd91McMoskHzPziYJIQRQU8QES3CaV7juThkp1W3V7NOAiGREXCm7FB3Ad +QkZD/p7h1htJdfe0Pf6AC3fFuXXPuffc44k5t1OvEsDqQ1JICzsjxyOmV5wAnLMhhfXBbiwP1hOg1HwQ +kbHnzOT7g/8H4/i5rmXk0/p3fNSIKaaGZmQU7idAZV1lFdhVlAAHZMpfFCNotJ0quCoptdOHXiWjdrqZ +dvHRH2zcYrUaH5WkcDcBipLzwtaLAY5eVLmjrFVesnmXrqzoXdpjufczS25zzrVRqHgyelBDE6OnXmEt +o4muDI/TA+0OdenXOo2M/KqPEfjnKo58ZXim3YozHbriTTS31iLbKO42V3vS3AHxDtgnfklkkeWTCTmy +DLJpkcWsdD2ssKPdlBhP21pTakZa0u00ZwWivQrbReVS6ne4amUM+Sy3ciNnsgjHYS4X4Vhu5UxOwzx8 +QJjLQi7DSZhDrmUhX+U8vEE4llP5JldyEd7JTXgv13IBuZRbOe/6L+U0wv3h5Yss5EoWNfvH3zT01/nL +sXqbyqdwEt7WnDd/EkiLjBRejxLAs4MjxtbSuWjcxqMN71JsbWGvjsPeEM+In2u30aZ+cwk8PmLyHbo5 +jOEe1unbTIB8gv+6NOAh7kBhuyHq4GGUj5/JePpRbynb6vcAAAD//0uk0wwxBAAA +`, + }, + "/eonza-assets/scripts/copy-file.yaml": { name: "copy-file.yaml", local: "../eonza-assets/scripts/copy-file.yaml", @@ -901,15 +952,16 @@ BAAA "/eonza-assets/scripts/delete-file.yml": { name: "delete-file.yml", local: "../eonza-assets/scripts/delete-file.yml", - size: 475, - modtime: 1607779636, + size: 700, + modtime: 1613624131, compressed: ` -H4sIAAAAAAAC/3SQQUozQRSE9+8URWaR/18kgrjqtXgALyBj5iUZ6Okeu3sCARcxcSm5hBfIIsJoQK/w -+kbSk1kMorvmq6JeVXsOoTQLrwgwecUKBWsOPJmXmgkIZdCsMM7uzjzhbExAwX7Wcz/rSJ2HpcIom/pQ -6PI+u8imye2zEUDAknX9Mz0xnZuFgmsI0HahecVa4YqAxrjGKATXMNW5yyuvaNKXTLeG7aYJdC3CumaF -SwJsHUprumWA44emdFz0eelop7A564N5CtfdGzfnkp2YxvY4eWAduKrDGnOrC3YEuOaXJHmVoxzkJG3c -xhfEZznIu5yGqX9YIG1ikK+4i09xG3dxDzlKGzfyJh9xK59xI23c08wWrPA4IeCWK7vif+kz/tN3AAAA -///5m4zI2wEAAA== +H4sIAAAAAAAC/3SRT47TMBTG9z7Fx0SagkQLQqy8Bg4AB0Chee1YuHawnRGVWLQpGyQ0V2DBBUZoKhVG +lCu8dyPkJC3l3876+cvvfc+JlJJx86gV4MoFaVRkKdF4ZiwpIJlkSWNUvOx5xsVIARXF6cDjtCN1mS40 +zopJTJU1r4oHxSSnY3EGKOCCbP2nPTNburlGaBRg/dzSJVmNxwpoXGicRgoNqboM5SJqNR5K5lmn7SYZ +dC3SsiaNRwrwdTLedZsBgd40JlA1+A4e7+yS3pqYflv1SE+MD7NF5bKdkVzvPXkWjSfdGc/65brL/EgD +zhn4AFrUaYmZtxWFPnacp/HitalhZn248hTdKOHQMDT/GMqf+Yav+ZZ30spHyHu+5q98e1rgPxHwLjPw +D9nIWlrZyBX4hney4i1/k5b3suKdXP3Vkj/JiveH73rtffBW1p3w14DvvIWsZSMf8qW0/EU2vJVWTX1F +Gu/GCnnboxrn57jzNJ/yI97Nf/UeNAKlJjgFPKeFvxy4+hkAAP//MpXhdrwCAAA= `, }, @@ -1230,6 +1282,25 @@ a/4K+vebo1rWBWk8I35u/Gi4yAM8nc9niXAUvB2P1a8AAAD//53d9+s3AgAA `, }, + "/eonza-assets/scripts/hex-encoding.yaml": { + name: "hex-encoding.yaml", + local: "../eonza-assets/scripts/hex-encoding.yaml", + size: 1214, + modtime: 1613554620, + compressed: ` +H4sIAAAAAAAC/4RTUWsTTRR9n19xaB6afnytVcGHgSAIat9FX8s0e5MM7M7G2dmQgg81hSoI+ir+Ah9j +aTAtJL/hzj+Smd2um7TUfVrOuffcc8/MFOScNsNCCsCojCRGNN0n088TbYYCcNqlJLHbOQ50Z1cAY+VG +ATkoXJLqk86jzsFtQ+QTKvqxI/xEJM2HKU0olXgmgNLY0kg4W5IARpSO70wNYKrMUMKWYqysygop9muH +E2XDT9vcQY3Fae50TBJPBJCPnc5NXA6w9L7UlpJ68q3avbtu7FPpPd3W00Y7rVKJncOdCFR12riKdpTV +lfstZZePaBplwzdRaUl/FdqFA5tn95U+3mmsWyrK1E2U3YiiQTfCCGlGO2QqU8fVMR3RVCXU15lKmyig +TIKEmlyAJhCJl6aN1y4lXtk8C6fYiBXOBimX4+TUUVGVV76PaLolE1OpRWJ56LurJgBbbtjnn7zwH/2M +VzznK3/Bcz/jhT/jpf/EK17zAnzDa77ipT/jNV/ynFe8DPASfMWL+9ntpfkHr3nFl0Haz3juL3jpv21F +wN/5N/znfxi6RqDjuJvg4RL8i+d87Wf+y3ZID5mrI4tDbxWC2sMG/Ln/2jLgz0U/T0jig0DIGIXto4fX +5N4p+yIcRLd+WXt1gcvGAtCD5rI8h0RA0Qt89605omm3sP290EFpQZA1HYiTctCQeoD/msuKXg+HaN1p +9FoP/U001G3I/4PknvgTAAD//4Vs9jK+BAAA +`, + }, + "/eonza-assets/scripts/httprequest.yaml": { name: "httprequest.yaml", local: "../eonza-assets/scripts/httprequest.yaml", @@ -1424,16 +1495,32 @@ GBU5tX0P0vcdiu8AAAD///mGejLtAQAA "/eonza-assets/scripts/parse-json.yaml": { name: "parse-json.yaml", local: "../eonza-assets/scripts/parse-json.yaml", - size: 594, - modtime: 1607779636, + size: 600, + modtime: 1613629739, + compressed: ` +H4sIAAAAAAAC/4SRvW4UMRSFez/FUaZIIpFFUFC4pkpBkIJoo7s7V5OJHHvwz0h0K1KCaGl5hOFnFAoC +r3D9RsieJNogJLrRPZ7vfL4OHGNvu6AVYOmSNQbygY8ugrMKiH00rLHfnJWw2VdAy2FTJ+WjTgaK5xp7 +zSrE1vTr5nGzYrtxbW+7Zg9QgHGd4ZGNxjMFnLMZ/uopI0O20/BJAcn6ZDWiT6wG8nQZtDq69RvJJH6g +VhgtRaoy8e3AGk8U4IbYO1tvBnh+k3rP7S30DuY5JBNH8rvA1f10h/j0P8RiXxO2S362LOpluSaKIqID +YSTf09rwcuZOXeP49OQFnlOkJVj0lp9LpACfHoDlk0zyLW/zlVzLj/wuf1ha5Cvkt8x5K7P8lFlu5CZf +5Y//7JPvMtUD72Xe7ZXPMsm1/JIveStTZVeJjWtZ45Tja/IH91t6hOPg7Ct3sr44qK9zeKj+BAAA///r +iTC8WAIAAA== +`, + }, + + "/eonza-assets/scripts/parse-yaml.yaml": { + name: "parse-yaml.yaml", + local: "../eonza-assets/scripts/parse-yaml.yaml", + size: 598, + modtime: 1613629731, compressed: ` -H4sIAAAAAAAC/4SRvW7UQBDH+32Kv+IiiUQOQUGxNVUKghREG82dR46jza7ZD0t0J1KCaGl5BPNhhYLA -K8y+EfL67nQnIaWz5z/7m9/OBo6xtU3QCrB0yxod+cBnN8FZBcQ2GtY4rq6msDpWQM1hVSrTR6l0FK81 -jqpFiLVpl9XTasF25erWNtURoADjGsM9G40XCrhm02m4ju3mx5BtNHxSQLI+WY3oE6uOPN0Grc42Zj2Z -xAdSk2VNkYpGfN+xxjMFuC62zpY7AZ7fpdZzvYFuYZ5DMrEnvw9c7Kp7xOePECf7krCd86t5Ra+nRWJS -RHQg9ORbWhqee7bqGueXF6/wkiLNwaw3H54iBfh0AJYvMsiPvM53ci+/8of8aZ4i3yF/ZcxrGeW3jPIg -D/kuf/7vPPkpQ2n4KOP+XPkqg9zLH/mW1zIUdpFYuZo1Ljm+JX+y29ITnAdn37iL5c1JeZ3TU/UvAAD/ -/9APaP1SAgAA +H4sIAAAAAAAC/4RRvWrjQBDu9ykGVNiGs4+74ortDq684w4uBFyZsTXICquVsloJ3Jm4TEibNo+g/Ain +iJNXmH2jsCvbcQIh3fJ98/3MbEnWpjoppQDQmJGEAk1JwwVmSgDY1CqS0Ismnox6AqBAO/fIqLSxSqfR +12hEepbHqU4CH1M5Cwr/CIjKE0U1KQk/BEClTaUlWFORAJiTKt5lekihTiSYShRoMCulGG7b1aiC7rWY +V8VoMUTZRUESvgmAvLBprsNeAIZOq9RQvI3dmRkqK2VrNIeGoz164Pj9E0ffNzCkO37SneGfXwx8RbA5 +INRoUpwq6ma6Ft3M+Oef3x26W0gGDH6hRQFgqjfGfMUN37mlW/GaH9yZu+hS+Bb4mVu35JYfueUNb9zK +XR7m8TU3vOYnvnFLboL0w3C+5yZ4nHMrZnlMEv6TPUbT31/pC4wxU0f53+lJP/zOYCBeAgAA///zxZ7X +VgIAAA== `, }, @@ -1609,7 +1696,7 @@ fwcAAP//svXImgcDAAA= name: "send-email.yaml", local: "../eonza-assets/scripts/send-email.yaml", size: 1157, - modtime: 1611837311, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5xTwWrbQBS871cM9iE22CntoYeF9FBoQiGtCw69NMXI1laRkbTqahUIacBxr+kP9FBo vyCEupjWcX7h7R+VXUmx5QQCuazNvLfzZt6sMqF1mAQZZ0DixYIjE4nfFbEXRgzQoY4Ex1ZzYIvNLQak @@ -1680,31 +1767,35 @@ TYlcN6t5dwxXFNu9aeP0y46A/cvpMLnXyHf5en0gwT+au+aeN/zEz/zI2+a+eUDzvfmWnr/4qXkA/+YN "/eonza-assets/scripts/set-variable.yaml": { name: "set-variable.yaml", local: "../eonza-assets/scripts/set-variable.yaml", - size: 3746, - modtime: 1609913836, + size: 4466, + modtime: 1613454179, compressed: ` -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 +dCeghQYbt/d3AAAA//9TyrPVchEAAA== `, }, @@ -1745,7 +1836,7 @@ AAA= name: "smtp-server.yaml", local: "../eonza-assets/scripts/smtp-server.yaml", size: 1141, - modtime: 1611833439, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5yTvWobQRDH+32KQSpsQyRDPlwspErrQOBMmhDM+jSRLuztXvZDwZDCcpcqZaq8gwgR KAH7GebeKOzHXe4cXNgqdMtvdv8zO/sfi85Vamk5A1CiRg62ds3MolmjYQCuchI5HEzPQ3R6wAAa4VaB @@ -1793,7 +1884,7 @@ sJ57xLSIHPL/1dvVTb31uiYV0hVJvspOfsl32Y/b8QvGrfyUw/h53EJ+yw7yR47yI5/HT3KUg+wvwTdi name: "sql-close.yaml", local: "../eonza-assets/scripts/sql-close.yaml", size: 424, - modtime: 1612364787, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/2SPv0ozQRTF+3mKA1vk+5BEsLCYNq2N+ABhMnvZLExmNvNHECzUVntfw8KFIMRnuPtG MjMBE+x2z2/u/Z0bKMbedkEKwKotSYSdmWvjAgkg9tGQxKxZZdbMBDCouMnJIsTW9Ovmslm0Kqq1CpW3 @@ -1807,7 +1898,7 @@ zwce+cB7Hk+3/R0R2rUk8XghkH+L6l+97r8QPwEAAP//wd+UaqgBAAA= name: "sql-connection.yaml", local: "../eonza-assets/scripts/sql-connection.yaml", size: 1287, - modtime: 1612346632, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5yUz4oTTRTF9/UUl8livg9NBAUXBa7GZRRDliJDJX3pNFSqOlXVkYALs3A1C7dufYNR JjiCmWe4/UZSf7rTnckIukmac+rce7rzS1t0rlC55QxAiSVysCs5nGulcO4KrRiAK5xEDueDS39gcM4A @@ -1825,7 +1916,7 @@ ieOoNkgGpwNtyiTAYu6AYHTjAwxei9N0Mj78EP/5c48P9PzP2O8AAAD///jPas4HBQAA name: "sql-exec.yaml", local: "../eonza-assets/scripts/sql-exec.yaml", size: 809, - modtime: 1612346664, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/4ySsW7UQBCG+32KX3dFbHE5BBIUK6VMg4JQdJSWoj17uDha7/p2x6cgREMbKp6EggIB Ca+w90Zodw+woxRprPE/M9/M/FpPzK3ZeCkAozqS8Ft9TNdUC4Bb1iRxNL+IqfmRAHrFl1FZem50u54/ @@ -1842,7 +1933,7 @@ AAD//4Addl0pAwAA name: "sql-query.yaml", local: "../eonza-assets/scripts/sql-query.yaml", size: 896, - modtime: 1612346678, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5RSTYsTQRS8968oksPOYDaioIeGPcleJCIhexwInZlndpZO96Q/BhcR1KuevPg3vCmI u3+h5x/JdCebSbzoZeip6lf1Xr225Fyt1pYzQIkNcditPN96MrcMcLWTxHE2Xvbc+IwBjXDXPTK1rpL1 @@ -1859,7 +1950,7 @@ FvNZzCNLT3Py8NImUWpyWFg+Yn8CAAD//3DYIlmAAwAA name: "sql-row.yaml", local: "../eonza-assets/scripts/sql-row.yaml", size: 885, - modtime: 1612346695, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5SSv27bPBTFdz7FgT3Ewuf4Qwu0A4FMRZbCRZEoowCDlm4dBTQpk5SCoCjQZM7euW+Q rUGH9hWoNypIOrGUqV0E8Vze3/1zaMm5Wm0sZ4ASW+KwO3ls9DUDXO0kcRxNVyEyPWJAI9xlUBbWVbJe @@ -1876,7 +1967,7 @@ lhXqS6Hys+W5vp6lNzl/fmLzCJofnMom7E8AAAD//wNCZ2F1AwAA name: "sql-value.yaml", local: "../eonza-assets/scripts/sql-value.yaml", size: 903, - modtime: 1612346725, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/5SSv2rcQBDG+32Kj7vCEjlfSCApFlwFN8EhGJlUgmNPmpxl9nZ1uyOBCYEkTZr0fg03 Jm6cvMLqjYJWdz6dSZE0YvXNzm/+fOuJuTIrLwVg1Jok/EYft0o3JACuWJPE0XTRx6ZHAqgVX/bK3HOp @@ -6095,6 +6186,18 @@ cgu1+aUqv/5SHcKnB8B9tdxxXbQj+Lsx/NIudLJp6/t/AwAA//+x5qu0CxMAAA== `, }, + "/eonza-assets/themes/default/templates/deflists.tpl": { + name: "deflists.tpl", + local: "../eonza-assets/themes/default/templates/deflists.tpl", + size: 158, + modtime: 1613406562, + compressed: ` +H4sIAAAAAAAC/zSOsQrCQBBE+/2K+YAQ+xCtbASxEptjiiNZ5SA5JbfahPy7HK7d4zEPpi/Dkl52kBCW +mB+K9qj3cypWSBmeuRhGF9hjFQAIob3EWckOwYW3J9O5kKslm7Srw2slssEnTu+fulUit8ZbzSMplD9t +0u/81TcAAP//XY7JN54AAAA= +`, + }, + "/eonza-assets/themes/default/templates/dialogs.tpl": { name: "dialogs.tpl", local: "../eonza-assets/themes/default/templates/dialogs.tpl", @@ -6153,60 +6256,62 @@ pkwzv14p5QLGWkwn5HwBFM6rGZaYLoC+eOGarWXjUliDKv9c05uKw7+AMYULmMNXHcuMwmt600OZaVHK "/eonza-assets/themes/default/templates/dyncomp.tpl": { name: "dyncomp.tpl", local: "../eonza-assets/themes/default/templates/dyncomp.tpl", - size: 13852, - modtime: 1612244101, + size: 14008, + modtime: 1613454418, compressed: ` -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 +/5tJA5W4NgAA `, }, @@ -6386,8 +6491,8 @@ R9VBnCPRfL6JnY9CYbgIw7n9rrOwQHFxvlX+PwAA//9gxnsIdCIAAA== "/eonza-assets/themes/default/templates/index.tpl": { name: "index.tpl", local: "../eonza-assets/themes/default/templates/index.tpl", - size: 26694, - modtime: 1611920962, + size: 26861, + modtime: 1613401142, compressed: ` H4sIAAAAAAAC/9R9bZfbtrHwd/2KWba2pKwo7Tpum0darp9epz73JU1yrt3m9OzRaSASlLBLAbwEJK3q 6L/fgzcSICGt1nZv23zIisBgMG+YGQxA+ubi2x/efvjLj3+AlVgXt70b+wej7BZ6ADdrLBCkK1RxLJJo @@ -6426,78 +6531,79 @@ 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 -iW4m5h91meh/Laj3vwEAAP//BZuIB0ZoAAA= +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 +y9pL7WgAAA== `, }, @@ -6534,34 +6640,34 @@ TNx05YjdXTtLFep45G82RjfrD7Ze600HeNT/wIvcfwDv7wAAAP//+8FPUhwMAAA= "/eonza-assets/themes/default/templates/login.tpl": { name: "login.tpl", local: "../eonza-assets/themes/default/templates/login.tpl", - size: 3681, - modtime: 1608125964, + size: 3719, + modtime: 1612948300, compressed: ` -H4sIAAAAAAAC/5RX3Y7buBW+91OcMBjYk4ykmc1OE2gst0WyvVqgC2xaoBgMClo8kpihSIKk/LNZv3tB -irIle7ab+MYkz//hx4/U8tWnf378/J9ffoLGtWI1Ww5/SNkKZgDLFh2FsqHGoitI56rkA1kdBZK2WJAN -x61WxhEolXQoXUG2nLmmYLjhJSZhcsMld5yKxJZUYHGX3vZ+HHcCV4+PkP5d6/Szn8HT0zLr172G4PIZ -DIqC8FJJAo3BqiBZRTd+nvJSEXB7jQXhLa0x2yVBr8//ZGwbZVzZOfg+L2dO3F6gbRDd0UNpbbbp0PFq -n7ZcpqW132hVKenoFq1q8TstUcnf6En/VZIEk16jcU7bPMs6i+k4RKnazKBAatFmm/v0Nr17F7xRIYKv -i5BJspotswCG2XKt2H41WzK+Ac6gAEK1JuDjx99yk1CtxwteF4K/gjTI68blcHd7e/UAjFst6D6HSuDu -4UtnffuSCJ8cSpQOzQMVvJYJd9ja49rJffitaflcG9VJlpRKKJPD67IsH8gxjZBEzKGlux6MOfzl9lbv -Hlouh4V3937hBXdVVT2slWFocrjTO7BKcAavKaWjXDRljMs6hx8MtnBnsB0Jh2K/uda45PUTxg2WjiuZ -Q6lE18pRbQAwGo4r/f/9/eOQLTU1l8laOafavpppvCVva7CmLEgWzonNhKpV8uOHVMuaDOFjT3/8oHcP -cePDeOpqlK/HaWL5bxhjDs1///79kJPAysOnz+jx8UQXni0Y30xcXyxsEoc7l1QcBZtAaJO0innca2rt -VhlGIqsd5xP1nGqNkgVyCJyyvYO/wryiCe5xDvkwTKygtpmTM7gC5D3JHC19WsFuiHdmI+jaZ3c1iK+m -YtU5wSWys87/ENA8VW24Z2YCk8W/lYKXz7GqIa0CXoXB2H61zMY9PGsuFWhc5E80RhkCm8T7GKars0Zc -cbmhgjNtt1eTjYu+JvrLTbJ2EgIoCqINb6nZk5h7QWy3brkjqyuhai6vvI+1k1MPFPKeHQ1apwxquyXg -qKn9tfbfBoUmJ5YIeHNK53CX3veAu6qUqZXz6S4zemKXCdBewGHkxChZ2tJw7eIB+hIujkD9XyxZLbNe -+rLa8X75E1W648q+oDhormYziVv4d4eLryHT6DuHuOwnUQThrrQ5fD3W5Bf8YQ1An99kGfz+ux/+uqnn -UelwEwaH6/4fRQ7z11TreT9n1NEcqNafqKP9UouuUWwS5xn3vxhVorUL3KB01yNZyKOCXpA+4/6jYghF -AXfvztX8zzXcpj1GFtfT++NwnMWkAWDQHBddweJVcDOcwmkcg64zcnbpNdiEAwAFVFRYPIp8Yx1UyrS+ -D1CE9v8jTsd5DiqpRbc4scQNTBM66gcALM7b0LfY04yybn5zJu2M36SMap6FM3Sh0G/akMqZ8HAKnroG -5cKg1UpahGIFX8d8Exo5SFPvtO/O5bYJdMBiVz5Rh+c7B8B8Qz7zFhcsrePoGt7CPbzxj4xbyN7AvcUS -3mQXtt477jQ3aP1LJg4LAm+BpU796/PHX53hsn4hqiq71sOuVOqZo7duqG04C8bT0jiDt0AevGAI5uea -uqbIyLnnLZdMbVODrdrgTx7aP3PrUKJZzJ9xz9RWDpt+OhwX+WVZ9CNUSf2zAQqYZ/Pz+qMwNSgUZYvr -kfwAKCyebcgEyM50OJF6LCuBqVD14qXdnb144o65D4QRyUB10iEbHcBYEWXsO9sSPZaq1Z1DNuaX0zXg -A03vRI8ObbCCAh4f05+prJ+eLsinVyhgjnJ+Cd9oPp//Ad2cWAOO7/Xtdpv2D3tl6syjJnh5C0CYKm0W -U06GI5/6jzVyzmCH2eF6Nqs6GR6NA8+eioxRTwmHmz7v2el07IcgOcxHZBC2Mx8x2WF2mI3vmCx+JWT9 -h+TsfwEAAP//D3J6AGEOAAA= +H4sIAAAAAAAC/5RXbY/buBH+7l8xYbCwN1lJu5fbJtBabovk+umAHnBpgWKxKGhxJDFLkQRJ+eVy/u8F +KcqW7L1e4i8m5/XhcPiQWr769M+Pn//zy0/QuFasZsvhDylbwQxg2aKjUDbUWHQF6VyVfCCro0LSFguy +4bjVyjgCpZIOpSvIljPXFAw3vMQkTG645I5TkdiSCizu0ts+juNO4OrxEdK/a51+9jN4elpmvdxbCC6f +waAoCC+VJNAYrAqSVXTj5ykvFQG311gQ3tIas10S7Hr8J2fbKOPKzsH3RTkL4vYCbYPojhFKa7NNh45X ++7TlMi2t/UavSklHt2hVi9/piUr+Rk/2r5IkuPQWjXPa5lnWWUzHKUrVZgYFUos229ynt+nduxCNChFi +XaRMktVsmYVmmC3Xiu1XsyXjG+AMCiBUawI+f/wtNwnVeizwthDiFaRBXjcuh7vb26sHYNxqQfc5VAJ3 +D18668uXxPbJoUTp0DxQwWuZcIetPcpO4cNvTcvn2qhOsqRUQpkcXpdl+UCOMAKIiKGlu74Zc/jL7a3e +PbRcDoJ3917wQriqqh7WyjA0OdzpHVglOIPXlNIRFk0Z47LO4QeDLdwZbEfKYbHfvNYo8vYJ4wZLx5XM +oVSia+VobQAwGo5X+v/r+8cpW2pqLpO1ck61/Wqm+Za8rcGasiBZOCc2E6pWyY8fUi1rMqSPNf3xg949 +xI0P42moEV7fp4nlv2HMORT//fv3AyaBlW+fHtHjI6+gZ4unp8fH0wiF7SVHNglSyTynML6ZALgQbBKH +O5dUHAWbNNomaRXzp0NTa7fKMBK57zifmOdUa5QsUEhgnu0d/BXmFU1wj3PIh2FiBbXNnJw1NUDeU9HR +08MKfkO+Mx9B1x7d1aC+mqpV5wSXyM7254fQ81PThnv+JjAR/q0UvHyOqxpgFfAqDMb+q2U2ruFZcalA +4yLLojHKENgkPsYwXZ0V4orLDRWcabu9mmxcjDWxX26StZMQWqcg2vCWmj2J2Atiu3XLHVldCVVzeeVj +rJ2cRqCQ9xxq0DplUNstAUdN7S+//zYoNDlxSehKp3QOd+l935ZXlTK1ch7uMqMnDpo02gt9GJkzapa2 +NFy7eMy+hOslXBBfLFkts177stnxFvoTU7rjyr5gOFiuZjOJW/h3h4uvAWmMnUMU+0lUQbhRbQ5fj2vy +An+kQ6PPb7IMfv/dD3/d1PNodLgJg8N1/48ih/lrqvW8nzPqaA5U60/U0V7UomsUm+R5xv0vRpVo7QI3 +KN31SBdwVNAr0mfcf1QMoSjg7t25mf+5htu075HF9fSWORxnETQADJbjRVeweBXCDKdwmseg64ycXUYN +PuEAQAEVFRaPKl9YB5Uyra8DFKH8/4jTMc7BJLXoFieWuIEpoKN9aIDFeRn6EnuaUdbNb860nfGblFHN +s3CGLgz6TRugnCkPp+Spa1AuDFqtpEUoVvB1zDehkIM29UH76lxum0AHLFblE3V4vnMAzBfkM29xwdI6 +jq7hLdzDG/8UuYXsDdxbLOFNduHro+NOc4PWv3fisCDwFljq1L8+f/zVGS7rF7Kqsmt925VKPXP03g21 +DWfBebo0zuAtkAevGJL5uaauKTJyHnnLJVPb1GCrNviTb+2fuXUo0Szmz7hnaiuHTT8djgt8WRbjCFVS +/7iAAubZ/Hz9UZkaFIqyxfVIfwB/055tyKSRnelwovW9rASmQtWLl3Z39uKJO2IfCCOSgeqkQzY6gHFF +lLHvLEuMWKpWdw7ZmF9O14BPNL0TfXdogxUU8PiY/kxl/fR0QT69QQFzlPPL9o3u8/kf0M2JNeD4qt9u +t2n//FemznzXhChvAQhTpc0i5GQ48qn/pCPnDHaYHa5ns6qT4Wk58OxpkTHrCXC46fOenU7HfkiSw3xE +BmE78xGTHWaH2fiOyeK3RNZ/bs7+FwAA//+jFxHHhw4AAA== `, }, @@ -6591,29 +6697,60 @@ AP//ZTn8v04GAAA= "/eonza-assets/themes/default/templates/pro.tpl": { name: "pro.tpl", local: "../eonza-assets/themes/default/templates/pro.tpl", - size: 3285, - modtime: 1612019873, + size: 15629, + modtime: 1613382420, compressed: ` -H4sIAAAAAAAC/9xWz5Pbtg6++6/AKk/Pdp5p2VkneSNZmnba7vTYQ6fnUCJscUKJLElpvbPx/94hJduS -12l+TE/NJRYIfAA+fAR3awrNlQX7pDANLB5sdCAWKyWoxQA4SwOlZZBNALYtKWRtKa9Rg7FPAtOgogfy -yJktY1iv3mzUISmR70sbr1erMFGUMV7viZUqhs1KHRIPBLC9I6QlVkqRUw0Ma4OwE9SmVjfYuXi3luS2 -hkIKqV0dvKL6KYBCUGPSoDqQNwHEjBuaC2RpcFeUtN4jC+CHQvDiYxoY2mJwwesxeSFrELizYCoqRLaj -xDluo+4o+2+dG5WEzhZeaol8MX390bl6QnpTSyzNDbSkkgxFGliaB6NWLM2zcI81aipCj0DzARzNTf/F -eAstMaV89ChpugpOfPfsQkFFMXMcA4H16p06zBPZot4J+UieYtpYmQTg4Txaz5iyZNPVtG0JFahPczdN -UaAxwTktLSxvMQAnCJCNFbxGloXGUtuYMIawc/BteKBbqKi11BfMu5ugp+kyREWkdgMMhon68V5ncl31 -nOS0+LjXsqkZ8VgxvHp4ePj5l/cn/cWw1lglkEvNUBNNGW9M/H91SOAUsHn79sd3mwS6eXWOMazVAYwU -nMGr+/eb95uH5DzRbXmfhVZzKty4w21U3p+PFLSE79LAHy/dOWTpKsi2efb87I2MPh2P2yjPtpEahaEw -6Pw6aKxZeO3VXQnf+qG7sMRqWpud1FVcyxov6neZZ+t58LKcNIVVcH2vPOvaerdwJPfvSLv6TNr1zbRS -3ci6jRhvz5drsAj2GrG+rIEn8hYeS26REFdXkIWN2mvKUGn5GURnPe+ybLKNui2YTSbb869C1sbCb1pC -Cs8+/LQWY5i+UlpOF97KqKWzee/i/mm0ja4HBh9L8xhWi5Gtuw8x7KgwOD7ydMTwfBybdSPQxFfQXc4/ -G66RxdBS0SCkGdzddT8/fYJpeDoPp4sXsS3Vg7DnU/2K2j+oXlo0duZP5x0Ur1sqOPOmcApXFQ4+j5OB -oUJbSjaq3etEUT2/6oceuDQjy3KPdvYhoopHnpjow/9c3NjHlljPNBol3WviOnnRKd/B2WPp5rb0K2p+ -w9UPoeRm+R8tpXV+ldnfDE5uxnYkvjg6Tm4m8V1BCmN8b70d0EnnRURnHg/kiqaC2qKc+dIdSS977Lq6 -RA0mGr3uXtjZNWOO2DsP1T/BtygdnkMK7qkfc3cc5HwdnT/cO+wzRq8/M52ixOLjTx3ybDZ3fd0QkZLm -pCKD1vJ6bz4sOhipLJe1+XcoSsiCunaWGoWkbOaInn9pGn4H/SPCmSeD2fXi6f8rZKUa67bUmZ7Tc3gt -qX4JueeF2tk0PPmZcLoY3JllIZvaLuB+da52vHbcsUu4a+rCkTLKY6zUuCxkVXE7mzaKUYu/cytwuoBp -qLT7kyqczpNJFP1dyK8olI9otHBvznQwwbEOB4tMaXlW4YXpL2nuG/T2vVq7obOxxr5xAX31ghsI7qvF -lpyGfUwml2f8rwAAAP//T1+tsdUMAAA= +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 +ynvs/wUAAP///mVBOw09AAA= `, }, @@ -6621,7 +6758,7 @@ lpyGfUwml2f8rwAAAP//T1+tsdUMAAA= name: "script.tpl", local: "../eonza-assets/themes/default/templates/script.tpl", size: 14354, - modtime: 1611830040, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/9Q7f2/buJL/+1NMtOvI3kS2kxbFO9nyvvfaLV4P3bZoerdYGAaWlmibG4nUkpQTX+rv fiCpH9QPO0n3FofXArVIzgxnhjPDGZKdnb35+PrLr59+gq1M4nlvVvxgFM2hBzBLsEQQbhEXWAZOJtfe @@ -6697,7 +6834,7 @@ VRmoakHrOiwCgW/iTdFdhDEfHMcK64w34IpYXlnIoXfo2Y9TZmPzf8JmY/1///43AAD//wA8NGwSOAAA name: "settings.tpl", local: "../eonza-assets/themes/default/templates/settings.tpl", size: 9958, - modtime: 1611918708, + modtime: 1612438635, compressed: ` H4sIAAAAAAAC/9w5S48iu9V7fsXp+j4uhURB98xopFR3kUizyZVGySJXkaJWK2OqDuC0sSu2eYXLf49s 15NyQc9rk94A9nm/j/tJpZLmGvQxxyTQeNCzQ6RxkzOiMQCaJYFCrSlfqWA+AHjaRangmlCOEpQ+MkyC @@ -11461,8 +11598,10 @@ var _escDirs = map[string][]os.FileInfo{ "../eonza-assets/scripts": { _escData["/eonza-assets/scripts/assertions.yaml"], + _escData["/eonza-assets/scripts/base64-encoding.yaml"], _escData["/eonza-assets/scripts/bash.yaml"], _escData["/eonza-assets/scripts/chdir.yaml"], + _escData["/eonza-assets/scripts/convert-text.yaml"], _escData["/eonza-assets/scripts/copy-file.yaml"], _escData["/eonza-assets/scripts/copy-files.yaml"], _escData["/eonza-assets/scripts/copy-to-clipboard.yaml"], @@ -11492,6 +11631,7 @@ var _escDirs = map[string][]os.FileInfo{ _escData["/eonza-assets/scripts/form.yaml"], _escData["/eonza-assets/scripts/get-clipboard.yaml"], _escData["/eonza-assets/scripts/get-webpage.yaml"], + _escData["/eonza-assets/scripts/hex-encoding.yaml"], _escData["/eonza-assets/scripts/httprequest.yaml"], _escData["/eonza-assets/scripts/if.eonza.yaml"], _escData["/eonza-assets/scripts/join-text.yaml"], @@ -11503,6 +11643,7 @@ var _escDirs = map[string][]os.FileInfo{ _escData["/eonza-assets/scripts/notification.yaml"], _escData["/eonza-assets/scripts/open.yaml"], _escData["/eonza-assets/scripts/parse-json.yaml"], + _escData["/eonza-assets/scripts/parse-yaml.yaml"], _escData["/eonza-assets/scripts/read-console.yaml"], _escData["/eonza-assets/scripts/read-file.yml"], _escData["/eonza-assets/scripts/regex-find.yaml"], @@ -11569,6 +11710,7 @@ var _escDirs = map[string][]os.FileInfo{ "../eonza-assets/themes/default/templates": { _escData["/eonza-assets/themes/default/templates/card.tpl"], _escData["/eonza-assets/themes/default/templates/cardlist.tpl"], + _escData["/eonza-assets/themes/default/templates/deflists.tpl"], _escData["/eonza-assets/themes/default/templates/dialogs.tpl"], _escData["/eonza-assets/themes/default/templates/dyncomp.tpl"], _escData["/eonza-assets/themes/default/templates/editor.tpl"], diff --git a/auth.go b/auth.go index 7f13bd0..ea3f4f4 100644 --- a/auth.go +++ b/auth.go @@ -5,20 +5,31 @@ package main import ( - "eonza/lib" "net" "net/http" "strings" "time" + "eonza/lib" + "eonza/users" + "github.com/dgrijalva/jwt-go" "github.com/labstack/echo/v4" "golang.org/x/crypto/bcrypt" ) +/*type Auth struct { + echo.Context + User *users.User + Lang string +}*/ + +type Auth = users.Auth + type Claims struct { - Counter int64 - Username string + Counter uint32 + UserID uint32 + RoleID uint32 jwt.StandardClaims } @@ -56,8 +67,8 @@ func accessIP(curIP, originalIP string) bool { func AuthHandle(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) (err error) { var ( - access string - isAccess bool + access string + isAccess, ok bool ) ip := c.RealIP() if len(cfg.Whitelist) > 0 { @@ -106,71 +117,95 @@ func AuthHandle(next echo.HandlerFunc) echo.HandlerFunc { mutex.Lock() defer mutex.Unlock() - if len(storage.Settings.PasswordHash) > 0 && (url == `/` || strings.HasPrefix(url, `/api`) || - strings.HasPrefix(url, `/ws`) || strings.HasPrefix(url, `/task`)) { - hashid := getCookie(c, "hashid") - jwtData := getCookie(c, "jwt") - if len(hashid) > 0 { - if item, ok := sessions[hashid]; ok { - c.SetCookie(&http.Cookie{ - Name: "jwt", - Value: item.Token, - Expires: time.Now().Add(30 * 24 * time.Hour), - HttpOnly: true, - }) - jwtData = item.Token - delete(sessions, hashid) - } - c.SetCookie(&http.Cookie{ - Name: "hashid", - Value: "", - Path: "/", - Expires: time.Unix(0, 0), - }) - } - var valid bool - if len(jwtData) > 0 { - claims := &Claims{} - token, err := jwt.ParseWithClaims(jwtData, claims, - func(token *jwt.Token) (interface{}, error) { - /* if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - */ - return []byte(cfg.HTTP.JWTKey + sessionKey), nil - }) - if err == nil { - if claims.Counter == storage.PassCounter { - valid = token.Valid + var ( + userID uint32 + user users.User + valid bool + ) + lang := LangDefCode + claims := &Claims{} + if IsScript { + user = scriptTask.Header.User + if len(user.PasswordHash) > 0 { + jwtData := getCookie(c, "jwt") + if len(jwtData) > 0 { + token, err := jwt.ParseWithClaims(jwtData, claims, + func(token *jwt.Token) (interface{}, error) { + return []byte(scriptTask.Header.ClaimKey), nil + }) + if err == nil { + if (claims.UserID == user.ID && claims.Counter == user.PassCounter) || + claims.RoleID == users.XAdminID { + valid = token.Valid + } } } - } - if !valid { - if url == `/` { - c.Request().URL.Path = `login` - } else if url != `/api/login` && url != `/api/taskstatus` && url != `/api/sys` { + if !valid { return echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized") } } - } - if firstRun && url == `/` { - c.Request().URL.Path = `install` - } - // TODO: JWT user - var user *User - for _, user = range storage.Users { - break - } - lang := LangDefCode - if IsScript { lang = scriptTask.Header.Lang } else { + userID = uint32(users.XRootID) + if len(storage.Settings.PasswordHash) > 0 && (url == `/` || strings.HasPrefix(url, `/api`) || + strings.HasPrefix(url, `/ws`) || strings.HasPrefix(url, `/task`)) { + hashid := getCookie(c, "hashid") + jwtData := getCookie(c, "jwt") + if len(hashid) > 0 { + if item, ok := sessions[hashid]; ok { + c.SetCookie(&http.Cookie{ + Name: "jwt", + Value: item.Token, + Expires: time.Now().Add(30 * 24 * time.Hour), + HttpOnly: true, + }) + jwtData = item.Token + delete(sessions, hashid) + } + c.SetCookie(&http.Cookie{ + Name: "hashid", + Value: "", + Path: "/", + Expires: time.Unix(0, 0), + }) + } + if len(jwtData) > 0 { + token, err := jwt.ParseWithClaims(jwtData, claims, + func(token *jwt.Token) (interface{}, error) { + /* if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + */ + return []byte(cfg.HTTP.JWTKey + sessionKey), nil + }) + if err == nil { + if user, ok = GetUser(claims.UserID); ok && claims.Counter == user.PassCounter { + valid = token.Valid + userID = claims.UserID + } + } + } + if !valid { + if url == `/` { + c.Request().URL.Path = `login` + } else if url != `/api/login` && url != `/api/taskstatus` && url != `/api/sys` && + url != `/api/notification` { + return echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized") + } + } + } + if firstRun && url == `/` { + c.Request().URL.Path = `install` + } + if user, ok = GetUser(userID); !ok { + return echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized") + } if u, ok := userSettings[user.ID]; ok { lang = u.Lang } } auth := &Auth{ Context: c, - User: user, + User: &user, Lang: lang, } err = next(auth) @@ -187,28 +222,35 @@ func clearSessions() { } func loginHandle(c echo.Context) error { - var response ResponseLogin - - err := bcrypt.CompareHashAndPassword(storage.Settings.PasswordHash, []byte(c.FormValue("password"))) - if err == nil { - expirationTime := time.Now().Add(30 * 24 * time.Hour) - claims := &Claims{ - Counter: storage.PassCounter, - Username: `root`, - StandardClaims: jwt.StandardClaims{ - ExpiresAt: expirationTime.Unix(), - }, - } - var token string - tok := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - token, err = tok.SignedString([]byte(cfg.HTTP.JWTKey + sessionKey)) + var ( + response ResponseLogin + err error + ) + + for _, user := range GetUsers() { + err = bcrypt.CompareHashAndPassword(user.PasswordHash, []byte(c.FormValue("password"))) if err == nil { - response.ID = lib.UniqueName(12) - clearSessions() - sessions[response.ID] = session{ - Token: token, - Created: time.Now(), + expirationTime := time.Now().Add(30 * 24 * time.Hour) + claims := &Claims{ + Counter: user.PassCounter, + UserID: user.ID, + RoleID: user.RoleID, + StandardClaims: jwt.StandardClaims{ + ExpiresAt: expirationTime.Unix(), + }, + } + var token string + tok := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + token, err = tok.SignedString([]byte(cfg.HTTP.JWTKey + sessionKey)) + if err == nil { + response.ID = lib.UniqueName(12) + clearSessions() + sessions[response.ID] = session{ + Token: token, + Created: time.Now(), + } } + break } } if err != nil { diff --git a/config.go b/config.go index abb497f..a444878 100644 --- a/config.go +++ b/config.go @@ -6,6 +6,7 @@ package main import ( "eonza/lib" + "eonza/users" "io/ioutil" "os" "path" @@ -183,21 +184,20 @@ func Install() { if err != nil { golog.Fatal(err) } - var userid uint32 - if userid, err = NewUser(`root`); err != nil { - golog.Fatal(err) + ProInit(nil, 0) + userSettings[users.XRootID] = UserSettings{ + ID: users.XRootID, + Lang: appInfo.Lang, + Favs: []Fav{ + {Name: `welcome`}, + {Name: `tests`}, + {Name: `Tools`, IsFolder: true, Children: []Fav{ + {Name: `copy-files`}, + {Name: `create-archive`}, + }}, + }, } - rootSettings := userSettings[userid] - rootSettings.Favs = []Fav{ - {Name: `welcome`}, - {Name: `tests`}, - {Name: `Tools`, IsFolder: true, Children: []Fav{ - {Name: `copy-files`}, - {Name: `create-archive`}, - }}, - } - userSettings[userid] = rootSettings - if err = SaveUser(userid); err != nil { + if err = SaveUser(users.XRootID); err != nil { golog.Fatal(err) } if err = SaveStorage(); err != nil { diff --git a/const.go b/const.go index 942bb09..832c301 100644 --- a/const.go +++ b/const.go @@ -6,7 +6,7 @@ package main const ( // Version of the application - Version = "1.12.0" + Version = "1.13.0" // DefPort is the default web-server port DefPort = 3234 // DefTheme is the default web-server theme diff --git a/deflists.go b/deflists.go new file mode 100644 index 0000000..08cfca2 --- /dev/null +++ b/deflists.go @@ -0,0 +1,45 @@ +// Copyright 2020 Alexey Krivonogov. All rights reserved. +// Use of this source code is governed by a MIT license +// that can be found in the LICENSE file. + +package main + +import "html/template" + +type DefItem struct { + Title string + Value string +} + +type DefList struct { + Name template.JS + Items []DefItem +} + +var ( + defaultList = []DefList{ + { + Name: `charmaps`, + Items: []DefItem{ + {`utf-8`, `utf-8`}, + {`Big5 (Chinese - traditional)`, `Big5`}, + {`cp437 (IBM PC US)`, `cp437`}, + {`cp866 (MS-DOS Cyrillic Russian)`, `cp866`}, + {`EUC-KR (Korean)`, `EUC-KR`}, + {`GBK (Chinese - simplified)`, `GBK`}, + {"KOI8-R", "KOI8-R"}, + {"KOI8-U", "KOI8-U"}, + {`Shift JIS (Japanese)`, `Shift_JIS`}, + {`windows-1250 (Central European)`, `windows-1250`}, + {`windows-1251 (Cyrillic)`, `windows-1251`}, + {`windows-1252 (Western European)`, `windows-1252`}, + {`windows-1253 (Greek)`, `windows-1253`}, + {`windows-1254 (Turkish)`, `windows-1254`}, + {`windows-1255 (Hebrew)`, `windows-1255`}, + {`windows-1256 (Arabic)`, `windows-1256`}, + {`windows-1257 (Baltic)`, `windows-1257`}, + {`windows-1258 (Vietnamese)`, `windows-1258`}, + }, + }, + } +) diff --git a/go.mod b/go.mod index 57535cc..f9882da 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 golang.org/x/crypto v0.0.0-20201217014255-9d1352758620 golang.org/x/net v0.0.0-20201216054612-986b41b23924 // indirect - golang.org/x/text v0.3.4 // indirect + golang.org/x/text v0.3.4 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v2 v2.4.0 ) diff --git a/languages.go b/languages.go index 039bcd6..854f86e 100644 --- a/languages.go +++ b/languages.go @@ -6,6 +6,7 @@ package main import ( es "eonza/script" + "eonza/users" "fmt" "strings" @@ -43,7 +44,7 @@ func InitLang() { } } -func GetLangCode(user *User) (ret string) { +func GetLangCode(user *users.User) (ret string) { if user == nil && IsScript { return scriptTask.Header.Lang } @@ -53,7 +54,7 @@ func GetLangCode(user *User) (ret string) { return LangDefCode } -func GetLangId(user *User) (ret int) { +func GetLangId(user *users.User) (ret int) { if user == nil && IsScript { return langsId[scriptTask.Header.Lang] } diff --git a/main.go b/main.go index 0dd5906..6d0aa74 100644 --- a/main.go +++ b/main.go @@ -98,7 +98,8 @@ func main() { return } hideConsole() - LoadUsers() + ProInit(storage.Settings.PasswordHash, uint32(storage.PassCounter)) + LoadUsersSettings() defer CloseLog() if err := LoadCustomAsset(cfg.AssetsDir, cfg.HTTP.Theme); err != nil { golog.Fatal(err) @@ -106,7 +107,6 @@ func main() { LoadNotifications() InitScripts() CreateSysTray() - ProInit() RunCron() e = RunServer(WebSettings{ Port: cfg.HTTP.Port, diff --git a/notpro.go b/notpro.go index 403754e..360b185 100644 --- a/notpro.go +++ b/notpro.go @@ -7,20 +7,65 @@ package main import ( + "eonza/users" "fmt" + "sync" "github.com/labstack/echo/v4" ) const Pro = false -func ProInit() { +var ( + Users map[uint32]users.User + Roles map[uint32]users.Role + proMutex = &sync.Mutex{} +) + +func ProInit(psw []byte, counter uint32) { + Roles, Users = users.InitUsers(psw, counter) +} + +func GetUser(id uint32) (user users.User, ok bool) { + user, ok = Users[id] + return +} + +func GetUsers() []users.User { + user := Users[users.XRootID] + return []users.User{ + user, + } } func SetActive(active bool) error { return nil } +func SetUserPassword(id uint32, hash []byte) error { + proMutex.Lock() + defer proMutex.Unlock() + if user, ok := GetUser(id); ok { + user.PassCounter++ + user.PasswordHash = hash + Users[id] = user + } + return nil +} + +func IncPassCounter(id uint32) error { + proMutex.Lock() + defer proMutex.Unlock() + if user, ok := GetUser(id); ok { + user.PassCounter++ + Users[id] = user + } + return nil +} + func proSettingsHandle(c echo.Context) error { return jsonError(c, fmt.Errorf(`Unsupported`)) } + +func ProApi(e *echo.Echo) { +} diff --git a/pro.go b/pro.go index 6a7ad56..5cf4736 100644 --- a/pro.go +++ b/pro.go @@ -7,6 +7,7 @@ package main import ( + "eonza/users" "net/http" pro "github.com/gentee/eonza-pro" @@ -27,8 +28,24 @@ func SetActive(active bool) error { return pro.SetActive(active) } -func ProInit() { - pro.LoadPro(storage.Trial.Mode > 0) +func GetUser(id uint32) (user users.User, ok bool) { + return pro.GetUser(id) +} + +func GetUsers() []users.User { + return pro.GetUsers() +} + +func SetUserPassword(id uint32, hash []byte) error { + return pro.SetUserPassword(id, hash) +} + +func IncPassCounter(id uint32) error { + return pro.IncPassCounter(id) +} + +func ProInit(psw []byte, counter uint32) { + pro.LoadPro(storage.Trial.Mode > TrialOff, psw, counter, cfg.path) } func proSettingsHandle(c echo.Context) error { @@ -38,3 +55,7 @@ func proSettingsHandle(c echo.Context) error { response.Trial = storage.Trial return c.JSON(http.StatusOK, &response) } + +func ProApi(e *echo.Echo) { + pro.ProApi(e) +} diff --git a/render.go b/render.go index 8a18d05..253250e 100644 --- a/render.go +++ b/render.go @@ -36,6 +36,7 @@ type Render struct { Nfy *NfyResponse Update VerUpdate Pro bool + DefLists []DefList // ProSettings ProSettings // Port int /* Params map[string]string @@ -182,6 +183,7 @@ func RenderPage(c echo.Context, url string) (string, error) { render.Update = nfyData.Update render.Update.Notify = GetNewVersion(GetLangCode(c.(*Auth).User)) render.Pro = Pro + render.DefLists = defaultList data = render } diff --git a/script/embedded.go b/script/embedded.go index 394cd3b..19fec99 100644 --- a/script/embedded.go +++ b/script/embedded.go @@ -147,6 +147,7 @@ var ( {Prototype: `SetVar(str,obj)`, Object: SetVarObj}, {Prototype: `GetVar(str) str`, Object: GetVar}, {Prototype: `GetVarBool(str) bool`, Object: GetVarBool}, + {Prototype: `GetVarBytes(str) str`, Object: GetVarBytes}, {Prototype: `GetVarInt(str) int`, Object: GetVarInt}, {Prototype: `GetVarObj(str) obj`, Object: GetVarObj}, {Prototype: `SendNotification(str)`, Object: SendNotification}, @@ -157,9 +158,11 @@ var ( {Prototype: `SQLQuery(str,str,arr.str,str)`, Object: SQLQuery}, {Prototype: `SQLRow(str,str,arr.str,str)`, Object: SQLRow}, {Prototype: `SQLValue(str,str,arr.str,str)`, Object: SQLValue}, + {Prototype: `ConvertText(str,str,str) str`, Object: ConvertText}, // For gentee {Prototype: `YamlToMap(str) map`, Object: YamlToMap}, // {Prototype: `Subbuf(buf,int,int) buf`, Object: Subbuf}, + {Prototype: `YamlToObj(str) obj`, Object: YamlToObj}, {Prototype: `CopyName(str) str`, Object: CopyName}, {Prototype: `CloseLines(handle)`, Object: CloseLines}, {Prototype: `GetLine(handle) str`, Object: GetLine}, @@ -306,6 +309,18 @@ func GetVar(name string) (ret string, err error) { if IsVar(name) != 0 { id := len(dataScript.Vars) - 1 ret, err = Macro(dataScript.Vars[id][name]) + } else if strings.ContainsAny(name, `[.`) { + var found bool + if ret, found = ReplaceObj(name); !found { + ret = `` + } + } + return +} + +func GetVarBytes(name string) (ret string, err error) { + if IsVar(name) != 0 { + ret = dataScript.Vars[len(dataScript.Vars)-1][name] } return } diff --git a/script/encoding.go b/script/encoding.go index a6d707c..f635a18 100644 --- a/script/encoding.go +++ b/script/encoding.go @@ -11,6 +11,7 @@ import ( "os/exec" "eonza/lib" + "eonza/users" "github.com/gentee/gentee" ) @@ -27,7 +28,9 @@ type Header struct { SourceCode []byte Constants map[string]string Lang string - UserID uint32 + User users.User + ClaimKey string + IsPro bool IP string TaskID uint32 ServerPort int diff --git a/script/gentee.go b/script/gentee.go index 12f7708..c3f1568 100644 --- a/script/gentee.go +++ b/script/gentee.go @@ -95,6 +95,74 @@ func ScanLines(flines *FileLines) int64 { return 0 } +func ifaceToObj(val interface{}) (*core.Obj, error) { + ret := core.NewObj() + switch v := val.(type) { + case bool: + ret.Data = v + case string: + ret.Data = v + case int: + ret.Data = v + case int64: + ret.Data = v + case float64: + ret.Data = v + case []interface{}: + data := core.NewArray() + data.Data = make([]interface{}, len(v)) + for i, item := range v { + iobj, err := ifaceToObj(item) + if err != nil { + return nil, err + } + data.Data[i] = iobj + } + ret.Data = data + case map[string]interface{}: + var i int + data := core.NewMap() + data.Keys = make([]string, len(v)) + for key, vi := range v { + data.Keys[i] = key + iobj, err := ifaceToObj(vi) + if err != nil { + return nil, err + } + data.Data[key] = iobj + i++ + } + ret.Data = data + case map[interface{}]interface{}: + var i int + data := core.NewMap() + data.Keys = make([]string, len(v)) + for key, vi := range v { + ikey := fmt.Sprint(key) + data.Keys[i] = ikey + iobj, err := ifaceToObj(vi) + if err != nil { + return nil, err + } + data.Data[ikey] = iobj + i++ + } + ret.Data = data + default: + return nil, fmt.Errorf("unsupported object type %T", val) + } + return ret, nil +} + +// YamlToObj converts json to object +func YamlToObj(input string) (ret *core.Obj, err error) { + var v interface{} + if err = yaml.Unmarshal([]byte(input), &v); err != nil { + return + } + return ifaceToObj(v) +} + /* // Subbuf(buf, int, int) buf func Subbuf(buf *core.Buffer, off int64, size int64) (*core.Buffer, error) { diff --git a/script/text.go b/script/text.go new file mode 100644 index 0000000..8986db4 --- /dev/null +++ b/script/text.go @@ -0,0 +1,39 @@ +// Copyright 2021 Alexey Krivonogov. All rights reserved. +// Use of this source code is governed by a MIT license +// that can be found in the LICENSE file. + +package script + +import ( + "bytes" + "io/ioutil" + "strings" + + "golang.org/x/text/encoding/ianaindex" + "golang.org/x/text/transform" +) + +func ConvertText(source, from, to string) (string, error) { + var b bytes.Buffer + if from != `utf-8` { + e, err := ianaindex.IANA.Encoding(from) + if err != nil { + return ``, err + } + toutf8 := transform.NewReader(strings.NewReader(source), e.NewDecoder()) + decBytes, _ := ioutil.ReadAll(toutf8) + source = string(decBytes) + } + if to != `utf-8` { + e, err := ianaindex.IANA.Encoding(to) + if err != nil { + return ``, err + } + toutf := transform.NewWriter(&b, e.NewEncoder()) + toutf.Write([]byte(source)) + toutf.Close() + source = b.String() + } + + return source, nil +} diff --git a/server.go b/server.go index f4dfdff..5a5f5bc 100644 --- a/server.go +++ b/server.go @@ -14,6 +14,7 @@ import ( "time" "eonza/lib" + "eonza/users" "github.com/kataras/golog" "github.com/labstack/echo/v4" @@ -37,12 +38,6 @@ type Response struct { Error string `json:"error,omitempty"` } -type Auth struct { - echo.Context - User *User - Lang string -} - var ( ErrNotFound = errors.New(`Not found`) IsScript bool // true, if web-server for the script @@ -184,10 +179,17 @@ func fileHandle(c echo.Context) error { } func logoutHandle(c echo.Context) error { - storage.PassCounter++ - if err := SaveStorage(); err != nil { + var err error + user := c.(*Auth).User + if err = IncPassCounter(user.ID); err != nil { return jsonError(c, err) } + if user.ID == users.XRootID { + storage.PassCounter++ + if err = SaveStorage(); err != nil { + return jsonError(c, err) + } + } return c.JSON(http.StatusOK, Response{Success: true}) } @@ -277,6 +279,7 @@ func RunServer(options WebSettings) *echo.Echo { e.POST("/api/settings", saveSettingsHandle) e.POST("/api/setpsw", setPasswordHandle) e.POST("/api/favs", saveFavsHandle) + ProApi(e) } go func() { if IsScript { diff --git a/settings.go b/settings.go index 971c28d..37cf58a 100644 --- a/settings.go +++ b/settings.go @@ -5,6 +5,7 @@ package main import ( + "eonza/users" "net/http" "github.com/labstack/echo/v4" @@ -62,16 +63,17 @@ func setPasswordHandle(c echo.Context) error { err error hash []byte ) + user := c.(*Auth).User if cfg.playground { - return jsonError(c, Lang(GetLangId(c.(*Auth).User), `errplaypsw`)) + return jsonError(c, Lang(GetLangId(user), `errplaypsw`)) } if err = c.Bind(&psw); err != nil { return jsonError(c, err) } - if len(storage.Settings.PasswordHash) > 0 { - err = bcrypt.CompareHashAndPassword(storage.Settings.PasswordHash, []byte(psw.CurPassword)) + if len(user.PasswordHash) > 0 { + err = bcrypt.CompareHashAndPassword(user.PasswordHash, []byte(psw.CurPassword)) if err != nil { - return jsonError(c, Lang(GetLangId(c.(*Auth).User), `invalidpsw`)) + return jsonError(c, Lang(GetLangId(user), `invalidpsw`)) } } if len(psw.Password) > 0 { @@ -80,11 +82,16 @@ func setPasswordHandle(c echo.Context) error { return jsonError(c, err) } } - storage.Settings.PasswordHash = hash - storage.PassCounter++ - if err = SaveStorage(); err != nil { + if err = SetUserPassword(user.ID, hash); err != nil { return jsonError(c, err) } + if user.ID == users.XRootID { + storage.Settings.PasswordHash = hash + storage.PassCounter++ + if err = SaveStorage(); err != nil { + return jsonError(c, err) + } + } return jsonSuccess(c) } diff --git a/storage.go b/storage.go index fa5e0cd..22f49fe 100644 --- a/storage.go +++ b/storage.go @@ -25,6 +25,7 @@ const ( TrialDisabled = -1 TrialOff = 0 TrialOn = 1 + Licensed = 2 ) type Trial struct { @@ -50,7 +51,7 @@ type Storage struct { Settings Settings Trial Trial PassCounter int64 - Users map[uint32]*User + Users map[uint32]*User // Deprecated Scripts map[string]*Script } @@ -101,7 +102,7 @@ func LoadStorage(psw string) { if err := zr.Close(); err != nil { golog.Fatal(err) } - if storage.Trial.Mode >= TrialOff && storage.Trial.Count > TrialDays { + if storage.Trial.Mode < Licensed && storage.Trial.Count > TrialDays { storage.Trial.Mode = TrialDisabled } if !storage.Settings.NotAskPassword { diff --git a/task.go b/task.go index 0982272..24847da 100644 --- a/task.go +++ b/task.go @@ -183,7 +183,7 @@ func initTask() script.Settings { task = Task{ ID: scriptTask.Header.TaskID, - UserID: scriptTask.Header.UserID, + UserID: scriptTask.Header.User.ID, Status: TaskActive, Name: scriptTask.Header.Name, StartTime: time.Now().Unix(), diff --git a/taskmanager.go b/taskmanager.go index 9729c0f..c0d7471 100644 --- a/taskmanager.go +++ b/taskmanager.go @@ -138,7 +138,7 @@ func NewTask(header script.Header) (err error) { Status: TaskActive, Name: header.Name, StartTime: time.Now().Unix(), - UserID: header.UserID, + UserID: header.User.ID, Port: header.HTTP.Port, } if err = SaveTrace(&task); err != nil { diff --git a/users.go b/users.go index 7c6b60b..67c5918 100644 --- a/users.go +++ b/users.go @@ -5,15 +5,13 @@ package main import ( - "encoding/hex" - "eonza/lib" - es "eonza/script" "fmt" - "hash/crc32" "io/ioutil" - "os" "path/filepath" + es "eonza/script" + "eonza/users" + "github.com/labstack/echo/v4" "gopkg.in/yaml.v2" ) @@ -38,7 +36,7 @@ type UserSettings struct { } // User stores user's parameters -type User struct { +type User struct { // Deprecated ID uint32 Nickname string PublicKey []byte @@ -48,65 +46,24 @@ var ( userSettings = make(map[uint32]UserSettings) ) -func LoadUsers() error { +func LoadUsersSettings() error { var err error - for _, item := range storage.Users { - userSettings[item.ID] = UserSettings{ - ID: item.ID, - Lang: appInfo.Lang, - } - } - - err = filepath.Walk(cfg.Users.Dir, func(path string, info os.FileInfo, err error) error { - var data []byte - if err != nil { - return err - } - if info.IsDir() || filepath.Ext(path) != UserExt { - return nil - } - var user UserSettings - data, err = ioutil.ReadFile(path) - if err = yaml.Unmarshal(data, &user); err != nil { - return err - } - if _, ok := storage.Users[user.ID]; ok { - userSettings[user.ID] = user - } - return err - }) - return err -} - -func NewUser(nickname string) (uint32, error) { - user := User{ - Nickname: nickname, - } - if !lib.ValidateSysName(nickname) { - return 0, fmt.Errorf(Lang(DefLang, `invalidfield`), Lang(DefLang, `nickname`)) - } - for _, item := range storage.Users { - if item.Nickname == nickname { - return 0, fmt.Errorf(Lang(DefLang, `errnickname`), nickname) + for _, item := range GetUsers() { + var ( + data []byte + user UserSettings + ) + user.Lang = appInfo.Lang + data, err = ioutil.ReadFile(filepath.Join(cfg.Users.Dir, item.Nickname+UserExt)) + if err == nil { + if err = yaml.Unmarshal(data, &user); err != nil { + return err + } } - + user.ID = item.ID + userSettings[user.ID] = user } - private, public, err := lib.GenerateKeys() - if err != nil { - return 0, err - } - user.PublicKey = public - user.ID = crc32.ChecksumIEEE(private) - if err = ioutil.WriteFile(filepath.Join(cfg.Users.Dir, user.Nickname+`.key`), - []byte(hex.EncodeToString(private)), 0777 /*os.ModePerm*/); err != nil { - return 0, err - } - storage.Users[user.ID] = &user - userSettings[user.ID] = UserSettings{ - ID: user.ID, - Lang: appInfo.Lang, - } - return user.ID, nil + return nil } // AddHistoryEditor adds the history item to the user's settings @@ -192,13 +149,14 @@ func SaveUser(id uint32) error { if err != nil { return err } + user, ok := GetUser(id) + if !ok { + return fmt.Errorf(`Access denied`) + } return ioutil.WriteFile(filepath.Join(cfg.Users.Dir, - storage.Users[id].Nickname+UserExt), data, 0777 /*os.ModePerm*/) + user.Nickname+UserExt), data, 0777 /*os.ModePerm*/) } func RootUserSettings() UserSettings { - for _, user := range storage.Users { - return userSettings[user.ID] - } - return UserSettings{Lang: LangDefCode} + return userSettings[users.XRootID] } diff --git a/users/users.go b/users/users.go new file mode 100644 index 0000000..4199cca --- /dev/null +++ b/users/users.go @@ -0,0 +1,86 @@ +// Copyright 2021 Alexey Krivonogov. All rights reserved. +// Use of this source code is governed by a MIT license +// that can be found in the LICENSE file. + +package users + +import ( + echo "github.com/labstack/echo/v4" +) + +const ( + RootUser = `root` + RootRole = `admin` + XRootID = 1 + XAdminID = 1 +) + +type Role struct { + ID uint32 `json:"id"` + Name string `json:"name"` + Allow string `json:"allow"` + Tasks int `json:"tasks"` + Notifications int `json:"notifications"` + // Disallow string + // Scripts int + // Settings int + // Pro int +} + +type User struct { + ID uint32 `json:"id"` + RoleID uint32 `json:"roleid"` + PassCounter uint32 `json:"-"` + Nickname string `json:"nickname"` + PasswordHash []byte `json:"-"` +} + +type Auth struct { + echo.Context + User *User + Lang string +} + +func InitUsers(psw []byte, counter uint32) (map[uint32]Role, map[uint32]User) { + Roles := map[uint32]Role{ + XAdminID: {ID: XAdminID, Name: RootRole}, + } + Users := map[uint32]User{ + XRootID: {ID: XRootID, Nickname: RootUser, PasswordHash: psw, RoleID: XAdminID, + PassCounter: counter}, + } + return Roles, Users +} + +/* +func NewUser(nickname string) (uint32, error) { + user := User{ + Nickname: nickname, + } + if !lib.ValidateSysName(nickname) { + return 0, fmt.Errorf(Lang(DefLang, `invalidfield`), Lang(DefLang, `nickname`)) + } + for _, item := range storage.Users { + if item.Nickname == nickname { + return 0, fmt.Errorf(Lang(DefLang, `errnickname`), nickname) + } + + } + private, public, err := lib.GenerateKeys() + if err != nil { + return 0, err + } + user.PublicKey = public + user.ID = crc32.ChecksumIEEE(private) + if err = ioutil.WriteFile(filepath.Join(cfg.Users.Dir, user.Nickname+`.key`), + []byte(hex.EncodeToString(private)), 0777 os.ModePerm); err != nil { + return 0, err + } + storage.Users[user.ID] = &user + userSettings[user.ID] = UserSettings{ + ID: user.ID, + Lang: appInfo.Lang, + } + return user.ID, nil +} +*/