diff --git a/api.go b/api.go index 6bc99db..03feb72 100644 --- a/api.go +++ b/api.go @@ -26,6 +26,7 @@ type CompileResponse struct { type RunResponse struct { Success bool `json:"success"` + Port int `json:"port"` ID uint32 `json:"id"` Error string `json:"error,omitempty"` } @@ -137,8 +138,10 @@ func runHandle(c echo.Context) error { Title: title, AssetsDir: cfg.AssetsDir, LogDir: cfg.Log.Dir, + CDN: cfg.CDN, Console: console, IsPlayground: cfg.playground, + IP: c.RealIP(), UserID: c.(*Auth).User.ID, Constants: storage.Settings.Constants, Lang: langCode, @@ -154,6 +157,15 @@ func runHandle(c echo.Context) error { } if header.IsPlayground { header.Playground = &cfg.Playground + tasksLimit := cfg.Playground.Tasks + for _, item := range tasks { + if item.Status < TaskFinished { + tasksLimit-- + } + } + if tasksLimit <= 0 { + return jsonError(c, Lang(GetLangId(c.(*Auth).User), `errtasklimit`, cfg.Playground.Tasks)) + } } if src, err = GenSource(item, &header); err != nil { return jsonError(c, err) @@ -173,7 +185,7 @@ func runHandle(c echo.Context) error { if console { return c.Blob(http.StatusOK, ``, data.Bytes()) } - return c.JSON(http.StatusOK, RunResponse{Success: true, ID: header.TaskID}) + return c.JSON(http.StatusOK, RunResponse{Success: true, Port: header.HTTP.Port, ID: header.TaskID}) } func pingHandle(c echo.Context) error { diff --git a/assets.go b/assets.go index 8673157..dbffc4d 100644 --- a/assets.go +++ b/assets.go @@ -213,7 +213,7 @@ var _escData = map[string]*_escFile{ name: "demo.url.yaml", local: "../eonza-assets/init/demo.url.yaml", size: 818, - modtime: 1601113639, + modtime: 1601286051, compressed: ` H4sIAAAAAAAC/2yTQW/cIBCF7/yKp43UPe2m6qEHzlGrSFFXSpVzROyxjYSBwrBu+usrwHa9jfeImPd9 8xZHYta2j1IAVo0k0dLozikYAbBmQxIPNDq8PD8JoKXYSFw8WfBAiJ4a3WlqkYKBrodvwU2RggCM6w1d @@ -242,97 +242,101 @@ Nvhiu30Mie06ub+k1ipSjt0dc4O9xM5zHnum+YjNJivxEwAA///CQZLfyAIAAA== "/eonza-assets/languages/en.yaml": { name: "en.yaml", local: "../eonza-assets/languages/en.yaml", - size: 4446, - modtime: 1600423784, + size: 4633, + modtime: 1602157220, compressed: ` -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 +1ftPAAAA//+9FUgKGRIAAA== `, }, "/eonza-assets/languages/ru.yaml": { name: "ru.yaml", local: "../eonza-assets/languages/ru.yaml", - size: 6976, - modtime: 1600423806, + size: 7269, + modtime: 1602157220, compressed: ` -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 -qkMlhqsP/TKLCvHvAAAA///t2m7TQBsAAA== +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 +t8yiQvwnAAD//9jencZlHAAA `, }, @@ -383,6 +387,20 @@ jlDI/wIJZW+TXwEAAP//M90lAMgDAAA= `, }, + "/eonza-assets/scripts/create-dir.yaml": { + name: "create-dir.yaml", + local: "../eonza-assets/scripts/create-dir.yaml", + size: 405, + modtime: 1602157220, + compressed: ` +H4sIAAAAAAAC/4yPMU4DMRBFe5/iSykCRSgQlVtyj8jaHSWWHO8yO0ZKF6VG3IEbUAQRUeQM4xshe1do +oaKz/rP++zOQiI/bwRoguj1ZNExOaNV6NoB4CWSxXGwKXCwN0NLQ1KQ8ahK6baBnChYPBkiRU7QQTmSA +HYX+T2eJgotbC06A6R27/WDNavL3TnZz810JqkcOPVncG6DrxXexjgaYnpJnaidnqa6E4sg34+LHugGy +I7SeqZGODyMfvRNfzxinXw36plf91LO+51N+gZ71ko/6oV/5pNd81Et+nRf+53vTtT/qteebcuut+Q4A +AP//KxwG9pUBAAA= +`, + }, + "/eonza-assets/scripts/create-file.yaml": { name: "create-file.yaml", local: "../eonza-assets/scripts/create-file.yaml", @@ -577,18 +595,18 @@ AAD//+UH+h5jBQAA "/eonza-assets/scripts/if.eonza.yaml": { name: "if.eonza.yaml", local: "../eonza-assets/scripts/if.eonza.yaml", - size: 1152, - modtime: 1597297512, + size: 1213, + modtime: 1602157220, compressed: ` -H4sIAAAAAAAC/5STzW4TMRDH736KUaqqIJGqgODgK+LABQ4grpW7mQRLXnvxR9TyIaWpxLUnLlwQbxBV -ihQVUl5h/EbI3k2ySRdB97Sej/9vZuxx6L3UI8cZgBYlcpDDQzT6g2AAXnqFHA72juXQeeGxRO33DhjA -AF2RHeknW96hqlJyfx3YGJXQIw42MABlRgrHqDg8ZQBB26A5eBuQVcKK0nHWb4pA5XAs7FYNjS3T/FmF -HB6t45V0vh18WBg9kF4a7VrxTxiAqbI19Qs5rf5bCdXQ9G20xsImZxbKngbeztPG38rTOBIJtpN41Jy2 -KsmG4KvgN+c+9Hqtw8tXb7aQRVndQhamrITFBNqhPv4btXY7b9cW6bF07TI2+vg+CLVWTt9YqJAuLDl2 -JqkCdsxShX9MEk+7Rnnq05XerSmp/f80JVq6rZZ6R73OcGM7ox/2WHrqmYG6Jh3Xe/Js9RiFAldYWdVl -rV40h+fKIbwVVooTVc+svXEcXgzhdWutbNiSpx90HSe0oN9xCvEintNPuqErWsTLHQ59p3mc0Jx+0ZyW -tKRZvAS6ollOn9EyTmnWwadvdEPLeB6ncRIv6Dp+SeJAXzNrwQozQA6f+gxADjft3mvAD/Ki3YePzdj2 -T8zgbJ8BfGZ/AgAA//9yvvKcgAQAAA== +H4sIAAAAAAAC/7STzW4TMRDH736KUaqqIJGqgODgK+LABQ4grpW7mQRLXnvxR5TyIaWpxLUnLlwQbxBV +ihQVUl5h/EbI3k2ySRdxYk/rmfn/f7bH49B7qUeOMwAtSuQgh8do9AfBALz0CjkcHZzKofPCY4naHxwx +gAG6IifST468Q1UlcX9T2ASV0CMONjAAZUYKx6g4PGUAQdugOXgbkFXCitJx1m82gcrhWNidPTSxTPPn +FXJ4tKlX0vl28XFh9EB6abRr1T9hAKbK0XReyLL6b21UQ9O39RoLm5LZKGcaeFunjb+j0zgSCbYnPGlW +OzvJgeCr4LfrPvR6rcXLV292kEVZ3UEWpqyExQTaoz7+G7VOO283EemxdO1tbP3xfRBq45y+sVAhNSwl +OiVDqRAn0nnXpdtm99qgAnY0QoV/tAEnXX2Y+PQe/suNiJZv61y9k15nubGd1Q97LM1JZqCuSaf1kD1b +v2ShwBVWVvUB1+PA4blyCG+FleJM1XfWHlcOL4bwujWTNuzY0w+6iVNa0u84g3gZL+gn3dI1LePVHoe+ +0yJOaUG/aEErWtE8XgFd0zzL57SKM5p38Okb3dIqXsRZnMZLuolfkjnQ18xassIMkMOnPgOQw+1x7zXg +B3lK78PH5toOz8zg/JABfGZ/AgAA///BX86ovQQAAA== `, }, @@ -816,16 +834,16 @@ B62MxGD0UJeL0aClJT2qaMIZzWu0dyIr25Zpd4O7ORUxUPs/tMU92UAEXzjdBGQrqoo6o18gW111ulef "/eonza-assets/scripts/while.yaml": { name: "while.yaml", local: "../eonza-assets/scripts/while.yaml", - size: 997, - modtime: 1597323909, + size: 1058, + modtime: 1602157220, compressed: ` -H4sIAAAAAAAC/5RTQa7TMBDd+xSjVFVBIqiAYOEte1iAxLIyySi15NjBHodWwIING47BDVgBFf8M7o2+ -7KRt0qb6/2cTzxvPezPjGYdEUleOMwAtauTweS0VMgCSpJDDYrZKyGzBAEp0RYLiISFrVE0fkzsShDVq -6nEldMXBegagTKWwRcXhFQPw2nrNgaxH1ggrasdZ3ssr6Wio/rQwupQkjXZJkLYNcnjJAEyT0Jg5pLDu -dCBqhU32kKsVNjoTUfIksuejOG3oIk5jJaLYWeCyt0aZJMBT4+lk55BlA+PN2/cjyaJuLiQLUzfCYhQ6 -U31xTbVzO7JHRBLWbpjGiR8/eaGOzPFrhfLIITnOOqk8TvRS+Ts6iZupVm4oPunDipKa7lOUGPAOSsqW -2eR1YydvP8tYHN2kgbpTWnWj//owjEKBMqZ7tm5BOHyIP3g32ALrR9Hh1/572IWb8Dv83/8Mf2H/I/wJ -/8JuRHP9VmFK5PA1Z9Bt3CmdR1n2JO3AY/jSVzT/aMrtnAF8Y7cBAAD//+93eerlAwAA +H4sIAAAAAAAC/7RTsc7TMBDe/RSnVFVBIqiAYPDKDgNIjJVJjtSSYwf7HFoBAwsLj8EbMAEVPIP7RshO +2iRtKqa/S33f+fu+c+7OIZHUleMMQIsaOXzYSoUMgCQp5LBabBKyWDGAEl2RoHhIyBZV03NyR4KwRk09 +roSuOFjPAJSpFLaoODxjAF5brzmQ9cgaYUXtOMt7eyUdjd0fFkaXkqTRLhnSvkEOTxmAaRIaK4dE604n +oVbYFI+1WmFjMgmlTBJ7POFpQ1c8jZWIZhfEdR9NKkmAp8bTEOeQZaPgxcvXE8uibq4sC1M3wmI0unB9 +csu1SzuyZ0QS1m5cxqCP771QZ+X4a4XyyCElZinvpELcSUdujjdkL9qgPM40Qvn/tAF3c33YUZyHO/ki +YqQ7ele2zmavGzt7+1HG4twnD9Sd06bbm+enSRYKlDFdz7vt4vAm/sGr0QpZP2GH78cv4RD+hh/hz/Fb ++AXHr+Fn+B0OE5nbtwpTIodPOYNuXYdy7mXZg7RA9+Fj/6LlW1PulwzgM/sXAAD//1P8EsAiBAAA `, }, @@ -4917,7 +4935,7 @@ lWyiRStWXn2nT7ayYoSLWrOqynfEF595Yv9/LSEhAudHEkeP/J50/pM/k85+8i1xHyLaI9c/QbU3y0YE name: "card.tpl", local: "../eonza-assets/themes/default/templates/card.tpl", size: 4101, - modtime: 1599206095, + modtime: 1601821059, compressed: ` H4sIAAAAAAAC/7RXS3PjNhK++1e0MauRXDYpz2ztHihRM8c97CGHVC4u1xRENEXEIMAALcqORv89Bb5E ivTETiq6mGz04+vXR3jtEisLAnopMGaEz7R8DgjzQnFCBlLELOFWsM0VAMBayBISxZ2LWaGC/zIoA5nG @@ -4969,7 +4987,7 @@ M3YyLKJk8NM51r0kPi+3Z5l/AgAA///y9sEPpgYAAA== name: "dialogs.tpl", local: "../eonza-assets/themes/default/templates/dialogs.tpl", size: 9352, - modtime: 1600353049, + modtime: 1601632567, compressed: ` H4sIAAAAAAAC/+xZbW/bOPJ/n08xVf/+y0Ejx4ndBpAjo710Axx20T1cdq8oir6gxZHNMyVqScoPF/i7 H0g9WpbTNL0tWmBfNJVmhjPDmeH8RvS1CiVLNehtioGjcaPPN57GOOVEowOMBg7lcy9LuSDUmZ4AAFyv @@ -5015,7 +5033,7 @@ DxaiBOSCZ7UTvTBQBC+MjkJDcRozySbm2FUjzH8DAAD//44sea6IJAAA name: "dyncomp.tpl", local: "../eonza-assets/themes/default/templates/dyncomp.tpl", size: 12550, - modtime: 1601113554, + modtime: 1601286051, compressed: ` H4sIAAAAAAAC/+xa3W/juBF/918xUZuTfGvJzu59QbZ817sWaIHrdYFbFCiMPNASbbMrUSpFO0mz/t+L IfVliXTi7O6hQJuH2CY5w/n4zXCG0qKMBSskyIeCRo6k93J670uaFSmR1AGWRE7sxzsav1/n985yBACw @@ -5071,7 +5089,7 @@ Xq9YOOgEbmV8yvaSLulRNeshqEZgAtWbryGsbtvmQ7VOzWsZ/wkAAP//8CzwcgYxAAA= name: "editor.tpl", local: "../eonza-assets/themes/default/templates/editor.tpl", size: 25016, - modtime: 1600423837, + modtime: 1601821356, compressed: ` H4sIAAAAAAAC/+x8bW/rNpbwd/8KRlPXdms5ye3L86wcubNodzG7KGYKTFFg4fHe0hLtcCKTGop24ub6 vy/4JlEUqdg32U4XaD/0xuTh4eEhz/ux76qM4ZIDfixRGnH0xK+fYo52ZQE5igDO0wjlmFMWLQYA3B3i @@ -5206,80 +5224,84 @@ OENODWZ7LY47MIPW69k1LvAOyvLmmzb/UTqNMHdfi2v2X+SfAAAA//9sLKc6ggcAAA== "/eonza-assets/themes/default/templates/index.tpl": { name: "index.tpl", local: "../eonza-assets/themes/default/templates/index.tpl", - size: 15596, - modtime: 1601027417, + size: 16631, + modtime: 1602157220, compressed: ` -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 -AAD//5KPjizsPAAA +H4sIAAAAAAAC/9x8bY/jNpL/e3+Kav13YnnHkmcms0Dgtpx/MNnD4W7uElzPbhAYjYCWaJvTEqkjKbu9 +HX/3Q5GULEqyuyebxT3kRY9EFn+sJxaLRTmLm+9/+PDp5x//DDtd5MvRov6HkmwJI4BFQTWBdEekojoJ +Kr2JvgmWTQcnBU2CPaOHUkgdQCq4plwnwYFlepdkdM9SGpmXKeNMM5JHKiU5Td7GbyyOZjqny9UK4u/K +Mv6Eb3B/v5jZdqTIGX8ASfMkYKngAewk3STBbEP2+B6zVASgjyVNAlaQLZ09RobO8n8erHZC6rTS8GUo +HRB9zKnaUaobhFSp2b6imm2OccF4nCr1wlEbwTU5UCUK+oUjqeB/I2f6mygyQyzFTutSzWezStG4PUUq +ipmkOSWKqtn+T/Gb+O3XBo3kucHqTRlFy9FiZpxhtFiL7LgcLTK2B5ZBAgEpSzv9PiJlCWAGJsGOsu1O +z9++efPq1vTjf5YmWhMJSJuKXMgkWOcVhYzIB8qjtwFklCv7DvuIbZLgIORDA2FA1prD/09zlj4kQSbJ +gUpI4MY+Bcayy8XeWG65IQo2BKdUi5lrw4e15h6kFiJfExlZh3t6UlpIGitNNI1N2+mEw3yyNoAqSUql +wXaPXY6duKVkBZHHALRIghnNmBbyW5VKVmqzkDg9BJDmRKkkOOyYpgBov+hgNBqtRZ4FICqdM04zp6I/ +SFFpGuN4uEngbUtdjgEUHFRB8hxyutHLDYnKvDrr5Cu+VuXtK04PlpVXZ+4HtDUkztz63bh2vMPhEFsP +FXI7htfQVumO5mUAmsgtBpRf7Ot1oaF4jN6fJX+JhP9ZUaWZ4F0pcbrrAl6xJsBqxTYQf0/3NBfl/b3H +iBmd7ljj3emR8AA0fdSRazHyBcuF0lLw7TKzOIuZe8c5EcCfkfLMm8ny8GNOjlspqk7nABtCEr6lQ4x0 +4oVntlkmUjUrm1li3BkC6Ezlm7ER7Dyska3Po7GaRCODr54OKbTMGaVMpjntgrWX9wsVyIW+qMTFPioo +r2AttBaF8SmYi5LySPBoJ/Ym6GhZUei4oqZFmRNNYR+pXOg5STXbE42yPYHgcAoG9LDWvCuxiYG9RhSx +17iPBE8CwYNOT0+LcI6LEc1zViqmon2jugGVeivDNtYCLkfdNZgzpQeEw+aIaVoMML5BvYTYOQU2AcbB +6Iui7sNJ0Bsxf6DHJGD9DrchIFIsuHl5qTZc2HDxp5TRu2D59AQGyvTb4D+kIl++ZvuwY82bG9ylGVB1 +Q9JVeF+x2IYauuzjSOE228ZOi33EyZ5tiVlFdr9sAEhZnp/XSuSVPi8xzxX3USEyTBLcjjvy1WuSA6fL +LNrk9BHwD0adquDwuVKYJdm4Gq2pPlDKg07eAJ3EIWN7Lz6jPlqic7JvvdV2PEZvzm6yHA2bDPRBYN5E +XRxcrUwK+s+ioCXZ0vv71ja1zgl/CMAYMAlqkv5me7Y12RNNZM/YrNiCkmkSzEyaqWa52Iro/TdxybfB +sPV9vMszuuS7NyVq0Mlm0mvMrj2tDmCpam2ddb9axX+lUjHBcdwgzRWuB3jq+LtvnIztWea23/p5dMl+ +c8yjzHIzSZAfGFx8MYSMo5/go/KJXEhpVmwXAjMsGwsyWMDXfjem3KNLMcYsBefZ5vwzh/fflI+3waWd +ULG/0ST4+l35+MII5Iz45f7Qi0j1suklm18ezv4B1v8fYfwlvPu/avz/Rutf3+eaGHXeA/CkuzfAhHEq +a9Ztaku5phJMEhlF2AR4ZMUdffQiF2vvXqWO3gZ11PwgyqNJVL3IaZLNmhM8KXe5bgdZJO5twI5uX2vK +HI0vn6IXxtFltGf0sFzM2m8eQ43OF1m+jaoyFySDudqJQxLYtwDmbiez79b9TS45X2ueBGmRBcvF7Dy+ +BVjn4jVk/X4GJerhGmI9oIVJpRSyBjQvZzQqpUObpyTP1wTP/vVTgMmfUNSNggQ2JFe0nso0tuZJRVEQ +nql6Kk4PyJjlMy0yW8+yrRteo9SjTLHDJlfLkTPvwh6a3Z7+2ZSCTDHns8LhtneYLLIWfCF1U196hpQ8 +MqFeiPk4QDdarZpjTLATBQ0gvr/3WrWkA63ZkaeiKPsdKZFZv9WWPwbAiXpQ/WZFtWZ8O9BjKwg9+l2l +M3HgQZdLRnKxVcEAjxiBLFCtrOVolAquNBhLKUhg9WScqSQY08ez8XRkk9CCzuGNfUElCE65ngPmiSOA +E3b4A6303vC3veF/NkTDAEZN3vh3vfGfkGZ4eK1OD+HrHsKdI5sOo6DqPYT3fRXQvLwwujaRh/CnPg+O +zKHc33pGwSXP6QH+WtH/MO/hU22t06QhNQWoM+VjfIcNIfJjqlJzxxrYDH8OY8cUAMrYMjVAuiN8S7O5 +jTR1KwbJXqM9z86BV3neEDKl/RZjyjms7psZclauBZGZT2d98syqaXMG8ltP09YLrla/G2VgeSYpb89q +Bo5aAOZPUWmzZTUzVGVGNLV1+tAob2qVNmnmaNVOIbGdt6MWXxYCPaNBqGTeHY+KhwR7Bgbf2WBWD7eq +6SK4iJe47gGYj8ZqDYw1YhfGtkLiugdgPliXaHCci3SBXDMkNcEA1HfGZRok60FdINsKieseEoyps3bQ +5XpCIUFiuoYEqj2wwdiTvOrx0TgqJJZgAMoEobOn4FvPUwxJYjtbEKfRaTIauTUb2jFuJ5zXSxlfwhoO +82RvKWAD5rVzGG/IeDqbwa+/4uPdfjseeWvlNLH/0nwO4/9HyjquZUSTOSZm3xNNbJONO/bZBBb7WFC9 +E1lreiplobahXQBTqFMWDENVnsOkxafeMRXXiY6/Ztrdoi48drpa0PXjqBMJZMVDjLBTUCynXJ/5afOR +U21CL06zY+pcFcKkonmLt1SH4xkp2UxW/FuTNI3htYng8BpCOwN8C+Ov7GOCPI8BwypMJmccvaM8lFSV +gisKybITpdgGmt4YDWF1MOmQNWr4gxRCx07tAwNbMt/2ECTVlfTrqyfv7Vw2/ihSku+E0vf33YI4snxj +hR5ik6gjT2FT8dRk0IiBhkG+p8CyKZRCDg60psEFMtC1ERJC7GeQwJtbYLCAb26BvX49DGW3HEjA6GtL +Na7RkGWTQVoUCekvYQGsJSUPg32nwVZyIEyDyiktw3dv3gxNOzTQ6LbmZDYbQm47wPgvfCOkrjjRND9O +Qe+olXtHlLHjmlIOG3O5AZ/kEbSADeMZMA2MG3LUC/wb4WRLZTye3F6ate86zUYrijJOBec01eHkmi2e +0PRz4wCnFyoETY70nywCAsX4Dq9htYp/FFLf7dhG9y6I8L8D45k4xKKkPHTPuUjNVh+XUmiRihxew3g2 +w5XdpUDHdat9PEeCmo3poIhjWz8dDyy7U7+pXhW4pqfgr2NcI36LWTFdkO7K9a+ATq0QlBKd7kIXW5cD +ccSGnGaGJqAqsndZSDgUSTsRsxSqDpk2GRlPQRRMh+2rUZfFXA2Q7YBjFsQLAqSdA0+xTIdjL2UZT23G +2tEgIvc5i4VkW8ZJDjcJDHTXyai5je6Hi2uAz+PdDqL5Qt3Vqh3Q6u2V0G5C3LGkYtPapRMY14F63Bem +pguvAJ+A5op2htZ7+YU9yoM7tVy254DpjqYPzozhhrdZ7Jqvl4820YNI3Kntbu8JYvMKwTdMFiHuMAXR +YfAKvd59JhBMr9rMngmm/gZZKzTEmWHSUarlJm4KTK6Y07E8CoejkwTWmsc/UzW0Mzms1ird8Iu7/m1n +Gx803G9aSN24veEdhzm1Xgem9elPvayO4pkk7KWSnm+Ek05m5ccmP58zgOP2TtUPQmGzD9TzT9pM9l01 +F1tR6d+RTQv4e7NJH5l2ntnl9LJPPueOLxC0L6onLLI19nOHZzaGL9kcGh6bz6mGFl1NdBDy4TKJK2iW +ldqF46a80017Lq2uZ0Pj1U3+5EfOyeVFw+nhg63ohrDhfVvX5V9IjGUn3YNJi2hIFRtuRvVXbXdk+yB3 +jup1yHWnxiEG6/r6hYOi44vfXnThazP/TNXfP/llvV0L7i+I7N34ebqk5eektdca3+fbq8K2rkd+o7zu ++uWytPFa81riH/51SGDfm67I3Mw1KHH745rWLHYHtADYqeINyzWVIYTMiHTD4h3LKAyFdZJ9ZEr3ltHF +ckHOlP42JemOJuPXrnSR7ug/riTwwkTrhSWA/uyGfUyHW8JcSHz9tAH1Nu6eZQpS9tg6A+OBvT/5c3nt +zc2Gw1dfgctvN/y5zLaXonhp6PWT0zNnJnQYUw8MX+Qt9o7jf4tzDFn5k72l6djN1GNvfy+ltuo3bUFt +Jar9LbNfem0vfl7l+WhIrF5ladFDjHPKt3o3VG7qHkMM/YrdxyxDJ2QZ9EzjGBoaNRrWfOuxL02jJBvT +TLBSlMh0NyV53p0dBZUUj0Ore98BGj080CMwnz+/ut7G2vcOtki7eqDH+9uhbG1Pcndr8uuvEN6QPMeF +e2MZxkckoMWaZhnNJhPzawvGq14ihnPbDzmM1YamcqBDS8PemOXCJoOWLtbiIzZ8IIqGA4sDMZE5PKij +qFKrn5jehQZlMlw5bDj8ZqAqdHEGox+fnZjxNK8yql4y3esE3n/JfBlVaa16fP77pn730qlv7JjLNm65 +TOMRz0z+9vnJT91TBOI3hrIPXRRJtc349yS/WmVBQiWkDpsqAJmu+0yjXKSe9CaBdVzrwq3vugEiqOkG +eEJK4twFD4I5/SCKkkgarl1t4vbK+aGBkLQF3rpXbWq6/ZRPifTBRBFOD/ATXd+Z9/Cg/iJZOJkMk8eC +i5KaM4dNJL3CqE9YUKXIlrqyTXxQH4rsIrH5POYMO/tjXdmx7P9xdhoSz2CGT7hdnfplI5v0/svdD/8e +l0QqGiLdpJvcpkVm0+MEfkrvNNGVGoq47iayF/L7mcxwpK0tdcXzmh2sH9TtbQkiX9nIHAMmejfbF4qH +jLLBhVfTKiM3WHL7MriSsdvZ9cL9jwM8G7815IVRBUdsGGfK7CZnjmCJ+v8n03MpjtTzu/F2evvyfFh5 +NketlYl8MdRuyyIwsLtirwk69cDJb8zMOrmYl+xO27fZhai4pu1am1lIrZR25FdOW1c+9iK7ufZzt8kI +Zb3WeXANbCsxc3OMq5fkQcgHv8X9emgOq9X5F0lNjcN98TqHVSPPE7BsDm+mzTcur2zNVr0aT81Nubkl +j8qcHN3vbDBzFZWm5vuXdniwUG9bUPaDJh8J29oQ7qOnPtC7FhAas7BXbj6arnPpGs429NG+bkvoytEd +KCFyD6r5HKqP9r6FZn495iHlbEMjyfi2jWY+i0Kk83Vhj7O7qiyF1BfAzmw0FjVnc9+cDV+SbiRVuzNr +wYZEkmYiIrkOpuB+FDO3vmmroZ3KPOAZH33J3HA3/uSpo5nPll/96RTb8khUenBKO+DqlB/FlvFLE9JH +1pmuxHwrEptN4KE209rtzrvFCAyMe3sVTN3p6pHpybThxftN2IAZ6rpS90svVxWbQxD4JaYOYaui1KZN +i87HXua01xlbfyDS/jzN1ACabw9NcdNgeQPrimbnezKTIvht9bVWu/U0OrWCl7m1FOvPNg5i9Bbrz8C4 +0oSnVGzgOynJsYmSA2eq86EyMUdKsf58Ye9tUkszKYj15xW7h+YM7EK1n6mdRt59HjKXJDAW68801U25 +48zWk0UxTNmjjzvjNTI2u9QDPbYPN+NffhlPOqU0c7iDpNGSea93htPo/LfPtGsR68+3nsLd3VtJtKaS +T8GUGp/aIK4rlrTMSUrD8SsMbrZs2EbC84v5vd3Zdub7fmzvQDbthjsY+R32PrYNneaC01BJh+OIWxmi +eVQaoxvbHK1BkXzS4dF+FVIoDwcT6R+lKJiioaRK5HtT/VFUf2IFFZWuW6dQKIfY+qJ5MXO/XZ/Z/73B +6L8CAAD//3AEUQr3QAAA `, }, @@ -5320,70 +5342,69 @@ h+TsfwEAAP//D3J6AGEOAAA= "/eonza-assets/themes/default/templates/script.tpl": { name: "script.tpl", local: "../eonza-assets/themes/default/templates/script.tpl", - size: 12890, - modtime: 1600684392, + size: 12657, + modtime: 1602157220, compressed: ` -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 `, }, @@ -5451,82 +5472,83 @@ zm1QLulKESOvfWinyh+HHc7E65ad6v2xzevbvv/6+Nmqon9yMXSqf6gcuk5tyaZYGd6bQNDw3QFsdt9g "/eonza-assets/themes/default/templates/tasks.tpl": { name: "tasks.tpl", local: "../eonza-assets/themes/default/templates/tasks.tpl", - size: 3222, - modtime: 1595850669, + size: 3254, + modtime: 1602157220, compressed: ` -H4sIAAAAAAAC/8xWTY/bNhC9+1dMlbiSEcvaBGgPXkkp0KLooacmlyIIGi45XhGhSIEce9cw9N8LUh+W -vE6QpDlUC6wp6r2ZNzOckXLHrWwI6NhgERE+UvaYEtaNYoQRSFFExNxHF5ULgPyQcqOJSY0WHB0VFlGF -8r6i7cubm+VtAAHkQh4uHnOmeOIxkMJN87i6NQe0O2Ue0uMW2J7MwAXIid0pBK6Yc975ncIIOCrlGsal -vi+imxHr0bbMqYJDujO2iCRhDVJDhUy4qDyd/Ebb5hlVZZ6RnREHkg/Qk5R0NDHtMaI8nfzjjWY1Bjvi -AjAKFRw1oY1Kn6VKNiOsB9SP6Suoj+lL2BlN6UNITHpnlIDmMf0pGvFbbpSX5YjR3v3qb94FDd3G+wnS -1yvt4RMIFAU4+l1q6SoU8BriZz+/9H8xbCF+ttvt4sFIeTp1nD+lo5kbH20XSXkl7CEvjpilq4kZELsg -4zokdw3TY4Js+mqW/oA6pJIbDX2QjZU1s8cIXM2Ugl+4kvxjER0kPiTBmxSrqNyxFI/o5XtumWfezRPL -T3zDIXWVeZinMgdHb/auQS1QfKO8hu0dzvWFre+jMBT7v0q06Pb1pUbFjv8jiYS2lprRhUqSNbrvI7Oc -ts03J7I2h6+UOG+N6ZzKszAA+7maCXkIczibDOJykWfdEC8Xi3xYcaMdwVs/uqGA0wJgGOp+AoSRHq8X -AIIR20K4/40R81s1UmWE2wYWgDs6XouE12INUqz6XX8ppMCEAqiSbvPcGkObeyTvNpFiNSLlDpIfPHRK -B7BIe6vHjXZcsUdp3HjnTSYfMtbIzB3da16L4vmJ16L90ZuU/k6K9sPZ3YYq1IlF1xjtEIpy5rWTMzzd -+Axs0FpjVxcwf00CQ2trd3+VePuEdxHaPLx2IpUz4lUSzHihT/11HnoX7Tr8dANlWo3A60v15uj6XgsV -mxL7Nv8M86+AeEI8N98TbqeWG72Ttv4bXQLx0pFpuqO4jNeQrMbQzo7eDhaDr5mzMM6nfr70pF09Z7NS -tBPk5ZgfX5hT9oPUwjxsTIM66dfKcEbS6E1jDRluFLyAOMtieAGXiMo48p8OHrH1gOCzMZbW57MR/3On -mP4Yj8eoBVQOPyEizryNLH7Rj5j1Ff685GEgTdM5ba/QXHForg4Z4jin9HO99EV99PUd9Mmx4MhY3HBT -15KSeN8IRvi2G2UwN+o/5c7pGGP5hmYL/7ipmz2hGGaiN7+F3V5zX+VkBadedC/RHyrchKk6sVKbvSYU -yZCfq+FIUhivIV56ds00u0e7HEp7jfEHqiYQ9lZd40yCVIaJkK/EZ6RdtLeLxRDE+R0w6utDGooZvqm3 -8A7ipT/Sy+C0a59xbalbdh99fj0bgfGSBWeesOifvO9yvWgn77F/AwAA///vzPwwlgwAAA== +H4sIAAAAAAAC/8xWTY/bNhC9+1dMlbiSsZa1CdAevJJSoEXRQw9Fs5disWi4JLUiliIFcvwFQ/+9IPVh +yXaDZJtDHSBLSe/NvBlynpRaakSNgIeaZwHyPSb7GHlVS4I8AMGyAIl9sUE+A0i3MdUKiVDcgMWD5FlQ +cvFc4vrd7e38zoMAUia2Z48pkTRyGIjhtt4v7vSWm0LqXXxYA9mg7rkAKZInyYFKYq1L/iR5AJRLaWtC +hXrOgtsB69AmT7GEbVxokwUCeQVCQckJs0F+PLobTZMmWOZpgmZC7EmuQEeSwuIotMOw/Hh0j1eKVNzH +YWeAQSijXCE3Qe66VIp6gHWAah+/h+oQv4NCK4x3vjHxk5YM6n38QzDg11RLJ8siwY392V08eA3tjccR +0u1X3MFHEMgysPirUMKWnMEHCN/8+M79C2EN4ZuiKMI+SH48tpzfhcVJGldtW0l+pey+LxaJwauN6RGF +l3EdktqaqKFBJn4/ab9HbWNBtYKuyNqIiphDALYiUsJPVAr6kgVbwXeRzybYIsgLEvMDd/IdN08Tl+Yi +8kVu2Ma21LtpK1Ow+HFja64YZ6+UV5ON5VN9/ta3Ueg3+79KNNxuqnONkhz+RxKRm0oogmcqUVTcfhuZ ++XhsXt3ISm+/UuJ0NMY+lSbeADtfTZjYeh9ORkacz9KkNfF8Nkv7FdXKItw764YMjjOA3tSdA3hLD5cz +AEaQrMFf/0KQuFsVx1Izu/YsAHuwtGIRrdgSBFt0d91PcvRMyABLYVdvjda4eubo0kaCLQakKCD6zkHH +dADDcWPUcKMZVmQvtB2uXMjoU0JqkdiD/UArlr090oo137uQwl0J1nw6pVthyVVkuK21shyyfJK1ldM/ +XbkOrLgx2izOYO43KowbU9nnq8S7C95ZadPympFUSpCWkQ/jhF7mazN0KZql/9Mayng3PK/bqo8H282a +37ExsRvzzzD/9IgL4mn4LritWqpVIUz1F7cRhHOLum6P4jxcQrQYSjsluu8j+lyTZN7Ox3m+9KRdPWeT +rWhGyHObH16Y54e81gZdaof36xt4eFj9oQ1+LEWBj48DeicU07uVrrmKurXUlKDQalUbjZpqCTcQJkkI +N3COKLVF96HhEGsHcMmWEP79JIl6CYdj1gCXlo9EjtOGidOZhDedBV3jT4+EN6xxu8fj54cv9MPXIr3y +U8s/N2tfNGdfP2H/ahsWteErqqtKYBRuakaQ37dWB9Og7lPv1I6hllcMo/+P6qreIGe9Z7rwayg2irp9 +jRZw7ER3Et2h4yvvuqMold4o5Czq+3O1HIGSh0sI545dEUWeuZn3W3uN8RuXtSdsjLzGGRUpNWG+X5Hr +SDNr7mazvojTO2LQ15XUb6b/5l7DA4Rzd4jnPmk7XsPaYLtsPwrdemKR4Zz4ZI4w6560w9XMmtF77p8A +AAD//wrAIv+2DAAA `, }, "/eonza-assets/themes/default/templates/tree.tpl": { name: "tree.tpl", local: "../eonza-assets/themes/default/templates/tree.tpl", - size: 11751, - modtime: 1597322511, + size: 11799, + modtime: 1602157220, compressed: ` -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 `, }, @@ -10138,6 +10160,7 @@ var _escDirs = map[string][]os.FileInfo{ _escData["/eonza-assets/scripts/bash.yaml"], _escData["/eonza-assets/scripts/chdir.yaml"], _escData["/eonza-assets/scripts/copy-file.yaml"], + _escData["/eonza-assets/scripts/create-dir.yaml"], _escData["/eonza-assets/scripts/create-file.yaml"], _escData["/eonza-assets/scripts/curdir.yaml"], _escData["/eonza-assets/scripts/delete-dir.yaml"], diff --git a/auth.go b/auth.go index 9105e63..95de7d5 100644 --- a/auth.go +++ b/auth.go @@ -6,6 +6,7 @@ package main import ( "eonza/lib" + "net" "net/http" "strings" "time" @@ -48,22 +49,56 @@ func getCookie(c echo.Context, name string) string { return cookie.Value } +func accessIP(curIP, originalIP string) bool { + return curIP == originalIP || net.ParseIP(curIP).IsLoopback() +} + func AuthHandle(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) (err error) { var ( access string isAccess bool ) - host := c.Request().Host[:strings.LastIndex(c.Request().Host, `:`)] + ip := c.RealIP() + if len(cfg.Whitelist) > 0 { + var matched bool + clientip := net.ParseIP(ip) + for _, item := range cfg.Whitelist { + _, network, err := net.ParseCIDR(item) + if err == nil && network.Contains(clientip) { + matched = true + break + } + } + if !matched { + return echo.NewHTTPError(http.StatusForbidden, "Access denied") + } + } + url := c.Request().URL.String() + if url == `/ping` { + return next(c) + } + + host := c.Request().Host + if offPort := strings.LastIndex(c.Request().Host, `:`); offPort > 0 { + host = host[:offPort] + } if IsScript { access = scriptTask.Header.HTTP.Access } else { access = cfg.HTTP.Access } if access == AccessPrivate { - isAccess = lib.IsPrivate(host, c.RealIP()) + isAccess = lib.IsPrivate(host, ip) + } else if access == AccessHost { + if IsScript { + isAccess = (host == scriptTask.Header.HTTP.Host && accessIP(ip, scriptTask.Header.IP)) || + host == Localhost + } else { + isAccess = host == cfg.HTTP.Host || host == Localhost + } } else { - isAccess = lib.IsLocalhost(host, c.RealIP()) + isAccess = lib.IsLocalhost(host, ip) } if !isAccess { return echo.NewHTTPError(http.StatusForbidden, "Access denied") @@ -71,7 +106,6 @@ func AuthHandle(next echo.HandlerFunc) echo.HandlerFunc { mutex.Lock() defer mutex.Unlock() - url := c.Request().URL.String() if len(storage.Settings.PasswordHash) > 0 && (url == `/` || strings.HasPrefix(url, `/api`) || strings.HasPrefix(url, `/ws`) || strings.HasPrefix(url, `/task`)) { hashid := getCookie(c, "hashid") diff --git a/config.go b/config.go index b2f443e..eb2b58b 100644 --- a/config.go +++ b/config.go @@ -35,13 +35,17 @@ type UsersConfig struct { // Config stores application's settings type Config struct { - Version string `yaml:"version"` // Version of the application - Mode string `yaml:"mode"` // Mode: default, develop, playground - AssetsDir string `yaml:"assetsdir"` // Directory for assets file. empty - dir of cfg file - Log LogConfig `yaml:"log"` // Log settings - Users UsersConfig `yaml:"users"` // Users settings - HTTP lib.HTTPConfig `yaml:"http"` // Web-server settings - Playground lib.PlaygroundConfig `yaml:"playground"` // Playground settings + Version string `yaml:"version"` // Version of the application + Mode string `yaml:"mode"` // Mode: default, develop, playground + AssetsDir string `yaml:"assetsdir"` // Directory for assets file. empty - dir of cfg file + Log LogConfig `yaml:"log"` // Log settings + Users UsersConfig `yaml:"users"` // Users settings + HTTP lib.HTTPConfig `yaml:"http"` // Web-server settings + Playground lib.PlaygroundConfig `yaml:"playground"` // Playground settings + Whitelist []string `yaml:"whitelist,omitempty"` // Whitelist of IP-addresses + // undocumented fields + PortShift int64 `yaml:"portshift,omitempty"` // shift of the port + CDN string `yaml:"cdn,omitempty"` // url for static files in task path string // path to cfg file develop bool @@ -51,6 +55,7 @@ type Config struct { const ( AccessLocalhost = Localhost AccessPrivate = `private` + AccessHost = `host` ) var ( @@ -129,12 +134,19 @@ func LoadConfig() { cfg.HTTP.Theme = DefTheme } switch cfg.HTTP.Access { + case AccessHost: case AccessPrivate: default: cfg.HTTP.Access = AccessLocalhost } cfg.develop = cfg.Mode == ModeDevelop cfg.playground = cfg.Mode == ModePlayground + if cfg.playground { + if cfg.Playground.Tasks == 0 { + cfg.Playground.Tasks = DefTaskLimit + } + } + SetLogging(basename) if err = InitTaskManager(); err != nil { golog.Fatal(err) diff --git a/const.go b/const.go index af12302..09d421d 100644 --- a/const.go +++ b/const.go @@ -6,7 +6,7 @@ package main const ( // Version of the application - Version = "1.1.0+1" + Version = "1.2.0+1" // DefPort is the default web-server port DefPort = 3234 // DefTheme is the default web-server theme @@ -27,12 +27,14 @@ const ( PortsPool = 1000 TasksLimit = 50 TimeFormat = `2006/01/02 15:04:05` - TimeoutOpen = 3000 + TimeoutOpen = 4000 SourceCode = `source-code` DefLang = 0 // ConsolePrefix is the prefix of eonza console version ConsolePrefix = `ez` Localhost = `localhost` + // DefTaskLimit is the maximum running scripts in playground mode + DefTaskLimit = 2 ) // AppInfo contains information about the application diff --git a/lib/lib.go b/lib/lib.go index 36b3786..5aa3499 100644 --- a/lib/lib.go +++ b/lib/lib.go @@ -37,6 +37,7 @@ type PlaygroundConfig struct { Summary int64 `yaml:"summary"` // all files size limit. By default, 10MB Files int64 `yaml:"files"` // count of files limit. By default, 100 Size int64 `yaml:"size"` // file size limit. By default, 5MB + Tasks int64 `yaml:"tasks"` // running task limit. By default, 1 } var ( diff --git a/main.go b/main.go index c9e7e3e..de5be99 100644 --- a/main.go +++ b/main.go @@ -27,9 +27,10 @@ var ( func main() { var ( - e *echo.Echo - psw string - isRun bool + e *echo.Echo + psw string + isRun bool + install bool ) if isRun = CheckConsole(); isRun && len(consoleData) == 0 { return @@ -37,6 +38,7 @@ func main() { golog.SetTimeFormat("2006/01/02 15:04:05") flag.StringVar(&cfg.path, "cfg", "", "The path of the `config file`") flag.StringVar(&psw, "psw", "", "The login password") + flag.BoolVar(&install, "install", false, "only install") flag.Parse() if err := script.InitEngine(); err != nil { golog.Fatal(err) @@ -91,6 +93,9 @@ func main() { } else { LoadConfig() LoadStorage(psw) + if install { + return + } LoadUsers() defer CloseLog() if err := LoadCustomAsset(cfg.AssetsDir, cfg.HTTP.Theme); err != nil { diff --git a/render.go b/render.go index 1930729..af63a08 100644 --- a/render.go +++ b/render.go @@ -25,6 +25,7 @@ type Render struct { Lang string Login bool Localhost bool + PortShift int64 // Port int /* Params map[string]string Url string @@ -38,6 +39,7 @@ type RenderScript struct { IsScript bool Start string Finish string + CDN string Source template.HTML Stdout template.HTML Logout template.HTML @@ -94,6 +96,7 @@ func RenderPage(c echo.Context, url string) (string, error) { if IsScript { renderScript.Task = task renderScript.Title = scriptTask.Header.Title + renderScript.CDN = scriptTask.Header.CDN } else { renderScript.Task = *c.Get(`Task`).(*Task) renderScript.Title = c.Get(`Title`).(string) @@ -126,6 +129,7 @@ func RenderPage(c echo.Context, url string) (string, error) { } render.Login = len(storage.Settings.PasswordHash) > 0 render.Localhost = cfg.HTTP.Host == Localhost + render.PortShift = cfg.PortShift data = render } diff --git a/script/embedded.go b/script/embedded.go index 61a4456..203543d 100644 --- a/script/embedded.go +++ b/script/embedded.go @@ -14,6 +14,7 @@ import ( "time" "github.com/gentee/gentee" + "github.com/gentee/gentee/vm" "gopkg.in/yaml.v2" ) @@ -125,12 +126,12 @@ var ( } ) -func IsCond(item *ConditionItem) (err error) { +func IsCond(rt *vm.Runtime, item *ConditionItem) (err error) { var ( i int64 val, s string ) - if len(item.Var) == 0 { + if len(item.Var) == 0 && len(item.Value) == 0 { return fmt.Errorf(`empty variable in If Statement`) } if val, err = Macro(item.Value); err != nil { @@ -149,6 +150,18 @@ func IsCond(item *ConditionItem) (err error) { } item.result = s == val } + case `fileexists`: + if len(item.Var) > 0 { + if s, err = GetVar(item.Var); err != nil { + return + } + } else { + s = val + } + if i, err = vm.ExistFile(rt, s); err != nil { + return + } + item.result = i != 0 default: return fmt.Errorf(`Unknown comparison type: %s`, item.Cmp) } @@ -158,7 +171,7 @@ func IsCond(item *ConditionItem) (err error) { return } -func Condition(casevar, list string) (ret int64, err error) { +func Condition(rt *vm.Runtime, casevar, list string) (ret int64, err error) { if len(casevar) > 0 { var used int64 if used, err = GetVarBool(casevar); err != nil || used != 0 { @@ -173,7 +186,7 @@ func Condition(casevar, list string) (ret int64, err error) { if count == 0 { ret = 1 } else { - if err = IsCond(&cond[0]); err != nil { + if err = IsCond(rt, &cond[0]); err != nil { return } // collect OR @@ -190,7 +203,7 @@ func Condition(casevar, list string) (ret int64, err error) { continue } } - if err = IsCond(&cond[i]); err != nil { + if err = IsCond(rt, &cond[i]); err != nil { return } cond[0].result = cond[i].result diff --git a/script/encoding.go b/script/encoding.go index a5bc835..a51bffa 100644 --- a/script/encoding.go +++ b/script/encoding.go @@ -21,12 +21,14 @@ type Header struct { AssetsDir string LogDir string Theme string + CDN string Console bool IsPlayground bool SourceCode []byte Constants map[string]string Lang string UserID uint32 + IP string TaskID uint32 ServerPort int HTTP *lib.HTTPConfig diff --git a/server.go b/server.go index 59605cd..884fa95 100644 --- a/server.go +++ b/server.go @@ -165,6 +165,9 @@ func indexHandle(c echo.Context) error { }*/ func exitHandle(c echo.Context) error { + if cfg.playground { + return jsonError(c, `Access denied`) + } golog.Info(`Finish`) stopchan <- os.Interrupt return c.JSON(http.StatusOK, Response{Success: true}) @@ -205,10 +208,10 @@ func RunServer(options WebSettings) *echo.Echo { e.Use(AuthHandle) e.Use(Logger) e.Use(md.Recover()) - /* e.Use(md.CORSWithConfig(md.CORSConfig{ - AllowOrigins: []string{"http://localhost"}, - AllowMethods: []string{http.MethodGet, http.MethodPost}, - }))*/ + /* e.Use(md.CORSWithConfig(md.CORSConfig{ + AllowOrigins: []string{"*"}, + AllowMethods: []string{http.MethodGet}, + }))}*/ //e.HTTPErrorHandler = customHTTPErrorHandler diff --git a/settings.go b/settings.go index 4bbea03..71854c4 100644 --- a/settings.go +++ b/settings.go @@ -58,6 +58,9 @@ func setPasswordHandle(c echo.Context) error { err error hash []byte ) + if cfg.playground { + return jsonError(c, Lang(GetLangId(c.(*Auth).User), `errplaypsw`)) + } if err = c.Bind(&psw); err != nil { return jsonError(c, err) } diff --git a/task.go b/task.go index 18f3be9..f0602ba 100644 --- a/task.go +++ b/task.go @@ -348,6 +348,7 @@ func initTask() script.Settings { func wsTaskHandle(c echo.Context) error { // var cmd WsCmd + upgrader.CheckOrigin = func(r *http.Request) bool { return true } ws, err := upgrader.Upgrade(c.Response(), c.Request(), nil) if err != nil { return err diff --git a/taskmanager.go b/taskmanager.go index 597c9d5..9729c0f 100644 --- a/taskmanager.go +++ b/taskmanager.go @@ -276,6 +276,8 @@ func getPort() (int, error) { } func wsMainHandle(c echo.Context) error { + + upgrader.CheckOrigin = func(r *http.Request) bool { return true } ws, err := upgrader.Upgrade(c.Response(), c.Request(), nil) if err != nil { return err