SQL + sqlite in memory drivers ok | Index.gohtml rendered at AdminPath
- commit
- c9f4eea3ab75816c9b1fb72d7dd043789e16b142
- author
- bnema · · 2023-09-14 15:05 UTC
- parent
- accf0b9
- signature
- unsigned
7 files · +283 -21
M go.mod +21 -0
| @@ -4,25 +4,46 @@ go 1.21.1 | |||
| 4 | 4 | ||
| 5 | 5 | require ( | |
| 6 | 6 | github.com/PuerkitoBio/goquery v1.8.1 | |
| 7 | + | github.com/docker/docker v24.0.6+incompatible | |
| 7 | 8 | github.com/labstack/echo-contrib v0.15.0 | |
| 8 | 9 | github.com/labstack/echo/v4 v4.11.1 | |
| 10 | + | github.com/mattn/go-sqlite3 v1.14.17 | |
| 9 | 11 | gopkg.in/yaml.v3 v3.0.1 | |
| 10 | 12 | ) | |
| 11 | 13 | ||
| 12 | 14 | require ( | |
| 15 | + | github.com/Microsoft/go-winio v0.6.1 // indirect | |
| 13 | 16 | github.com/andybalholm/cascadia v1.3.1 // indirect | |
| 17 | + | github.com/containerd/containerd v1.7.6 // indirect | |
| 18 | + | github.com/docker/distribution v2.8.2+incompatible // indirect | |
| 19 | + | github.com/docker/go-connections v0.4.0 // indirect | |
| 20 | + | github.com/docker/go-units v0.5.0 // indirect | |
| 21 | + | github.com/gogo/protobuf v1.3.2 // indirect | |
| 14 | 22 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect | |
| 15 | 23 | github.com/gorilla/context v1.1.1 // indirect | |
| 16 | 24 | github.com/gorilla/securecookie v1.1.1 // indirect | |
| 17 | 25 | github.com/gorilla/sessions v1.2.1 // indirect | |
| 26 | + | github.com/klauspost/compress v1.16.7 // indirect | |
| 18 | 27 | github.com/labstack/gommon v0.4.0 // indirect | |
| 19 | 28 | github.com/mattn/go-colorable v0.1.13 // indirect | |
| 20 | 29 | github.com/mattn/go-isatty v0.0.19 // indirect | |
| 30 | + | github.com/moby/patternmatcher v0.6.0 // indirect | |
| 31 | + | github.com/moby/sys/sequential v0.5.0 // indirect | |
| 32 | + | github.com/moby/term v0.5.0 // indirect | |
| 33 | + | github.com/morikuni/aec v1.0.0 // indirect | |
| 34 | + | github.com/opencontainers/go-digest v1.0.0 // indirect | |
| 35 | + | github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b // indirect | |
| 36 | + | github.com/opencontainers/runc v1.1.9 // indirect | |
| 37 | + | github.com/pkg/errors v0.9.1 // indirect | |
| 38 | + | github.com/sirupsen/logrus v1.9.3 // indirect | |
| 21 | 39 | github.com/valyala/bytebufferpool v1.0.0 // indirect | |
| 22 | 40 | github.com/valyala/fasttemplate v1.2.2 // indirect | |
| 23 | 41 | golang.org/x/crypto v0.11.0 // indirect | |
| 42 | + | golang.org/x/mod v0.9.0 // indirect | |
| 24 | 43 | golang.org/x/net v0.12.0 // indirect | |
| 25 | 44 | golang.org/x/sys v0.10.0 // indirect | |
| 26 | 45 | golang.org/x/text v0.11.0 // indirect | |
| 27 | 46 | golang.org/x/time v0.3.0 // indirect | |
| 47 | + | golang.org/x/tools v0.7.0 // indirect | |
| 48 | + | gotest.tools/v3 v3.5.0 // indirect | |
| 28 | 49 | ) | |
| @@ -4,25 +4,46 @@ go 1.21.1 | |||||
| 4 | 4 | ||||
| 5 | require ( | 5 | require ( | ||
| 6 | github.com/PuerkitoBio/goquery v1.8.1 | 6 | github.com/PuerkitoBio/goquery v1.8.1 | ||
| 7 | + | github.com/docker/docker v24.0.6+incompatible | |||
| 7 | github.com/labstack/echo-contrib v0.15.0 | 8 | github.com/labstack/echo-contrib v0.15.0 | ||
| 8 | github.com/labstack/echo/v4 v4.11.1 | 9 | github.com/labstack/echo/v4 v4.11.1 | ||
| 10 | + | github.com/mattn/go-sqlite3 v1.14.17 | |||
| 9 | gopkg.in/yaml.v3 v3.0.1 | 11 | gopkg.in/yaml.v3 v3.0.1 | ||
| 10 | ) | 12 | ) | ||
| 11 | 13 | ||||
| 12 | require ( | 14 | require ( | ||
| 15 | + | github.com/Microsoft/go-winio v0.6.1 // indirect | |||
| 13 | github.com/andybalholm/cascadia v1.3.1 // indirect | 16 | github.com/andybalholm/cascadia v1.3.1 // indirect | ||
| 17 | + | github.com/containerd/containerd v1.7.6 // indirect | |||
| 18 | + | github.com/docker/distribution v2.8.2+incompatible // indirect | |||
| 19 | + | github.com/docker/go-connections v0.4.0 // indirect | |||
| 20 | + | github.com/docker/go-units v0.5.0 // indirect | |||
| 21 | + | github.com/gogo/protobuf v1.3.2 // indirect | |||
| 14 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect | 22 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect | ||
| 15 | github.com/gorilla/context v1.1.1 // indirect | 23 | github.com/gorilla/context v1.1.1 // indirect | ||
| 16 | github.com/gorilla/securecookie v1.1.1 // indirect | 24 | github.com/gorilla/securecookie v1.1.1 // indirect | ||
| 17 | github.com/gorilla/sessions v1.2.1 // indirect | 25 | github.com/gorilla/sessions v1.2.1 // indirect | ||
| 26 | + | github.com/klauspost/compress v1.16.7 // indirect | |||
| 18 | github.com/labstack/gommon v0.4.0 // indirect | 27 | github.com/labstack/gommon v0.4.0 // indirect | ||
| 19 | github.com/mattn/go-colorable v0.1.13 // indirect | 28 | github.com/mattn/go-colorable v0.1.13 // indirect | ||
| 20 | github.com/mattn/go-isatty v0.0.19 // indirect | 29 | github.com/mattn/go-isatty v0.0.19 // indirect | ||
| 30 | + | github.com/moby/patternmatcher v0.6.0 // indirect | |||
| 31 | + | github.com/moby/sys/sequential v0.5.0 // indirect | |||
| 32 | + | github.com/moby/term v0.5.0 // indirect | |||
| 33 | + | github.com/morikuni/aec v1.0.0 // indirect | |||
| 34 | + | github.com/opencontainers/go-digest v1.0.0 // indirect | |||
| 35 | + | github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b // indirect | |||
| 36 | + | github.com/opencontainers/runc v1.1.9 // indirect | |||
| 37 | + | github.com/pkg/errors v0.9.1 // indirect | |||
| 38 | + | github.com/sirupsen/logrus v1.9.3 // indirect | |||
| 21 | github.com/valyala/bytebufferpool v1.0.0 // indirect | 39 | github.com/valyala/bytebufferpool v1.0.0 // indirect | ||
| 22 | github.com/valyala/fasttemplate v1.2.2 // indirect | 40 | github.com/valyala/fasttemplate v1.2.2 // indirect | ||
| 23 | golang.org/x/crypto v0.11.0 // indirect | 41 | golang.org/x/crypto v0.11.0 // indirect | ||
| 42 | + | golang.org/x/mod v0.9.0 // indirect | |||
| 24 | golang.org/x/net v0.12.0 // indirect | 43 | golang.org/x/net v0.12.0 // indirect | ||
| 25 | golang.org/x/sys v0.10.0 // indirect | 44 | golang.org/x/sys v0.10.0 // indirect | ||
| 26 | golang.org/x/text v0.11.0 // indirect | 45 | golang.org/x/text v0.11.0 // indirect | ||
| 27 | golang.org/x/time v0.3.0 // indirect | 46 | golang.org/x/time v0.3.0 // indirect | ||
| 47 | + | golang.org/x/tools v0.7.0 // indirect | |||
| 48 | + | gotest.tools/v3 v3.5.0 // indirect | |||
| 28 | ) | 49 | ) | ||
M go.sum +75 -2
| @@ -1,18 +1,44 @@ | |||
| 1 | + | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= | |
| 2 | + | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= | |
| 3 | + | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= | |
| 4 | + | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= | |
| 5 | + | github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= | |
| 6 | + | github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= | |
| 7 | + | github.com/Microsoft/hcsshim v0.11.0 h1:7EFNIY4igHEXUdj1zXgAyU3fLc7QfOKHbkldRVTBdiM= | |
| 8 | + | github.com/Microsoft/hcsshim v0.11.0/go.mod h1:OEthFdQv/AD2RAdzR6Mm1N1KPCztGKDurW1Z8b8VGMM= | |
| 1 | 9 | github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= | |
| 2 | 10 | github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= | |
| 3 | 11 | github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= | |
| 4 | 12 | github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= | |
| 13 | + | github.com/containerd/containerd v1.7.6 h1:oNAVsnhPoy4BTPQivLgTzI9Oleml9l/+eYIDYXRCYo8= | |
| 14 | + | github.com/containerd/containerd v1.7.6/go.mod h1:SY6lrkkuJT40BVNO37tlYTSnKJnP5AXBc0fhx0q+TJ4= | |
| 5 | 15 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |
| 6 | 16 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | |
| 7 | 17 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |
| 18 | + | github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= | |
| 19 | + | github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= | |
| 20 | + | github.com/docker/docker v24.0.6+incompatible h1:hceabKCtUgDqPu+qm0NgsaXf28Ljf4/pWFL7xjWWDgE= | |
| 21 | + | github.com/docker/docker v24.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= | |
| 22 | + | github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= | |
| 23 | + | github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= | |
| 24 | + | github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= | |
| 25 | + | github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= | |
| 26 | + | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | |
| 27 | + | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | |
| 8 | 28 | github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= | |
| 9 | 29 | github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= | |
| 30 | + | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | |
| 31 | + | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | |
| 10 | 32 | github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= | |
| 11 | 33 | github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | |
| 12 | 34 | github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= | |
| 13 | 35 | github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= | |
| 14 | 36 | github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= | |
| 15 | 37 | github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= | |
| 38 | + | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | |
| 39 | + | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | |
| 40 | + | github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= | |
| 41 | + | github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= | |
| 16 | 42 | github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU= | |
| 17 | 43 | github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4= | |
| 18 | 44 | github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= | |
| @@ -26,24 +52,55 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k | |||
| 26 | 52 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= | |
| 27 | 53 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= | |
| 28 | 54 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | |
| 55 | + | github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= | |
| 56 | + | github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= | |
| 57 | + | github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= | |
| 58 | + | github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= | |
| 59 | + | github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= | |
| 60 | + | github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= | |
| 61 | + | github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= | |
| 62 | + | github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= | |
| 63 | + | github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= | |
| 64 | + | github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= | |
| 65 | + | github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= | |
| 66 | + | github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= | |
| 67 | + | github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= | |
| 68 | + | github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= | |
| 69 | + | github.com/opencontainers/runc v1.1.9 h1:XR0VIHTGce5eWPkaPesqTBrhW2yAcaraWfsEalNwQLM= | |
| 70 | + | github.com/opencontainers/runc v1.1.9/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= | |
| 71 | + | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | |
| 72 | + | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |
| 29 | 73 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | |
| 30 | 74 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | |
| 75 | + | github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= | |
| 76 | + | github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= | |
| 31 | 77 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |
| 32 | 78 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | |
| 33 | - | github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= | |
| 34 | - | github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | |
| 79 | + | github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= | |
| 80 | + | github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | |
| 35 | 81 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= | |
| 36 | 82 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | |
| 37 | 83 | github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= | |
| 38 | 84 | github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= | |
| 39 | 85 | github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= | |
| 86 | + | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |
| 87 | + | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |
| 40 | 88 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | |
| 41 | 89 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | |
| 90 | + | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |
| 91 | + | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |
| 42 | 92 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | |
| 43 | 93 | golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= | |
| 44 | 94 | golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= | |
| 95 | + | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |
| 96 | + | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |
| 45 | 97 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | |
| 98 | + | golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= | |
| 99 | + | golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= | |
| 100 | + | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |
| 46 | 101 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |
| 102 | + | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |
| 103 | + | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | |
| 47 | 104 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | |
| 48 | 105 | golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | |
| 49 | 106 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | |
| @@ -51,8 +108,14 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= | |||
| 51 | 108 | golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= | |
| 52 | 109 | golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= | |
| 53 | 110 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 111 | + | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 112 | + | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 54 | 113 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 114 | + | golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= | |
| 115 | + | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 55 | 116 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
| 117 | + | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
| 118 | + | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
| 56 | 119 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
| 57 | 120 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
| 58 | 121 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| @@ -60,6 +123,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc | |||
| 60 | 123 | golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 61 | 124 | golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 62 | 125 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 126 | + | golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 63 | 127 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 64 | 128 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 65 | 129 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| @@ -80,11 +144,20 @@ golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | |||
| 80 | 144 | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |
| 81 | 145 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |
| 82 | 146 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |
| 147 | + | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | |
| 148 | + | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |
| 83 | 149 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | |
| 150 | + | golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= | |
| 151 | + | golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= | |
| 84 | 152 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |
| 153 | + | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |
| 154 | + | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |
| 155 | + | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |
| 85 | 156 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | |
| 86 | 157 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |
| 87 | 158 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | |
| 88 | 159 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | |
| 89 | 160 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | |
| 90 | 161 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | |
| 162 | + | gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= | |
| 163 | + | gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= | |
| @@ -1,18 +1,44 @@ | |||||
| 1 | + | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= | |||
| 2 | + | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= | |||
| 3 | + | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= | |||
| 4 | + | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= | |||
| 5 | + | github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= | |||
| 6 | + | github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= | |||
| 7 | + | github.com/Microsoft/hcsshim v0.11.0 h1:7EFNIY4igHEXUdj1zXgAyU3fLc7QfOKHbkldRVTBdiM= | |||
| 8 | + | github.com/Microsoft/hcsshim v0.11.0/go.mod h1:OEthFdQv/AD2RAdzR6Mm1N1KPCztGKDurW1Z8b8VGMM= | |||
| 1 | github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= | 9 | github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= | ||
| 2 | github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= | 10 | github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= | ||
| 3 | github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= | 11 | github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= | ||
| 4 | github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= | 12 | github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= | ||
| 13 | + | github.com/containerd/containerd v1.7.6 h1:oNAVsnhPoy4BTPQivLgTzI9Oleml9l/+eYIDYXRCYo8= | |||
| 14 | + | github.com/containerd/containerd v1.7.6/go.mod h1:SY6lrkkuJT40BVNO37tlYTSnKJnP5AXBc0fhx0q+TJ4= | |||
| 5 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | 15 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| 6 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | 16 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||
| 7 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | 17 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| 18 | + | github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= | |||
| 19 | + | github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= | |||
| 20 | + | github.com/docker/docker v24.0.6+incompatible h1:hceabKCtUgDqPu+qm0NgsaXf28Ljf4/pWFL7xjWWDgE= | |||
| 21 | + | github.com/docker/docker v24.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= | |||
| 22 | + | github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= | |||
| 23 | + | github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= | |||
| 24 | + | github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= | |||
| 25 | + | github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= | |||
| 26 | + | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | |||
| 27 | + | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | |||
| 8 | github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= | 28 | github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= | ||
| 9 | github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= | 29 | github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= | ||
| 30 | + | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | |||
| 31 | + | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | |||
| 10 | github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= | 32 | github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= | ||
| 11 | github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | 33 | github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | ||
| 12 | github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= | 34 | github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= | ||
| 13 | github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= | 35 | github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= | ||
| 14 | github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= | 36 | github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= | ||
| 15 | github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= | 37 | github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= | ||
| 38 | + | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | |||
| 39 | + | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | |||
| 40 | + | github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= | |||
| 41 | + | github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= | |||
| 16 | github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU= | 42 | github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU= | ||
| 17 | github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4= | 43 | github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4= | ||
| 18 | github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= | 44 | github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= | ||
| @@ -26,24 +52,55 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k | |||||
| 26 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= | 52 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= | ||
| 27 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= | 53 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= | ||
| 28 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | 54 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||
| 55 | + | github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= | |||
| 56 | + | github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= | |||
| 57 | + | github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= | |||
| 58 | + | github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= | |||
| 59 | + | github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= | |||
| 60 | + | github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= | |||
| 61 | + | github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= | |||
| 62 | + | github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= | |||
| 63 | + | github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= | |||
| 64 | + | github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= | |||
| 65 | + | github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= | |||
| 66 | + | github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= | |||
| 67 | + | github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= | |||
| 68 | + | github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= | |||
| 69 | + | github.com/opencontainers/runc v1.1.9 h1:XR0VIHTGce5eWPkaPesqTBrhW2yAcaraWfsEalNwQLM= | |||
| 70 | + | github.com/opencontainers/runc v1.1.9/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= | |||
| 71 | + | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | |||
| 72 | + | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |||
| 29 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | 73 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||
| 30 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | 74 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
| 75 | + | github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= | |||
| 76 | + | github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= | |||
| 31 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | 77 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
| 32 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | 78 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
| 33 | - | github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= | 79 | + | github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= |
| 34 | - | github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | 80 | + | github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= |
| 35 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= | 81 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= | ||
| 36 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | 82 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | ||
| 37 | github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= | 83 | github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= | ||
| 38 | github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= | 84 | github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= | ||
| 39 | github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= | 85 | github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= | ||
| 86 | + | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
| 87 | + | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
| 40 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | 88 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | ||
| 41 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | 89 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||
| 90 | + | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |||
| 91 | + | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||
| 42 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | 92 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||
| 43 | golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= | 93 | golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= | ||
| 44 | golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= | 94 | golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= | ||
| 95 | + | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
| 96 | + | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
| 45 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | 97 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | ||
| 98 | + | golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= | |||
| 99 | + | golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= | |||
| 100 | + | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |||
| 46 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | 101 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||
| 102 | + | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |||
| 103 | + | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | |||
| 47 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | 104 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||
| 48 | golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | 105 | golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||
| 49 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | 106 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||
| @@ -51,8 +108,14 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= | |||||
| 51 | golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= | 108 | golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= | ||
| 52 | golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= | 109 | golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= | ||
| 53 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | 110 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 111 | + | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
| 112 | + | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
| 54 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | 113 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 114 | + | golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= | |||
| 115 | + | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
| 55 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | 116 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 117 | + | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
| 118 | + | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
| 56 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | 119 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 57 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | 120 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 58 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 121 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| @@ -60,6 +123,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc | |||||
| 60 | golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 123 | golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| 61 | golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 124 | golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| 62 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 125 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| 126 | + | golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
| 63 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 127 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| 64 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 128 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| 65 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | 129 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| @@ -80,11 +144,20 @@ golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | |||||
| 80 | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | 144 | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||
| 81 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | 145 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||
| 82 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | 146 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||
| 147 | + | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | |||
| 148 | + | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||
| 83 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | 149 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | ||
| 150 | + | golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= | |||
| 151 | + | golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= | |||
| 84 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 152 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
| 153 | + | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |||
| 154 | + | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |||
| 155 | + | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |||
| 85 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | 156 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||
| 86 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | 157 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
| 87 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | 158 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
| 88 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | 159 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
| 89 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | 160 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||
| 90 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | 161 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
| 162 | + | gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= | |||
| 163 | + | gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= | |||
M internal/app/app.go +29 -4
| @@ -2,6 +2,7 @@ package app | |||
| 2 | 2 | ||
| 3 | 3 | import ( | |
| 4 | 4 | "io/fs" | |
| 5 | + | "path/filepath" | |
| 5 | 6 | ||
| 6 | 7 | "github.com/bnema/gordon/internal/gotemplate" | |
| 7 | 8 | "github.com/bnema/gordon/internal/webui" | |
| @@ -10,11 +11,17 @@ import ( | |||
| 10 | 11 | const ( | |
| 11 | 12 | BuildVersion = "0.0.2" | |
| 12 | 13 | BuildDir = "tmp" | |
| 14 | + | DBDir = "tmp/data" | |
| 15 | + | DBFilename = "sqlite.db" | |
| 13 | 16 | // Those configs should be read from a config file | |
| 14 | - | HttpPort = 1323 | |
| 15 | - | TopDomain = "example.com" | |
| 16 | - | SubDomain = "gordon" | |
| 17 | - | AdminPath = "/admin" | |
| 17 | + | HttpPort = 1323 | |
| 18 | + | TopDomain = "example.com" | |
| 19 | + | SubDomain = "gordon" | |
| 20 | + | AdminPath = "/admin" | |
| 21 | + | DockerSock = "/var/run/docker.sock" | |
| 22 | + | // If enabled replace all docker commands by podman | |
| 23 | + | PodmanEnable = false | |
| 24 | + | PodmanSock = "/run/user/1000/podman/podman.sock" | |
| 18 | 25 | ) | |
| 19 | 26 | ||
| 20 | 27 | type App struct { | |
| @@ -22,9 +29,14 @@ type App struct { | |||
| 22 | 29 | PublicFS fs.FS | |
| 23 | 30 | BuildVersion string | |
| 24 | 31 | BuildDir string | |
| 32 | + | DBDir string | |
| 33 | + | DBFilename string | |
| 25 | 34 | TopDomain string | |
| 26 | 35 | SubDomain string | |
| 27 | 36 | AdminPath string | |
| 37 | + | DockerSock string | |
| 38 | + | PodmanEnable bool | |
| 39 | + | PodmanSock string | |
| 28 | 40 | HttpPort int16 | |
| 29 | 41 | } | |
| 30 | 42 | ||
| @@ -34,9 +46,22 @@ func NewApp() *App { | |||
| 34 | 46 | PublicFS: webui.PublicFS, | |
| 35 | 47 | BuildVersion: BuildVersion, | |
| 36 | 48 | BuildDir: BuildDir, | |
| 49 | + | DBDir: DBDir, | |
| 50 | + | DBFilename: DBFilename, | |
| 37 | 51 | TopDomain: TopDomain, | |
| 38 | 52 | SubDomain: SubDomain, | |
| 39 | 53 | AdminPath: AdminPath, | |
| 40 | 54 | HttpPort: HttpPort, | |
| 41 | 55 | } | |
| 42 | 56 | } | |
| 57 | + | ||
| 58 | + | func NewDockerClient() *App { | |
| 59 | + | return &App{ | |
| 60 | + | DockerSock: DockerSock, | |
| 61 | + | PodmanEnable: PodmanEnable, | |
| 62 | + | PodmanSock: PodmanSock, | |
| 63 | + | } | |
| 64 | + | } | |
| 65 | + | func (a *App) GetDBFilePath() string { | |
| 66 | + | return filepath.Join(a.DBDir, a.DBFilename) | |
| 67 | + | } | |
| @@ -2,6 +2,7 @@ package app | |||||
| 2 | 2 | ||||
| 3 | import ( | 3 | import ( | ||
| 4 | "io/fs" | 4 | "io/fs" | ||
| 5 | + | "path/filepath" | |||
| 5 | 6 | ||||
| 6 | "github.com/bnema/gordon/internal/gotemplate" | 7 | "github.com/bnema/gordon/internal/gotemplate" | ||
| 7 | "github.com/bnema/gordon/internal/webui" | 8 | "github.com/bnema/gordon/internal/webui" | ||
| @@ -10,11 +11,17 @@ import ( | |||||
| 10 | const ( | 11 | const ( | ||
| 11 | BuildVersion = "0.0.2" | 12 | BuildVersion = "0.0.2" | ||
| 12 | BuildDir = "tmp" | 13 | BuildDir = "tmp" | ||
| 14 | + | DBDir = "tmp/data" | |||
| 15 | + | DBFilename = "sqlite.db" | |||
| 13 | // Those configs should be read from a config file | 16 | // Those configs should be read from a config file | ||
| 14 | - | HttpPort = 1323 | 17 | + | HttpPort = 1323 |
| 15 | - | TopDomain = "example.com" | 18 | + | TopDomain = "example.com" |
| 16 | - | SubDomain = "gordon" | 19 | + | SubDomain = "gordon" |
| 17 | - | AdminPath = "/admin" | 20 | + | AdminPath = "/admin" |
| 21 | + | DockerSock = "/var/run/docker.sock" | |||
| 22 | + | // If enabled replace all docker commands by podman | |||
| 23 | + | PodmanEnable = false | |||
| 24 | + | PodmanSock = "/run/user/1000/podman/podman.sock" | |||
| 18 | ) | 25 | ) | ||
| 19 | 26 | ||||
| 20 | type App struct { | 27 | type App struct { | ||
| @@ -22,9 +29,14 @@ type App struct { | |||||
| 22 | PublicFS fs.FS | 29 | PublicFS fs.FS | ||
| 23 | BuildVersion string | 30 | BuildVersion string | ||
| 24 | BuildDir string | 31 | BuildDir string | ||
| 32 | + | DBDir string | |||
| 33 | + | DBFilename string | |||
| 25 | TopDomain string | 34 | TopDomain string | ||
| 26 | SubDomain string | 35 | SubDomain string | ||
| 27 | AdminPath string | 36 | AdminPath string | ||
| 37 | + | DockerSock string | |||
| 38 | + | PodmanEnable bool | |||
| 39 | + | PodmanSock string | |||
| 28 | HttpPort int16 | 40 | HttpPort int16 | ||
| 29 | } | 41 | } | ||
| 30 | 42 | ||||
| @@ -34,9 +46,22 @@ func NewApp() *App { | |||||
| 34 | PublicFS: webui.PublicFS, | 46 | PublicFS: webui.PublicFS, | ||
| 35 | BuildVersion: BuildVersion, | 47 | BuildVersion: BuildVersion, | ||
| 36 | BuildDir: BuildDir, | 48 | BuildDir: BuildDir, | ||
| 49 | + | DBDir: DBDir, | |||
| 50 | + | DBFilename: DBFilename, | |||
| 37 | TopDomain: TopDomain, | 51 | TopDomain: TopDomain, | ||
| 38 | SubDomain: SubDomain, | 52 | SubDomain: SubDomain, | ||
| 39 | AdminPath: AdminPath, | 53 | AdminPath: AdminPath, | ||
| 40 | HttpPort: HttpPort, | 54 | HttpPort: HttpPort, | ||
| 41 | } | 55 | } | ||
| 42 | } | 56 | } | ||
| 57 | + | ||||
| 58 | + | func NewDockerClient() *App { | |||
| 59 | + | return &App{ | |||
| 60 | + | DockerSock: DockerSock, | |||
| 61 | + | PodmanEnable: PodmanEnable, | |||
| 62 | + | PodmanSock: PodmanSock, | |||
| 63 | + | } | |||
| 64 | + | } | |||
| 65 | + | func (a *App) GetDBFilePath() string { | |||
| 66 | + | return filepath.Join(a.DBDir, a.DBFilename) | |||
| 67 | + | } | |||
A internal/app/sqlite.go +108 -0
| @@ -0,0 +1,108 @@ | |||
| 1 | + | package app | |
| 2 | + | ||
| 3 | + | import ( | |
| 4 | + | "context" | |
| 5 | + | "database/sql" | |
| 6 | + | "fmt" | |
| 7 | + | "os" | |
| 8 | + | ||
| 9 | + | sqlite3 "github.com/mattn/go-sqlite3" | |
| 10 | + | ) | |
| 11 | + | ||
| 12 | + | // Initialize in-memory SQLite database and returns its connection | |
| 13 | + | func InitDB() (db *sql.DB, err error) { | |
| 14 | + | db, err = sql.Open("sqlite3", "file::memory?cache=shared") | |
| 15 | + | if err != nil { | |
| 16 | + | return nil, fmt.Errorf("failed to open in-memory database: %v", err) | |
| 17 | + | } | |
| 18 | + | return | |
| 19 | + | } | |
| 20 | + | ||
| 21 | + | // CloseDB closes the database connection and backs up the in-memory database to disk | |
| 22 | + | func CloseDB(db *sql.DB, a *App) error { | |
| 23 | + | if err := BackupDB(db, a); err != nil { | |
| 24 | + | return err | |
| 25 | + | } | |
| 26 | + | ||
| 27 | + | if err := db.Close(); err != nil { | |
| 28 | + | return fmt.Errorf("failed to close database: %v", err) | |
| 29 | + | } | |
| 30 | + | ||
| 31 | + | return nil | |
| 32 | + | } | |
| 33 | + | ||
| 34 | + | // LoadDBIntoMemory loads the database from disk into memory | |
| 35 | + | func LoadDBIntoMemory(a *App) (*sql.DB, error) { | |
| 36 | + | dbfp := a.GetDBFilePath() | |
| 37 | + | ||
| 38 | + | if _, err := os.Stat(dbfp); err != nil { | |
| 39 | + | return nil, nil | |
| 40 | + | } | |
| 41 | + | ||
| 42 | + | memDB, err := InitDB() | |
| 43 | + | if err != nil { | |
| 44 | + | return nil, err | |
| 45 | + | } | |
| 46 | + | ||
| 47 | + | diskDB, err := sql.Open("sqlite3", dbfp) | |
| 48 | + | if err != nil { | |
| 49 | + | return nil, fmt.Errorf("failed to open database file: %v", err) | |
| 50 | + | } | |
| 51 | + | ||
| 52 | + | if err := transferData(diskDB, memDB); err != nil { | |
| 53 | + | return nil, err | |
| 54 | + | } | |
| 55 | + | ||
| 56 | + | return memDB, nil | |
| 57 | + | } | |
| 58 | + | ||
| 59 | + | // transferData transfers data from srcDB to dstDB | |
| 60 | + | func transferData(srcDB, dstDB *sql.DB) error { | |
| 61 | + | srcConn, err := srcDB.Conn(context.Background()) | |
| 62 | + | if err != nil { | |
| 63 | + | return fmt.Errorf("failed to get connection from srcDB: %v", err) | |
| 64 | + | } | |
| 65 | + | defer srcConn.Close() | |
| 66 | + | ||
| 67 | + | dstConn, err := dstDB.Conn(context.Background()) | |
| 68 | + | if err != nil { | |
| 69 | + | return fmt.Errorf("failed to get connection from dstDB: %v", err) | |
| 70 | + | } | |
| 71 | + | defer dstConn.Close() | |
| 72 | + | ||
| 73 | + | return srcConn.Raw(func(srcRawConn interface{}) error { | |
| 74 | + | return dstConn.Raw(func(dstRawConn interface{}) error { | |
| 75 | + | srcSqlite3Conn := srcRawConn.(*sqlite3.SQLiteConn) | |
| 76 | + | dstSqlite3Conn := dstRawConn.(*sqlite3.SQLiteConn) | |
| 77 | + | ||
| 78 | + | _, err := srcSqlite3Conn.Backup("main", dstSqlite3Conn, "main") | |
| 79 | + | return err | |
| 80 | + | }) | |
| 81 | + | }) | |
| 82 | + | } | |
| 83 | + | ||
| 84 | + | // BackupDB backs up the in-memory database to disk | |
| 85 | + | func BackupDB(db *sql.DB, a *App) error { | |
| 86 | + | dbfp := a.GetDBFilePath() | |
| 87 | + | ||
| 88 | + | conn, err := db.Conn(context.Background()) | |
| 89 | + | if err != nil { | |
| 90 | + | return fmt.Errorf("failed to get underlying database connection: %v", err) | |
| 91 | + | } | |
| 92 | + | ||
| 93 | + | return conn.Raw(func(sqliteConn interface{}) error { | |
| 94 | + | sqlite3Conn := sqliteConn.(*sqlite3.SQLiteConn) | |
| 95 | + | backupDB, err := sqlite3Conn.Backup(dbfp, sqlite3Conn, "main") | |
| 96 | + | if err != nil { | |
| 97 | + | return fmt.Errorf("failed to create backup: %v", err) | |
| 98 | + | } | |
| 99 | + | defer backupDB.Close() | |
| 100 | + | ||
| 101 | + | _, err = backupDB.Step(-1) | |
| 102 | + | if err != nil { | |
| 103 | + | return fmt.Errorf("failed to backup in-memory database: %v", err) | |
| 104 | + | } | |
| 105 | + | ||
| 106 | + | return nil | |
| 107 | + | }) | |
| 108 | + | } | |
| @@ -0,0 +1,108 @@ | |||||
| 1 | + | package app | |||
| 2 | + | ||||
| 3 | + | import ( | |||
| 4 | + | "context" | |||
| 5 | + | "database/sql" | |||
| 6 | + | "fmt" | |||
| 7 | + | "os" | |||
| 8 | + | ||||
| 9 | + | sqlite3 "github.com/mattn/go-sqlite3" | |||
| 10 | + | ) | |||
| 11 | + | ||||
| 12 | + | // Initialize in-memory SQLite database and returns its connection | |||
| 13 | + | func InitDB() (db *sql.DB, err error) { | |||
| 14 | + | db, err = sql.Open("sqlite3", "file::memory?cache=shared") | |||
| 15 | + | if err != nil { | |||
| 16 | + | return nil, fmt.Errorf("failed to open in-memory database: %v", err) | |||
| 17 | + | } | |||
| 18 | + | return | |||
| 19 | + | } | |||
| 20 | + | ||||
| 21 | + | // CloseDB closes the database connection and backs up the in-memory database to disk | |||
| 22 | + | func CloseDB(db *sql.DB, a *App) error { | |||
| 23 | + | if err := BackupDB(db, a); err != nil { | |||
| 24 | + | return err | |||
| 25 | + | } | |||
| 26 | + | ||||
| 27 | + | if err := db.Close(); err != nil { | |||
| 28 | + | return fmt.Errorf("failed to close database: %v", err) | |||
| 29 | + | } | |||
| 30 | + | ||||
| 31 | + | return nil | |||
| 32 | + | } | |||
| 33 | + | ||||
| 34 | + | // LoadDBIntoMemory loads the database from disk into memory | |||
| 35 | + | func LoadDBIntoMemory(a *App) (*sql.DB, error) { | |||
| 36 | + | dbfp := a.GetDBFilePath() | |||
| 37 | + | ||||
| 38 | + | if _, err := os.Stat(dbfp); err != nil { | |||
| 39 | + | return nil, nil | |||
| 40 | + | } | |||
| 41 | + | ||||
| 42 | + | memDB, err := InitDB() | |||
| 43 | + | if err != nil { | |||
| 44 | + | return nil, err | |||
| 45 | + | } | |||
| 46 | + | ||||
| 47 | + | diskDB, err := sql.Open("sqlite3", dbfp) | |||
| 48 | + | if err != nil { | |||
| 49 | + | return nil, fmt.Errorf("failed to open database file: %v", err) | |||
| 50 | + | } | |||
| 51 | + | ||||
| 52 | + | if err := transferData(diskDB, memDB); err != nil { | |||
| 53 | + | return nil, err | |||
| 54 | + | } | |||
| 55 | + | ||||
| 56 | + | return memDB, nil | |||
| 57 | + | } | |||
| 58 | + | ||||
| 59 | + | // transferData transfers data from srcDB to dstDB | |||
| 60 | + | func transferData(srcDB, dstDB *sql.DB) error { | |||
| 61 | + | srcConn, err := srcDB.Conn(context.Background()) | |||
| 62 | + | if err != nil { | |||
| 63 | + | return fmt.Errorf("failed to get connection from srcDB: %v", err) | |||
| 64 | + | } | |||
| 65 | + | defer srcConn.Close() | |||
| 66 | + | ||||
| 67 | + | dstConn, err := dstDB.Conn(context.Background()) | |||
| 68 | + | if err != nil { | |||
| 69 | + | return fmt.Errorf("failed to get connection from dstDB: %v", err) | |||
| 70 | + | } | |||
| 71 | + | defer dstConn.Close() | |||
| 72 | + | ||||
| 73 | + | return srcConn.Raw(func(srcRawConn interface{}) error { | |||
| 74 | + | return dstConn.Raw(func(dstRawConn interface{}) error { | |||
| 75 | + | srcSqlite3Conn := srcRawConn.(*sqlite3.SQLiteConn) | |||
| 76 | + | dstSqlite3Conn := dstRawConn.(*sqlite3.SQLiteConn) | |||
| 77 | + | ||||
| 78 | + | _, err := srcSqlite3Conn.Backup("main", dstSqlite3Conn, "main") | |||
| 79 | + | return err | |||
| 80 | + | }) | |||
| 81 | + | }) | |||
| 82 | + | } | |||
| 83 | + | ||||
| 84 | + | // BackupDB backs up the in-memory database to disk | |||
| 85 | + | func BackupDB(db *sql.DB, a *App) error { | |||
| 86 | + | dbfp := a.GetDBFilePath() | |||
| 87 | + | ||||
| 88 | + | conn, err := db.Conn(context.Background()) | |||
| 89 | + | if err != nil { | |||
| 90 | + | return fmt.Errorf("failed to get underlying database connection: %v", err) | |||
| 91 | + | } | |||
| 92 | + | ||||
| 93 | + | return conn.Raw(func(sqliteConn interface{}) error { | |||
| 94 | + | sqlite3Conn := sqliteConn.(*sqlite3.SQLiteConn) | |||
| 95 | + | backupDB, err := sqlite3Conn.Backup(dbfp, sqlite3Conn, "main") | |||
| 96 | + | if err != nil { | |||
| 97 | + | return fmt.Errorf("failed to create backup: %v", err) | |||
| 98 | + | } | |||
| 99 | + | defer backupDB.Close() | |||
| 100 | + | ||||
| 101 | + | _, err = backupDB.Step(-1) | |||
| 102 | + | if err != nil { | |||
| 103 | + | return fmt.Errorf("failed to backup in-memory database: %v", err) | |||
| 104 | + | } | |||
| 105 | + | ||||
| 106 | + | return nil | |||
| 107 | + | }) | |||
| 108 | + | } | |||
M internal/gotemplate/render/html.go +7 -5
| @@ -3,10 +3,10 @@ package render | |||
| 3 | 3 | import ( | |
| 4 | 4 | "bytes" | |
| 5 | 5 | "fmt" | |
| 6 | + | "github.com/bnema/gordon/internal/app" | |
| 6 | 7 | "html/template" | |
| 7 | 8 | "io/fs" | |
| 8 | - | ||
| 9 | - | "github.com/bnema/gordon/internal/app" | |
| 9 | + | "path" | |
| 10 | 10 | ) | |
| 11 | 11 | ||
| 12 | 12 | type Renderer struct { | |
| @@ -34,14 +34,16 @@ func (r *Renderer) Render(data interface{}, a *app.App) (string, error) { | |||
| 34 | 34 | } | |
| 35 | 35 | ||
| 36 | 36 | // GetRenderer function returns a new Renderer instance | |
| 37 | - | func GetHTMLRenderer(filename string, fs fs.FS, a *app.App) (*Renderer, error) { | |
| 37 | + | func GetHTMLRenderer(pathStr string, filename string, fs fs.FS, a *app.App) (*Renderer, error) { | |
| 38 | + | // Join path and filename | |
| 39 | + | fullPath := path.Join(pathStr, filename) | |
| 38 | 40 | // Check if the file exists in the provided fs.FS using fs.Open | |
| 39 | - | file, err := fs.Open(filename) | |
| 41 | + | file, err := fs.Open(fullPath) | |
| 40 | 42 | if err != nil { | |
| 41 | 43 | return nil, fmt.Errorf("failed to open %s: %w", filename, err) | |
| 42 | 44 | } | |
| 43 | 45 | file.Close() // Close the file after checking | |
| 44 | - | tmpl, err := template.New(filename).ParseFS(fs, filename) | |
| 46 | + | tmpl, err := template.New(filename).ParseFS(fs, fullPath) | |
| 45 | 47 | if err != nil { | |
| 46 | 48 | return nil, fmt.Errorf("failed to parse %s: %w", filename, err) | |
| 47 | 49 | } | |
| @@ -3,10 +3,10 @@ package render | |||||
| 3 | import ( | 3 | import ( | ||
| 4 | "bytes" | 4 | "bytes" | ||
| 5 | "fmt" | 5 | "fmt" | ||
| 6 | + | "github.com/bnema/gordon/internal/app" | |||
| 6 | "html/template" | 7 | "html/template" | ||
| 7 | "io/fs" | 8 | "io/fs" | ||
| 8 | - | 9 | + | "path" | |
| 9 | - | "github.com/bnema/gordon/internal/app" | |||
| 10 | ) | 10 | ) | ||
| 11 | 11 | ||||
| 12 | type Renderer struct { | 12 | type Renderer struct { | ||
| @@ -34,14 +34,16 @@ func (r *Renderer) Render(data interface{}, a *app.App) (string, error) { | |||||
| 34 | } | 34 | } | ||
| 35 | 35 | ||||
| 36 | // GetRenderer function returns a new Renderer instance | 36 | // GetRenderer function returns a new Renderer instance | ||
| 37 | - | func GetHTMLRenderer(filename string, fs fs.FS, a *app.App) (*Renderer, error) { | 37 | + | func GetHTMLRenderer(pathStr string, filename string, fs fs.FS, a *app.App) (*Renderer, error) { |
| 38 | + | // Join path and filename | |||
| 39 | + | fullPath := path.Join(pathStr, filename) | |||
| 38 | // Check if the file exists in the provided fs.FS using fs.Open | 40 | // Check if the file exists in the provided fs.FS using fs.Open | ||
| 39 | - | file, err := fs.Open(filename) | 41 | + | file, err := fs.Open(fullPath) |
| 40 | if err != nil { | 42 | if err != nil { | ||
| 41 | return nil, fmt.Errorf("failed to open %s: %w", filename, err) | 43 | return nil, fmt.Errorf("failed to open %s: %w", filename, err) | ||
| 42 | } | 44 | } | ||
| 43 | file.Close() // Close the file after checking | 45 | file.Close() // Close the file after checking | ||
| 44 | - | tmpl, err := template.New(filename).ParseFS(fs, filename) | 46 | + | tmpl, err := template.New(filename).ParseFS(fs, fullPath) |
| 45 | if err != nil { | 47 | if err != nil { | ||
| 46 | return nil, fmt.Errorf("failed to parse %s: %w", filename, err) | 48 | return nil, fmt.Errorf("failed to parse %s: %w", filename, err) | ||
| 47 | } | 49 | } | ||
M internal/httpserve/handler/adminroutes.go +8 -10
| @@ -13,24 +13,22 @@ import ( | |||
| 13 | 13 | // Handle the admin route to display index.gohtml from the templateFS with the data from strings.yml | |
| 14 | 14 | func AdminRoute(c echo.Context, a *app.App) error { | |
| 15 | 15 | lang := c.Get(middleware.LangKey).(string) | |
| 16 | - | fmt.Println(lang) | |
| 17 | - | data := webui.StringsYamlData{} | |
| 18 | - | err := webui.ReadStringsDataFromYAML(lang, a.TemplateFS, "strings.yml", &data) | |
| 16 | + | yamlData := webui.StringsYamlData{} | |
| 17 | + | err := webui.ReadStringsDataFromYAML(lang, a.TemplateFS, "strings.yml", &yamlData) | |
| 19 | 18 | if err != nil { | |
| 20 | - | return fmt.Errorf("failed to read strings data from YAML: %w", err) | |
| 19 | + | return err | |
| 21 | 20 | } | |
| 22 | 21 | ||
| 23 | 22 | // Navigate inside the fs.FS to get the template | |
| 24 | - | ||
| 25 | - | rendererData, err := render.GetHTMLRenderer("html/admin/index.gohtml", a.TemplateFS, a) | |
| 23 | + | path := "html/admin" | |
| 24 | + | rendererData, err := render.GetHTMLRenderer(path, "index.gohtml", a.TemplateFS, a) | |
| 26 | 25 | if err != nil { | |
| 27 | - | return fmt.Errorf("failed to get renderer: %w", err) | |
| 26 | + | return err | |
| 28 | 27 | } | |
| 29 | 28 | ||
| 30 | - | renderedHTML, err := rendererData.Render(data, a) | |
| 31 | - | fmt.Println(renderedHTML) | |
| 29 | + | renderedHTML, err := rendererData.Render(yamlData.CurrentLang, a) | |
| 32 | 30 | if err != nil { | |
| 33 | - | return fmt.Errorf("failed to render template: %w", err) | |
| 31 | + | return err | |
| 34 | 32 | } | |
| 35 | 33 | ||
| 36 | 34 | return c.HTML(200, renderedHTML) | |
| @@ -13,24 +13,22 @@ import ( | |||||
| 13 | // Handle the admin route to display index.gohtml from the templateFS with the data from strings.yml | 13 | // Handle the admin route to display index.gohtml from the templateFS with the data from strings.yml | ||
| 14 | func AdminRoute(c echo.Context, a *app.App) error { | 14 | func AdminRoute(c echo.Context, a *app.App) error { | ||
| 15 | lang := c.Get(middleware.LangKey).(string) | 15 | lang := c.Get(middleware.LangKey).(string) | ||
| 16 | - | fmt.Println(lang) | 16 | + | yamlData := webui.StringsYamlData{} |
| 17 | - | data := webui.StringsYamlData{} | 17 | + | err := webui.ReadStringsDataFromYAML(lang, a.TemplateFS, "strings.yml", &yamlData) |
| 18 | - | err := webui.ReadStringsDataFromYAML(lang, a.TemplateFS, "strings.yml", &data) | |||
| 19 | if err != nil { | 18 | if err != nil { | ||
| 20 | - | return fmt.Errorf("failed to read strings data from YAML: %w", err) | 19 | + | return err |
| 21 | } | 20 | } | ||
| 22 | 21 | ||||
| 23 | // Navigate inside the fs.FS to get the template | 22 | // Navigate inside the fs.FS to get the template | ||
| 24 | - | 23 | + | path := "html/admin" | |
| 25 | - | rendererData, err := render.GetHTMLRenderer("html/admin/index.gohtml", a.TemplateFS, a) | 24 | + | rendererData, err := render.GetHTMLRenderer(path, "index.gohtml", a.TemplateFS, a) |
| 26 | if err != nil { | 25 | if err != nil { | ||
| 27 | - | return fmt.Errorf("failed to get renderer: %w", err) | 26 | + | return err |
| 28 | } | 27 | } | ||
| 29 | 28 | ||||
| 30 | - | renderedHTML, err := rendererData.Render(data, a) | 29 | + | renderedHTML, err := rendererData.Render(yamlData.CurrentLang, a) |
| 31 | - | fmt.Println(renderedHTML) | |||
| 32 | if err != nil { | 30 | if err != nil { | ||
| 33 | - | return fmt.Errorf("failed to render template: %w", err) | 31 | + | return err |
| 34 | } | 32 | } | ||
| 35 | 33 | ||||
| 36 | return c.HTML(200, renderedHTML) | 34 | return c.HTML(200, renderedHTML) | ||
A pkg/utils/docker/initclient.go +35 -0
| @@ -0,0 +1,35 @@ | |||
| 1 | + | package docker | |
| 2 | + | ||
| 3 | + | import ( | |
| 4 | + | "context" | |
| 5 | + | "fmt" | |
| 6 | + | "log" | |
| 7 | + | ||
| 8 | + | "github.com/bnema/gordon/internal/app" | |
| 9 | + | "github.com/docker/docker/api/types" | |
| 10 | + | "github.com/docker/docker/client" | |
| 11 | + | "github.com/docker/docker/pkg/archive" | |
| 12 | + | ) | |
| 13 | + | ||
| 14 | + | var dockerClient *client.Client | |
| 15 | + | ||
| 16 | + | func init() { | |
| 17 | + | // Get Docker configuration from App | |
| 18 | + | appInstance := app.NewDockerClient() | |
| 19 | + | dockerSocket := appInstance.DockerSock | |
| 20 | + | podmanEnable := appInstance.PodmanEnable | |
| 21 | + | podmanSocket := appInstance.PodmanSock | |
| 22 | + | ||
| 23 | + | // Based on configuration, decide whether to use Docker or Podman | |
| 24 | + | socketPath := dockerSocket | |
| 25 | + | if podmanEnable { | |
| 26 | + | socketPath = podmanSocket | |
| 27 | + | } | |
| 28 | + | ||
| 29 | + | // Initialize Docker client | |
| 30 | + | var err error | |
| 31 | + | dockerClient, err = client.NewClientWithOpts(client.WithHost(fmt.Sprintf("unix://%s", socketPath)), client.WithAPIVersionNegotiation()) | |
| 32 | + | if err != nil { | |
| 33 | + | log.Fatalf("Error initializing Docker client: %v", err) | |
| 34 | + | } | |
| 35 | + | } | |
| @@ -0,0 +1,35 @@ | |||||
| 1 | + | package docker | |||
| 2 | + | ||||
| 3 | + | import ( | |||
| 4 | + | "context" | |||
| 5 | + | "fmt" | |||
| 6 | + | "log" | |||
| 7 | + | ||||
| 8 | + | "github.com/bnema/gordon/internal/app" | |||
| 9 | + | "github.com/docker/docker/api/types" | |||
| 10 | + | "github.com/docker/docker/client" | |||
| 11 | + | "github.com/docker/docker/pkg/archive" | |||
| 12 | + | ) | |||
| 13 | + | ||||
| 14 | + | var dockerClient *client.Client | |||
| 15 | + | ||||
| 16 | + | func init() { | |||
| 17 | + | // Get Docker configuration from App | |||
| 18 | + | appInstance := app.NewDockerClient() | |||
| 19 | + | dockerSocket := appInstance.DockerSock | |||
| 20 | + | podmanEnable := appInstance.PodmanEnable | |||
| 21 | + | podmanSocket := appInstance.PodmanSock | |||
| 22 | + | ||||
| 23 | + | // Based on configuration, decide whether to use Docker or Podman | |||
| 24 | + | socketPath := dockerSocket | |||
| 25 | + | if podmanEnable { | |||
| 26 | + | socketPath = podmanSocket | |||
| 27 | + | } | |||
| 28 | + | ||||
| 29 | + | // Initialize Docker client | |||
| 30 | + | var err error | |||
| 31 | + | dockerClient, err = client.NewClientWithOpts(client.WithHost(fmt.Sprintf("unix://%s", socketPath)), client.WithAPIVersionNegotiation()) | |||
| 32 | + | if err != nil { | |||
| 33 | + | log.Fatalf("Error initializing Docker client: %v", err) | |||
| 34 | + | } | |||
| 35 | + | } | |||