diff --git a/go.mod b/go.mod index 1f0f378..9ac3353 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,11 @@ replace git.coopgo.io/coopgo-platform/fleets => ../../coopgo-platform/fleets/ replace git.coopgo.io/coopgo-platform/agenda => ../../coopgo-platform/agenda/ +replace git.coopgo.io/coopgo-platform/emailing => ../../coopgo-platform/emailing/ + require ( git.coopgo.io/coopgo-platform/agenda v0.0.0-00010101000000-000000000000 + git.coopgo.io/coopgo-platform/emailing v0.0.0-00010101000000-000000000000 git.coopgo.io/coopgo-platform/fleets v0.0.0-00010101000000-000000000000 git.coopgo.io/coopgo-platform/groups-management v0.0.0-00010101000000-000000000000 git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-00010101000000-000000000000 @@ -21,7 +24,9 @@ require ( github.com/google/uuid v1.3.0 github.com/gorilla/mux v1.8.0 github.com/gorilla/sessions v1.2.1 - github.com/spf13/viper v1.12.0 + github.com/paulmach/go.geojson v1.4.0 + github.com/spf13/viper v1.13.0 + gitlab.scity.coop/maas/navitia-golang v0.0.0-20220429110621-5c22d6efdd0c go.etcd.io/etcd/client/v3 v3.5.4 golang.org/x/image v0.0.0-20220722155232-062f8c9fd539 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 @@ -44,10 +49,11 @@ require ( github.com/klauspost/compress v1.13.6 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/magiconair/properties v1.8.6 // indirect + github.com/mb0/wkt v0.0.0-20170420051526-a30afd545ee1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pquerna/cachecontrol v0.1.0 // indirect github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect @@ -55,7 +61,8 @@ require ( github.com/spf13/cast v1.5.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.3.0 // indirect + github.com/subosito/gotenv v1.4.1 // indirect + github.com/twpayne/go-geom v1.3.6 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.1 // indirect github.com/xdg-go/stringprep v1.0.3 // indirect @@ -66,14 +73,16 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.17.0 // indirect - golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect - golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect + golang.org/x/crypto v0.0.0-20221012134737-56aed061732a // indirect + golang.org/x/net v0.0.0-20221014081412-f15817d10f9b // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect - gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/mail.v2 v2.3.1 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect gopkg.in/square/go-jose.v2 v2.5.2-0.20210529014059-a5c7eec3c614 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index af717c5..f27538e 100644 --- a/go.sum +++ b/go.sum @@ -36,8 +36,15 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.2/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -47,6 +54,8 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -60,6 +69,8 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= @@ -67,9 +78,13 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/d4l3k/messagediff v1.2.1/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -79,6 +94,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= @@ -168,6 +184,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -180,14 +197,17 @@ github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyC github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -201,6 +221,7 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -214,11 +235,21 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mb0/wkt v0.0.0-20170420051526-a30afd545ee1 h1:VCgV+ng800r1/AChRHzHbWCtQI06cPxoZQUljQHTyXc= +github.com/mb0/wkt v0.0.0-20170420051526-a30afd545ee1/go.mod h1:IhobDa5AIyiMAsnH/qkytD0NbG0JMOJ2ihQqe1NdXyg= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -227,10 +258,18 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6f github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/ory/dockertest v3.3.4+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.6.0/go.mod h1:4ZOpj8qBUmh8fcBSVzkH2bws2s91JdGvHUqan4GHEuQ= +github.com/paulmach/go.geojson v1.4.0 h1:5x5moCkCtDo5x8af62P9IOAYGQcYHtxz2QJ3x1DoCgY= +github.com/paulmach/go.geojson v1.4.0/go.mod h1:YaKx1hKpWF+T2oj2lFJPsW/t1Q5e1jQI61eoQSTwpIs= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -264,6 +303,7 @@ github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6po github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= @@ -272,24 +312,34 @@ github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.13.0 h1:BWSJ/M+f+3nmdz9bxB+bWX28kkALN2ok11D0rSo8EJU= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/twpayne/go-geom v1.2.1/go.mod h1:90yvs0wf/gyT5eQ9W4v5WOZ9w/Xnrj5RMlA9XNKqxyA= +github.com/twpayne/go-geom v1.3.6 h1:O27mIXZnMYiZi0ZD8ewjs/IT/ZOFVbZHBzPjA9skdmg= +github.com/twpayne/go-geom v1.3.6/go.mod h1:XTyWHR6+l9TUYONbbK4ImUTYbWDCu2ySSPrZmmiA0Pg= +github.com/twpayne/go-kml v1.5.0/go.mod h1:g/OG8Q8JUxqFw8LGXE44W7osn1uXDAYaVFr1Yld43yc= +github.com/twpayne/go-kml v1.5.1/go.mod h1:kz8jAiIz6FIdU2Zjce9qGlVtgFYES9vt7BTPBHf5jl4= +github.com/twpayne/go-polyline v1.0.0/go.mod h1:ICh24bcLYBX8CknfvNPKqoTbe+eg+MX1NPyJmSBo7pU= +github.com/twpayne/go-waypoint v0.0.0-20200706203930-b263a7f6e4e8/go.mod h1:qj5pHncxKhu9gxtZEYWypA/z097sxhFlbTyOyt9gcnU= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= @@ -303,6 +353,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +gitlab.scity.coop/maas/navitia-golang v0.0.0-20220429110621-5c22d6efdd0c h1:pCazzEsTvjDopl3bvo6H2f2xjo1cDjOZ9QpJRNFCc00= +gitlab.scity.coop/maas/navitia-golang v0.0.0-20220429110621-5c22d6efdd0c/go.mod h1:M1U2osA6dYQF8zuJOTb/0O1F/Xgcb+4AkRdw+Un6Rp4= go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg= @@ -329,12 +381,14 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg= +golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -386,6 +440,7 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -408,8 +463,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b h1:tvrvnPFcdzp294diPnrdZZZ8XUt2Tyj7svb7X52iDuU= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -437,6 +492,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -446,10 +502,12 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -482,8 +540,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -510,6 +568,7 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -659,14 +718,18 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= +gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/square/go-jose.v2 v2.5.2-0.20210529014059-a5c7eec3c614 h1:lwJmuuJQGclcankpPJwh8rorzB0bNbVALv8phDGh8TQ= @@ -676,6 +739,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -684,6 +748,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/handlers/application/administration.go b/handlers/application/administration.go index 15b4a58..d8cb20a 100644 --- a/handlers/application/administration.go +++ b/handlers/application/administration.go @@ -2,16 +2,31 @@ package application import ( "context" + "crypto/rand" + "encoding/base64" "fmt" + "io" "net/http" + "sort" + "strings" + "time" groupsmanagement "git.coopgo.io/coopgo-platform/groups-management/grpcapi" + groupstorage "git.coopgo.io/coopgo-platform/groups-management/storage" accounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi" "github.com/google/uuid" "github.com/gorilla/mux" "google.golang.org/protobuf/types/known/structpb" ) +type GroupsByName []groupstorage.Group + +func (a GroupsByName) Len() int { return len(a) } +func (a GroupsByName) Less(i, j int) bool { + return strings.Compare(a[i].Data["name"].(string), a[j].Data["name"].(string)) < 0 +} +func (a GroupsByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + func (h *ApplicationHandler) Administration(w http.ResponseWriter, r *http.Request) { request := &groupsmanagement.GetGroupsRequest{ @@ -25,13 +40,15 @@ func (h *ApplicationHandler) Administration(w http.ResponseWriter, r *http.Reque return } - var groups = []any{} + var groups = []groupstorage.Group{} for _, group := range resp.Groups { g := group.ToStorageType() groups = append(groups, g) } + sort.Sort(GroupsByName(groups)) + h.Renderer.Administration(w, r, groups) } @@ -151,16 +168,16 @@ func (h *ApplicationHandler) AdministrationGroupInviteAdmin(w http.ResponseWrite vars := mux.Vars(r) groupid := vars["groupid"] - // groupresp, err := h.services.GRPC.GroupsManagement.GetGroup(&groupsmanagement.GetGroupRequest{ - // Id: groupid, - // Namespace: "parcoursmob_organizations", - // }) + groupresp, err := h.services.GRPC.GroupsManagement.GetGroup(context.TODO(), &groupsmanagement.GetGroupRequest{ + Id: groupid, + Namespace: "parcoursmob_organizations", + }) - // if err != nil { - // fmt.Println(err) - // w.WriteHeader(http.StatusInternalServerError) - // return - // } + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } r.ParseForm() @@ -169,9 +186,8 @@ func (h *ApplicationHandler) AdministrationGroupInviteAdmin(w http.ResponseWrite Namespace: "parcoursmob", }) - fmt.Println(err) - if err == nil { + // Account already exists : adding the existing account to admin list account := accountresp.Account.ToStorageType() account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid) account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid+":admin") @@ -187,8 +203,44 @@ func (h *ApplicationHandler) AdministrationGroupInviteAdmin(w http.ResponseWrite fmt.Println(err) + data := map[string]any{ + "group": groupresp.Group.ToStorageType().Data["name"], + } + + if err := h.emailing.Send("onboarding.existing_administrator", r.FormValue("username"), data); err != nil { + fmt.Println(err) + } + http.Redirect(w, r, fmt.Sprintf("/app/administration/groups/%s", groupid), http.StatusFound) return + } else { + // Onboard now administrator + onboarding := map[string]any{ + "username": r.FormValue("username"), + "group": groupid, + "admin": true, + } + + b := make([]byte, 16) + if _, err := io.ReadFull(rand.Reader, b); err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + key := base64.RawURLEncoding.EncodeToString(b) + + h.cache.PutWithTTL("onboarding/"+key, onboarding, 72*time.Hour) + + data := map[string]any{ + "group": groupresp.Group.ToStorageType().Data["name"], + "key": key, + } + + if err := h.emailing.Send("onboarding.new_administrator", r.FormValue("username"), data); err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } } http.Redirect(w, r, fmt.Sprintf("/app/administration/groups/%s", groupid), http.StatusFound) diff --git a/handlers/application/agenda.go b/handlers/application/agenda.go index 692c250..693cab4 100644 --- a/handlers/application/agenda.go +++ b/handlers/application/agenda.go @@ -37,7 +37,7 @@ type EventsForm struct { Enddate *time.Time `json:"enddate"` Starttime string `json:"starttime"` Endtime string `json:"endtime"` - MaxSubscribers int `json:"max_subscribers" validate:"required"` + MaxSubscribers int `json:"max_subscribers"` } func (h *ApplicationHandler) AgendaHome(w http.ResponseWriter, r *http.Request) { @@ -159,10 +159,15 @@ func (h *ApplicationHandler) AgendaDisplayEvent(w http.ResponseWriter, r *http.R subscribers := map[string]any{} + accids := []string{} + for _, v := range resp.Event.Subscriptions { + accids = append(accids, v.Subscriber) + } + subscriberresp, err := h.services.GRPC.MobilityAccounts.GetAccountsBatch( context.TODO(), &mobilityaccounts.GetAccountsBatchRequest{ - Accountids: resp.Event.Subscribers, + Accountids: accids, }, ) @@ -183,7 +188,7 @@ func (h *ApplicationHandler) AgendaDisplayEvent(w http.ResponseWriter, r *http.R accountids := []string{} for _, m := range group.Members { - if !contains(resp.Event.Subscribers, m) { + if !contains(resp.Event.Subscriptions, m) { accountids = append(accountids, m) } } @@ -292,11 +297,20 @@ func parseEventsForm(r *http.Request) (*EventsForm, error) { return formData, nil } -func contains[V string](s []V, e V) bool { +func contains(s []*agenda.Subscription, e string) bool { for _, a := range s { - if a == e { + if a.Subscriber == e { return true } } return false } + +// func contains[V string](s []V, e V) bool { +// for _, a := range s { +// if a == e { +// return true +// } +// } +// return false +// } diff --git a/handlers/application/application.go b/handlers/application/application.go index de52c0e..ea7e75a 100644 --- a/handlers/application/application.go +++ b/handlers/application/application.go @@ -6,6 +6,7 @@ import ( "git.coopgo.io/coopgo-apps/parcoursmob/renderer" "git.coopgo.io/coopgo-apps/parcoursmob/services" "git.coopgo.io/coopgo-apps/parcoursmob/utils/cache" + "git.coopgo.io/coopgo-platform/emailing" "github.com/spf13/viper" ) @@ -14,9 +15,10 @@ type ApplicationHandler struct { Renderer *renderer.Renderer services *services.ServicesHandler cache *cache.CacheHandler + emailing *emailing.Mailer } -func NewApplicationHandler(cfg *viper.Viper, svc *services.ServicesHandler, cache *cache.CacheHandler) (*ApplicationHandler, error) { +func NewApplicationHandler(cfg *viper.Viper, svc *services.ServicesHandler, cache *cache.CacheHandler, emailing *emailing.Mailer) (*ApplicationHandler, error) { templates_root := cfg.GetString("templates.root") renderer := renderer.NewRenderer(cfg, templates_root) return &ApplicationHandler{ @@ -24,6 +26,7 @@ func NewApplicationHandler(cfg *viper.Viper, svc *services.ServicesHandler, cach Renderer: renderer, services: svc, cache: cache, + emailing: emailing, }, nil } diff --git a/handlers/application/dashboard.go b/handlers/application/dashboard.go index e13fb85..9d1e8b7 100644 --- a/handlers/application/dashboard.go +++ b/handlers/application/dashboard.go @@ -38,7 +38,7 @@ func (h *ApplicationHandler) Dashboard(w http.ResponseWriter, r *http.Request) { // We only display the 10 last here count := len(resp.Accounts) - min := count - 10 + min := count - 5 if min < 0 { min = 0 } diff --git a/handlers/application/directory.go b/handlers/application/directory.go new file mode 100644 index 0000000..d58478f --- /dev/null +++ b/handlers/application/directory.go @@ -0,0 +1,7 @@ +package application + +import "net/http" + +func (h *ApplicationHandler) DirectoryHome(w http.ResponseWriter, r *http.Request) { + h.Renderer.DirectoryHome(w, r) +} diff --git a/handlers/application/group.go b/handlers/application/group.go new file mode 100644 index 0000000..7de3307 --- /dev/null +++ b/handlers/application/group.go @@ -0,0 +1,128 @@ +package application + +import ( + "context" + "crypto/rand" + "encoding/base64" + "fmt" + "io" + "net/http" + "time" + + "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" + "git.coopgo.io/coopgo-platform/groups-management/storage" + accounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi" +) + +func (h *ApplicationHandler) GroupSettingsDisplay(w http.ResponseWriter, r *http.Request) { + g := r.Context().Value(identification.GroupKey) + if g == nil { + w.WriteHeader(http.StatusBadRequest) + return + } + + group := g.(storage.Group) + + members, err := h.members() + if err != nil { + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + } + + admins := []any{} + groupMembers := []any{} + + for _, m := range members { + mm := m.ToStorageType() + for _, g := range mm.Data["groups"].([]any) { + if g.(string) == group.ID { + groupMembers = append(groupMembers, mm) + } + if g.(string) == group.ID+":admin" { + admins = append(admins, mm) + } + } + } + + h.Renderer.GroupSettingsDisplay(w, r, group, groupMembers, admins) +} + +func (h *ApplicationHandler) GroupSettingsInviteMember(w http.ResponseWriter, r *http.Request) { + g := r.Context().Value(identification.GroupKey) + if g == nil { + w.WriteHeader(http.StatusBadRequest) + return + } + + group := g.(storage.Group) + + r.ParseForm() + + accountresp, err := h.services.GRPC.MobilityAccounts.GetAccountUsername(context.TODO(), &accounts.GetAccountUsernameRequest{ + Username: r.FormValue("username"), + Namespace: "parcoursmob", + }) + + if err == nil { + // Account already exists : adding the existing account to admin list + account := accountresp.Account.ToStorageType() + //account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid) + account.Data["groups"] = append(account.Data["groups"].([]any), group.ID) + + as, _ := accounts.AccountFromStorageType(&account) + + _, err = h.services.GRPC.MobilityAccounts.UpdateData( + context.TODO(), + &accounts.UpdateDataRequest{ + Account: as, + }, + ) + + fmt.Println(err) + + data := map[string]any{ + "group": group.Data["name"], + } + + if err := h.emailing.Send("onboarding.existing_member", r.FormValue("username"), data); err != nil { + fmt.Println(err) + } + + http.Redirect(w, r, "/app/group/settings", http.StatusFound) + return + } else { + // Onboard now administrator + onboarding := map[string]any{ + "username": r.FormValue("username"), + "group": group.ID, + "admin": false, + } + + b := make([]byte, 16) + if _, err := io.ReadFull(rand.Reader, b); err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + key := base64.RawURLEncoding.EncodeToString(b) + + h.cache.PutWithTTL("onboarding/"+key, onboarding, 72*time.Hour) + + data := map[string]any{ + "group": group.Data["name"], + "key": key, + } + + if err := h.emailing.Send("onboarding.new_member", r.FormValue("username"), data); err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + } + + http.Redirect(w, r, "/app/group/settings", http.StatusFound) + return +} diff --git a/handlers/application/journeys.go b/handlers/application/journeys.go new file mode 100644 index 0000000..7fe7d92 --- /dev/null +++ b/handlers/application/journeys.go @@ -0,0 +1,141 @@ +package application + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "time" + + fleets "git.coopgo.io/coopgo-platform/fleets/grpcapi" + geojson "github.com/paulmach/go.geojson" + "gitlab.scity.coop/maas/navitia-golang" + "gitlab.scity.coop/maas/navitia-golang/types" +) + +func (h *ApplicationHandler) JourneysSearch(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + + locTime, errTime := time.LoadLocation("Europe/Paris") + if errTime != nil { + fmt.Println("Loading timezone location Europe/Paris error : ") + fmt.Println("Missing zones in container ? ") + panic(errTime) + } + + departuredate := r.FormValue("departuredate") + departuretime := r.FormValue("departuretime") + departuredatetime, _ := time.ParseInLocation("2006-01-02 15:04", fmt.Sprintf("%s %s", departuredate, departuretime), locTime) + fmt.Println(departuredatetime) + + departure := r.FormValue("departure") + destination := r.FormValue("destination") + + searched := false + + var ( + departuregeo *geojson.Feature + destinationgeo *geojson.Feature + journeys *navitia.JourneyResults + carpoolresults any + vehicles = []any{} + ) + + if departuredate != "" && departuretime != "" && departure != "" && destination != "" { + searched = true + + var err error + + departuregeo, err = geojson.UnmarshalFeature([]byte(departure)) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusBadRequest) + return + } + + destinationgeo, err = geojson.UnmarshalFeature([]byte(destination)) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusBadRequest) + return + } + + //TODO make it a library + session, _ := navitia.NewCustom( + h.config.GetString("services.navitia.api_key"), + "https://api.navitia.io/v1", + &http.Client{}) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusBadRequest) + return + } + fmt.Println(session) + request := navitia.JourneyRequest{ + From: types.ID(fmt.Sprintf("%f", departuregeo.Geometry.Point[0]) + ";" + fmt.Sprintf("%f", departuregeo.Geometry.Point[1])), + To: types.ID(fmt.Sprintf("%f", destinationgeo.Geometry.Point[0]) + ";" + fmt.Sprintf("%f", destinationgeo.Geometry.Point[1])), + Date: departuredatetime.Add(-2 * time.Hour), + DateIsArrival: false, //TODO + } + + journeys, err = session.Journeys(context.Background(), request) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusBadRequest) + return + } + + //CARPOOL + // carpoolrequest := fmt.Sprintf( + // "https://api.rdex.ridygo.fr/journeys.json?p[driver][state]=1&frequency=punctual&p[passenger][state]=0&p[from][latitude]=%f&p[from][longitude]=%f&p[to][latitude]=%f&p[to][longitude]=%f&p[outward][mindate]=%s&p[outward][maxdate]=%s", + // departuregeo.Geometry.Point[1], departuregeo.Geometry.Point[0], + // destinationgeo.Geometry.Point[1], destinationgeo.Geometry.Point[0], + // departuredatetime.Format("2006-01-02"), departuredatetime.Add(24*time.Hour).Format("2006-01-02")) + carpoolrequest := "https://api.rdex.ridygo.fr/journeys.json" + + fmt.Println(carpoolrequest) + + client := &http.Client{} + req, err := http.NewRequest("GET", carpoolrequest, nil) + if err != nil { + fmt.Println(err) + } + + req.URL.RawQuery = fmt.Sprintf( + "p[driver][state]=1&frequency=punctual&p[passenger][state]=0&p[from][latitude]=%f&p[from][longitude]=%f&p[to][latitude]=%f&p[to][longitude]=%f&p[outward][mindate]=%s&p[outward][maxdate]=%s", + departuregeo.Geometry.Point[1], departuregeo.Geometry.Point[0], + destinationgeo.Geometry.Point[1], destinationgeo.Geometry.Point[0], + departuredatetime.Format("2006-01-02"), departuredatetime.Format("2006-01-02")) + + req.Header.Set("X-API-KEY", "123456") + resp, err := client.Do(req) + if err != nil { + fmt.Println(err) + } + + err = json.NewDecoder(resp.Body).Decode(&carpoolresults) + if err != nil { + fmt.Println(err) + } + + // Vehicles + + vehiclerequest := &fleets.GetVehiclesRequest{ + Namespaces: []string{"parcoursmob"}, + } + vehicleresp, err := h.services.GRPC.Fleets.GetVehicles(context.TODO(), vehiclerequest) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + } + + for _, vehicle := range vehicleresp.Vehicles { + v := vehicle.ToStorageType() + if v.Free(departuredatetime.Add(-24*time.Hour), departuredatetime.Add(168*time.Hour)) { + vehicles = append(vehicles, v) + } + } + } + + h.Renderer.JourneysSearch(w, r, carpoolresults, journeys, vehicles, searched, departuregeo, destinationgeo, departuredate, departuretime) +} diff --git a/handlers/auth/auth.go b/handlers/auth/auth.go new file mode 100644 index 0000000..9267be9 --- /dev/null +++ b/handlers/auth/auth.go @@ -0,0 +1,29 @@ +package auth + +import ( + "git.coopgo.io/coopgo-apps/parcoursmob/renderer" + "git.coopgo.io/coopgo-apps/parcoursmob/services" + "git.coopgo.io/coopgo-apps/parcoursmob/utils/cache" + "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" + "github.com/spf13/viper" +) + +type AuthHandler struct { + idp *identification.IdentificationProvider + config *viper.Viper + services *services.ServicesHandler + Renderer *renderer.Renderer + cache *cache.CacheHandler +} + +func NewAuthHandler(cfg *viper.Viper, idp *identification.IdentificationProvider, svc *services.ServicesHandler, cache *cache.CacheHandler) (*AuthHandler, error) { + templates_root := cfg.GetString("templates.root") + renderer := renderer.NewRenderer(cfg, templates_root) + return &AuthHandler{ + idp: idp, + config: cfg, + services: svc, + Renderer: renderer, + cache: cache, + }, nil +} diff --git a/handlers/auth/groups.go b/handlers/auth/groups.go index 7d8839f..9a7578e 100644 --- a/handlers/auth/groups.go +++ b/handlers/auth/groups.go @@ -5,34 +5,9 @@ import ( "fmt" "net/http" - "git.coopgo.io/coopgo-apps/parcoursmob/renderer" - "git.coopgo.io/coopgo-apps/parcoursmob/services" - "git.coopgo.io/coopgo-apps/parcoursmob/utils/cache" - "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" groupsmanagement "git.coopgo.io/coopgo-platform/groups-management/grpcapi" - "github.com/spf13/viper" ) -type AuthHandler struct { - idp *identification.IdentificationProvider - config *viper.Viper - services *services.ServicesHandler - Renderer *renderer.Renderer - cache *cache.CacheHandler -} - -func NewAuthHandler(cfg *viper.Viper, idp *identification.IdentificationProvider, svc *services.ServicesHandler, cache *cache.CacheHandler) (*AuthHandler, error) { - templates_root := cfg.GetString("templates.root") - renderer := renderer.NewRenderer(cfg, templates_root) - return &AuthHandler{ - idp: idp, - config: cfg, - services: svc, - Renderer: renderer, - cache: cache, - }, nil -} - func (h *AuthHandler) Groups(w http.ResponseWriter, r *http.Request) { session, _ := h.idp.SessionsStore.Get(r, "parcoursmob_session") diff --git a/handlers/auth/onboarding.go b/handlers/auth/onboarding.go new file mode 100644 index 0000000..15f7287 --- /dev/null +++ b/handlers/auth/onboarding.go @@ -0,0 +1,79 @@ +package auth + +import ( + "context" + "fmt" + "net/http" + + mobilityaccounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi" + ma "git.coopgo.io/coopgo-platform/mobility-accounts/storage" +) + +func (h *AuthHandler) Onboarding(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + + key := r.FormValue("key") + onboarding, err := h.cache.Get("onboarding/" + key) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + onboardingmap := onboarding.(map[string]any) + + if r.Method == "POST" { + if r.FormValue("password") == "" { + fmt.Println("password is empty !") + w.WriteHeader(http.StatusInternalServerError) + return + } + + groups := []string{ + onboardingmap["group"].(string), + //onboardingmap["group"].(string) + ":admin", + } + + if onboardingmap["admin"].(bool) { + groups = append(groups, onboardingmap["group"].(string)+":admin") + } + + account := &ma.Account{ + Authentication: ma.AccountAuth{ + Local: ma.LocalAuth{ + Username: onboardingmap["username"].(string), + Password: r.FormValue("password"), + }, + }, + Namespace: "parcoursmob", + Data: map[string]any{ + "first_name": r.FormValue("first_name"), + "last_name": r.FormValue("last_name"), + "email": onboardingmap["username"], + "groups": groups, + }, + } + + acc, err := mobilityaccounts.AccountFromStorageType(account) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + request := &mobilityaccounts.RegisterRequest{ + Account: acc, + } + + _, err = h.services.GRPC.MobilityAccounts.Register(context.TODO(), request) + + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + http.Redirect(w, r, "/app/", http.StatusFound) + } + + h.Renderer.AuthOnboarding(w, r, key, onboarding) +} diff --git a/main.go b/main.go index 583b132..5f4d0fc 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "git.coopgo.io/coopgo-apps/parcoursmob/handlers/api" "git.coopgo.io/coopgo-apps/parcoursmob/handlers/application" "git.coopgo.io/coopgo-apps/parcoursmob/handlers/auth" + "git.coopgo.io/coopgo-apps/parcoursmob/renderer" "git.coopgo.io/coopgo-apps/parcoursmob/services" "git.coopgo.io/coopgo-apps/parcoursmob/utils/cache" "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" @@ -42,8 +43,13 @@ func main() { panic(err) } + emailing, err := renderer.NewEmailingHandler(cfg) + if err != nil { + panic(err) + } + apiHandler, _ := api.NewAPIHandler(cfg, idp, svc, cache) - applicationHandler, _ := application.NewApplicationHandler(cfg, svc, cache) + applicationHandler, _ := application.NewApplicationHandler(cfg, svc, cache, emailing) authHandler, _ := auth.NewAuthHandler(cfg, idp, svc, cache) fmt.Println("Running", service_name, ":") @@ -52,6 +58,7 @@ func main() { r.PathPrefix("/public/").Handler(http.StripPrefix("/public/", http.FileServer(http.Dir(templates_public_dir)))) + r.HandleFunc("/auth/onboarding", authHandler.Onboarding) r.HandleFunc("/auth/groups/", authHandler.Groups) r.HandleFunc("/auth/groups/switch", authHandler.GroupSwitch) r.HandleFunc("/", redirectApp) @@ -70,6 +77,7 @@ func main() { application.HandleFunc("/beneficiaries/{beneficiaryid}/update", applicationHandler.BeneficiaryUpdate) application.HandleFunc("/beneficiaries/{beneficiaryid}/picture", applicationHandler.BeneficiaryPicture) application.HandleFunc("/members/{beneficiaryid}/picture", applicationHandler.BeneficiaryPicture) + application.HandleFunc("/journeys/", applicationHandler.JourneysSearch) application.HandleFunc("/vehicles/", applicationHandler.VehiclesSearch) application.HandleFunc("/vehicles/bookings/", applicationHandler.VehiclesBookingsList) application.HandleFunc("/vehicles/bookings/{bookingid}", applicationHandler.VehicleBookingDisplay) @@ -83,6 +91,10 @@ func main() { application.HandleFunc("/agenda/create-event", applicationHandler.AgendaCreateEvent) application.HandleFunc("/agenda/{eventid}", applicationHandler.AgendaDisplayEvent) application.HandleFunc("/agenda/{eventid}/subscribe", applicationHandler.AgendaSubscribeEvent) + application.HandleFunc("/directory/", applicationHandler.DirectoryHome) + + application.HandleFunc("/group/settings", applicationHandler.GroupSettingsDisplay) + application.HandleFunc("/group/settings/invite-member", applicationHandler.GroupSettingsInviteMember) //TODO Subrouters with middlewares checking security for each module ? application.Use(idp.Middleware) application.Use(idp.GroupsMiddleware) diff --git a/renderer/agenda.go b/renderer/agenda.go index d96c837..4197e01 100644 --- a/renderer/agenda.go +++ b/renderer/agenda.go @@ -6,7 +6,7 @@ import ( agendastorage "git.coopgo.io/coopgo-platform/agenda/storage" ) -const agendaMenu = "events" +const agendaMenu = "agenda" func (renderer *Renderer) AgendaHome(w http.ResponseWriter, r *http.Request, events []agendastorage.Event, groups map[string]any) { files := renderer.ThemeConfig.GetStringSlice("views.agenda.list.files") diff --git a/renderer/auth.go b/renderer/auth.go index deb7058..ca4bd01 100644 --- a/renderer/auth.go +++ b/renderer/auth.go @@ -11,3 +11,14 @@ func (renderer *Renderer) AuthGroups(w http.ResponseWriter, r *http.Request, gro renderer.RenderNoLayout("groups switch", w, r, files, state) } + +func (renderer *Renderer) AuthOnboarding(w http.ResponseWriter, r *http.Request, key string, onboarding any) { + files := renderer.ThemeConfig.GetStringSlice("views.auth.onboarding.files") + state := NewState(r, renderer.ThemeConfig, "") + state.ViewState = map[string]any{ + "key": key, + "onboarding": onboarding, + } + + renderer.RenderNoLayout("onboarding", w, r, files, state) +} diff --git a/renderer/directory.go b/renderer/directory.go new file mode 100644 index 0000000..2f43ccc --- /dev/null +++ b/renderer/directory.go @@ -0,0 +1,13 @@ +package renderer + +import "net/http" + +const directoryMenu = "directory" + +func (renderer *Renderer) DirectoryHome(w http.ResponseWriter, r *http.Request) { + files := renderer.ThemeConfig.GetStringSlice("views.directory.home.files") + state := NewState(r, renderer.ThemeConfig, directoryMenu) + state.ViewState = map[string]any{} + + renderer.Render("directory", w, r, files, state) +} diff --git a/renderer/func-maps.go b/renderer/func-maps.go index 561fee2..92e7b14 100644 --- a/renderer/func-maps.go +++ b/renderer/func-maps.go @@ -5,6 +5,8 @@ import ( "fmt" "html/template" "time" + + "gitlab.scity.coop/maas/navitia-golang/types" ) func TimeFrom(d any) *time.Time { @@ -68,6 +70,16 @@ func Dict(v ...interface{}) map[string]interface{} { return dict } +func WalkingLength(s types.Section) (l int) { + l = 0 + if s.Mode == "walking" { + for _, p := range s.Path { + l = l + int(p.Length) + } + } + return +} + func strval(v interface{}) string { switch v := v.(type) { case string: @@ -82,3 +94,7 @@ func strval(v interface{}) string { return fmt.Sprintf("%v", v) } } + +func Divide[V int | float64](a, b V) V { + return a / b +} diff --git a/renderer/group.go b/renderer/group.go new file mode 100644 index 0000000..2e23dd3 --- /dev/null +++ b/renderer/group.go @@ -0,0 +1,17 @@ +package renderer + +import "net/http" + +const groupsettingsMenu = "groupsettings" + +func (renderer *Renderer) GroupSettingsDisplay(w http.ResponseWriter, r *http.Request, group any, groupmembers []any, admins []any) { + files := renderer.ThemeConfig.GetStringSlice("views.group.settings.files") + state := NewState(r, renderer.ThemeConfig, groupsettingsMenu) + state.ViewState = map[string]any{ + "group": group, + "members": groupmembers, + "admins": admins, + } + + renderer.Render("group settings", w, r, files, state) +} diff --git a/renderer/journeys.go b/renderer/journeys.go new file mode 100644 index 0000000..c488f4a --- /dev/null +++ b/renderer/journeys.go @@ -0,0 +1,22 @@ +package renderer + +import "net/http" + +const journeysMenu = "journeys" + +func (renderer *Renderer) JourneysSearch(w http.ResponseWriter, r *http.Request, carpools any, transitjourneys any, vehicles []any, searched bool, departure any, destination any, departuredate string, departuretime string) { + files := renderer.ThemeConfig.GetStringSlice("views.journeys.search.files") + state := NewState(r, renderer.ThemeConfig, journeysMenu) + state.ViewState = map[string]any{ + "searched": searched, + "departuredate": departuredate, + "departuretime": departuretime, + "departure": departure, + "destination": destination, + "journeys": transitjourneys, + "carpools": carpools, + "vehicles": vehicles, + } + + renderer.Render("journeys", w, r, files, state) +} diff --git a/renderer/mailer.go b/renderer/mailer.go new file mode 100644 index 0000000..8fdec6a --- /dev/null +++ b/renderer/mailer.go @@ -0,0 +1,22 @@ +package renderer + +import ( + "fmt" + + "git.coopgo.io/coopgo-platform/emailing" + "github.com/spf13/viper" +) + +func NewEmailingHandler(cfg *viper.Viper) (*emailing.Mailer, error) { + templates_dir := cfg.GetString("templates.root") + + theme := viper.New() + theme.SetConfigName("config") + theme.AddConfigPath(templates_dir) + err := theme.ReadInConfig() + if err != nil { + panic(fmt.Errorf("fatal error config file: %w", err)) + } + + return emailing.NewMailer(templates_dir, theme.Sub("emails"), cfg.Sub("emailing.smtp")) +} diff --git a/renderer/renderer.go b/renderer/renderer.go index 43900db..b1c06e3 100644 --- a/renderer/renderer.go +++ b/renderer/renderer.go @@ -7,6 +7,7 @@ import ( "git.coopgo.io/coopgo-apps/parcoursmob/utils/icons" "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" + "git.coopgo.io/coopgo-platform/emailing" "git.coopgo.io/coopgo-platform/groups-management/storage" "github.com/spf13/viper" ) @@ -15,6 +16,7 @@ type Renderer struct { TemplatesDir string GlobalConfig *viper.Viper ThemeConfig *viper.Viper + Mailer *emailing.Mailer } func NewRenderer(global *viper.Viper, templates_dir string) *Renderer { @@ -50,6 +52,9 @@ func (renderer *Renderer) Render(name string, w http.ResponseWriter, r *http.Req "genderISO5218": GenderISO5218, "dict": Dict, "json": JSON, + "walkingLength": WalkingLength, + "divideFloat64": Divide[float64], + "divideInt": Divide[int], }, ) t = template.Must(t.ParseFiles(prefixed_files...)) @@ -72,6 +77,8 @@ func (renderer *Renderer) RenderNoLayout(name string, w http.ResponseWriter, r * "genderISO5218": GenderISO5218, "dict": Dict, "json": JSON, + "divideFloat64": Divide[float64], + "divideInt": Divide[int], }, ) @@ -119,7 +126,7 @@ func NewState(r *http.Request, themeConfig *viper.Viper, menuState string) Rende ls := LayoutState{ AdministrationState: AdministrationState{ - Display: modules["administration"].(bool), + Display: modules["administration"] != nil && modules["administration"].(bool), Active: menuState == administrationMenu, }, @@ -128,57 +135,66 @@ func NewState(r *http.Request, themeConfig *viper.Viper, menuState string) Rende { Title: "Tableau de bord", Link: "/app/", - Active: menuState == "dashboard", + Active: menuState == dashboardMenu, Icon: "hero:outline/home", }, }, } - if modules["beneficiaries"].(bool) { + if modules["beneficiaries"] != nil && modules["beneficiaries"].(bool) { ls.MenuItems = append(ls.MenuItems, MenuItem{ Title: "Bénéficiaires", Link: "/app/beneficiaries/", - Active: menuState == "beneficiaries", + Active: menuState == beneficiariesMenu, Icon: "hero:outline/user-group", }) } - if modules["journeys"].(bool) { + if modules["journeys"] != nil && modules["journeys"].(bool) { ls.MenuItems = append(ls.MenuItems, MenuItem{ Title: "Déplacements", Link: "/app/journeys/", - Active: menuState == "journeys", + Active: menuState == journeysMenu, Icon: "hero:outline/map", }) } - if modules["vehicles"].(bool) { + if modules["vehicles"] != nil && modules["vehicles"].(bool) { ls.MenuItems = append(ls.MenuItems, MenuItem{ Title: "Véhicules partagés", Link: "/app/vehicles/", - Active: menuState == "vehicles", + Active: menuState == vehiclesMenu, Icon: "tabler-icons:car", }) } - if modules["vehicles_management"].(bool) { + if modules["vehicles_management"] != nil && modules["vehicles_management"].(bool) { ls.MenuItems = append(ls.MenuItems, MenuItem{ Title: "Gestion des véhicules", Link: "/app/vehicles-management/", - Active: menuState == "vehicles_management", + Active: menuState == vehiclesmanagementMenu, Icon: "hero:outline/briefcase", }) } - if modules["agenda"].(bool) { + if modules["agenda"] != nil && modules["agenda"].(bool) { ls.MenuItems = append(ls.MenuItems, MenuItem{ Title: "Agenda dispositifs", Link: "/app/agenda/", - Active: menuState == "agenda", + Active: menuState == agendaMenu, Icon: "hero:outline/calendar", }) } + if modules["directory"] != nil && modules["directory"].(bool) { + ls.MenuItems = append(ls.MenuItems, MenuItem{ + Title: "Répertoire solutions", + Link: "/app/directory/", + Active: menuState == directoryMenu, + Icon: "hero:outline/document-text", + }) + } + return RenderState{ IconSet: icons.NewIconSet(iconset), Group: group, diff --git a/themes/default/README.md b/themes/default/README.md index 660575e..0fb22b2 100644 --- a/themes/default/README.md +++ b/themes/default/README.md @@ -9,7 +9,7 @@ This theme uses : Look at the [Tailwind CSS docs](https://tailwindcss.com/docs/installation) to know how to install and use Tailwind. -If you installed the Tailwind CLI, run this command from this repository while developing. +If you installed the Tailwind CLI, run this command from this repository while developing from the web/ directory. ``` npx tailwind -i ./assets/css/main.css -o public/css/main.css --watch diff --git a/themes/default/config.yaml b/themes/default/config.yaml index 5bfc77c..5fc9839 100644 --- a/themes/default/config.yaml +++ b/themes/default/config.yaml @@ -3,103 +3,129 @@ name: PARCOURSMOB views: generic: files: - - layouts/layout.html - - layouts/_partials/mainmenu.html + - web/layouts/layout.html + - web/layouts/_partials/mainmenu.html dashboard: files: - - layouts/dashboard/_partials/agenda-widget.html - - layouts/dashboard/_partials/beneficiaries-widget.html - - layouts/dashboard/dashboard.html + - web/layouts/dashboard/_partials/agenda-widget.html + - web/layouts/dashboard/_partials/beneficiaries-widget.html + - web/layouts/dashboard/dashboard.html beneficiaries: list: files: - - layouts/beneficiaries/list.html + - web/layouts/beneficiaries/list.html create: files: - - layouts/_partials/address_autocomplete.html - - layouts/beneficiaries/create.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/beneficiaries/create.html display: files: - - layouts/vehicles_management/_partials/vehicle-type-select.html - - layouts/beneficiaries/_partials/beneficiary-vehicles.html - - layouts/beneficiaries/_partials/beneficiary-notes.html - - layouts/beneficiaries/_partials/beneficiary-journeys.html - - layouts/beneficiaries/_partials/beneficiary-events.html - - layouts/beneficiaries/_partials/beneficiary-files.html - - layouts/beneficiaries/display.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/vehicles_management/_partials/vehicle-type-select.html + - web/layouts/beneficiaries/_partials/beneficiary-vehicles.html + - web/layouts/beneficiaries/_partials/beneficiary-notes.html + - web/layouts/beneficiaries/_partials/beneficiary-journeys.html + - web/layouts/beneficiaries/_partials/beneficiary-events.html + - web/layouts/beneficiaries/_partials/beneficiary-files.html + - web/layouts/beneficiaries/display.html update: files: - - layouts/_partials/address_autocomplete.html - - layouts/beneficiaries/update.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/beneficiaries/update.html vehicles: search: files: - - layouts/_partials/address_autocomplete.html - - layouts/vehicles_management/_partials/vehicle-type-select.html - - layouts/vehicles/search.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/vehicles_management/_partials/vehicle-type-select.html + - web/layouts/vehicles/search.html booking_display: files: - - layouts/vehicles/booking-display.html + - web/layouts/vehicles/booking-display.html bookings_list: files: - - layouts/vehicles_management/_partials/bookings-list.html - - layouts/vehicles/bookings-list.html + - web/layouts/vehicles_management/_partials/bookings-list.html + - web/layouts/vehicles/bookings-list.html vehicles_management: overview: files: - - layouts/vehicles_management/_partials/bookings-list.html - - layouts/vehicles_management/_partials/vehicles-list.html - - layouts/vehicles_management/overview.html + - web/layouts/vehicles_management/_partials/bookings-list.html + - web/layouts/vehicles_management/_partials/vehicles-list.html + - web/layouts/vehicles_management/overview.html fleet_add: files: - - layouts/_partials/address_autocomplete.html - - layouts/vehicles_management/_partials/vehicle-type-select.html - - layouts/vehicles_management/fleet-add.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/vehicles_management/_partials/vehicle-type-select.html + - web/layouts/vehicles_management/fleet-add.html fleet_display: files: - - layouts/vehicles_management/_partials/calendar.html - - layouts/vehicles_management/fleet-display.html + - web/layouts/vehicles_management/_partials/calendar.html + - web/layouts/vehicles_management/fleet-display.html fleet_update: files: - - layouts/_partials/address_autocomplete.html - - layouts/vehicles_management/_partials/vehicle-type-select.html - - layouts/vehicles_management/fleet-update.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/vehicles_management/_partials/vehicle-type-select.html + - web/layouts/vehicles_management/fleet-update.html booking_display: files: - - layouts/vehicles_management/booking-display.html + - web/layouts/vehicles_management/booking-display.html agenda: list: files: - - layouts/agenda/home.html + - web/layouts/agenda/home.html display_event: files: - - layouts/agenda/display-event.html + - web/layouts/agenda/display-event.html create_event: files: - - layouts/_partials/address_autocomplete.html - - layouts/agenda/create-event.html + - web/layouts/_partials/address_autocomplete.html + - web/layouts/agenda/create-event.html + directory: + home: + files: + - web/layouts/directory/home.html + journeys: + search: + files: + - web/layouts/_partials/address_autocomplete.html + - web/layouts/journeys/_partials/journeys-all.html + - web/layouts/journeys/_partials/journeys-others.html + - web/layouts/journeys/_partials/journeys-carpool.html + - web/layouts/journeys/_partials/journeys-public-transit.html + - web/layouts/journeys/search.html administration: home: files: - - layouts/administration/home.html + - web/layouts/administration/home.html create_group: files: - - layouts/administration/create_group.html + - web/layouts/administration/create_group.html display_group: files: - - layouts/administration/_partials/groups_admins.html - - layouts/administration/display_group.html + - web/layouts/administration/_partials/groups_admins.html + - web/layouts/administration/_partials/group_members.html + - web/layouts/administration/display_group.html + group: + settings: + files: + - web/layouts/administration/_partials/groups_admins.html + - web/layouts/administration/_partials/group_members.html + - web/layouts/group/settings.html auth: groups: files: - - layouts/auth/groups.html + - web/layouts/auth/groups.html + onboarding: + files: + - web/layouts/auth/onboarding.html icons: svg: coopgo:parcoursmob/monogram: hero:outline/briefcase: hero:outline/calendar: + hero:outline/chevron-right: hero:outline/cog: + hero:outline/document-text: hero:outline/home: hero:outline/map: hero:outline/office-building: @@ -113,3 +139,29 @@ icons: hero:solid/selector: img:profile-picture-placeholder: tabler-icons:car: + tabler-icons:walk: + tabler-icons:bus: + +emails: + onboarding: + new_administrator: + subject: PARCOURSMOB - Vous avez été invité comme administrateur + files: + - emails/layout.html + - emails/onboarding/new-administrator.html + existing_administrator: + subject: PARCOURSMOB - Vous avez été invité comme administrateur + files: + - emails/layout.html + - emails/onboarding/existing-administrator.html + new_member: + subject: PARCOURSMOB - Vous avez été invité à rejoindre une organisation + files: + - emails/layout.html + - emails/onboarding/new-member.html + existing_member: + subject: PARCOURSMOB - Vous avez été invité à rejoindre une organisation + files: + - emails/layout.html + - emails/onboarding/existing-member.html + \ No newline at end of file diff --git a/themes/default/emails/layout.html b/themes/default/emails/layout.html new file mode 100644 index 0000000..6ac319a --- /dev/null +++ b/themes/default/emails/layout.html @@ -0,0 +1,62 @@ +{{define "main"}} + + + + + +
+ PARCOURSMOB +
+
+ {{template "content" .}} +
+ + +{{end}} \ No newline at end of file diff --git a/themes/default/emails/onboarding/existing-administrator.html b/themes/default/emails/onboarding/existing-administrator.html new file mode 100644 index 0000000..ba0fe56 --- /dev/null +++ b/themes/default/emails/onboarding/existing-administrator.html @@ -0,0 +1,4 @@ +{{define "content"}} +

Vous avez été ajouté comme administrateur de l'organisation {{.group}} sur PARCOURSMOB.

+

Connectez vous sur http://localhost:9000 pour y accéder

+{{end}} \ No newline at end of file diff --git a/themes/default/emails/onboarding/existing-member.html b/themes/default/emails/onboarding/existing-member.html new file mode 100644 index 0000000..f90cd72 --- /dev/null +++ b/themes/default/emails/onboarding/existing-member.html @@ -0,0 +1,4 @@ +{{define "content"}} +

Vous avez été ajouté à l'organisation {{.group}} sur PARCOURSMOB.

+

Connectez vous sur http://localhost:9000 pour y accéder

+{{end}} \ No newline at end of file diff --git a/themes/default/emails/onboarding/new-administrator.html b/themes/default/emails/onboarding/new-administrator.html new file mode 100644 index 0000000..f2e62d2 --- /dev/null +++ b/themes/default/emails/onboarding/new-administrator.html @@ -0,0 +1,5 @@ +{{define "content"}} +

Vous avez été ajouté comme administrateur de l'organisation {{.group}} sur PARCOURSMOB.

+

Vous devez créer votre compte pour y accéder.

+

Pour créer votre compte PARCOURSMOB, cliquez sur : http://localhost:9000/onboarding?key={{.key}}

+{{end}} \ No newline at end of file diff --git a/themes/default/emails/onboarding/new-member.html b/themes/default/emails/onboarding/new-member.html new file mode 100644 index 0000000..845d612 --- /dev/null +++ b/themes/default/emails/onboarding/new-member.html @@ -0,0 +1,5 @@ +{{define "content"}} +

Vous avez été ajouté à l'organisation {{.group}} sur PARCOURSMOB.

+

Vous devez créer votre compte pour y accéder.

+

Pour créer votre compte PARCOURSMOB, cliquez sur : http://localhost:9000/onboarding?key={{.key}}

+{{end}} \ No newline at end of file diff --git a/themes/default/layouts/beneficiaries/_partials/beneficiary-journeys.html b/themes/default/layouts/beneficiaries/_partials/beneficiary-journeys.html deleted file mode 100644 index 7d31762..0000000 --- a/themes/default/layouts/beneficiaries/_partials/beneficiary-journeys.html +++ /dev/null @@ -1,4 +0,0 @@ -{{define "beneficiary_journeys"}} -
-
-{{end}} \ No newline at end of file diff --git a/themes/default/assets/css/main.css b/themes/default/web/assets/css/main.css similarity index 100% rename from themes/default/assets/css/main.css rename to themes/default/web/assets/css/main.css diff --git a/themes/default/assets/js/main.js b/themes/default/web/assets/js/main.js similarity index 100% rename from themes/default/assets/js/main.js rename to themes/default/web/assets/js/main.js diff --git a/themes/default/fonts/bitter.ttf b/themes/default/web/fonts/bitter.ttf similarity index 100% rename from themes/default/fonts/bitter.ttf rename to themes/default/web/fonts/bitter.ttf diff --git a/themes/default/layouts/_partials/address_autocomplete.html b/themes/default/web/layouts/_partials/address_autocomplete.html similarity index 88% rename from themes/default/layouts/_partials/address_autocomplete.html rename to themes/default/web/layouts/_partials/address_autocomplete.html index b91717d..174aa1c 100644 --- a/themes/default/layouts/_partials/address_autocomplete.html +++ b/themes/default/web/layouts/_partials/address_autocomplete.html @@ -1,9 +1,10 @@ {{ define "address_autocomplete" }} +
- + diff --git a/themes/default/layouts/_partials/mainmenu.html b/themes/default/web/layouts/_partials/mainmenu.html similarity index 100% rename from themes/default/layouts/_partials/mainmenu.html rename to themes/default/web/layouts/_partials/mainmenu.html diff --git a/themes/default/web/layouts/administration/_partials/group_members.html b/themes/default/web/layouts/administration/_partials/group_members.html new file mode 100644 index 0000000..6e03022 --- /dev/null +++ b/themes/default/web/layouts/administration/_partials/group_members.html @@ -0,0 +1,47 @@ +{{define "groups_members"}} +
+ +

Membres de l'organisation

+ +
+ + {{range .ViewState.members}} + + {{end}} +
+
+ + +{{end}} \ No newline at end of file diff --git a/themes/default/layouts/administration/_partials/groups_admins.html b/themes/default/web/layouts/administration/_partials/groups_admins.html similarity index 73% rename from themes/default/layouts/administration/_partials/groups_admins.html rename to themes/default/web/layouts/administration/_partials/groups_admins.html index 2344667..3495123 100644 --- a/themes/default/layouts/administration/_partials/groups_admins.html +++ b/themes/default/web/layouts/administration/_partials/groups_admins.html @@ -22,18 +22,7 @@
-
-
-
- -
- - -
- -
+ + src="http://localhost:9000/app/beneficiaries/e7616eac-4a87-4396-a505-23e0421b9c4c/picture" + alt="Dries Vincent"> --> diff --git a/themes/default/layouts/agenda/create-event.html b/themes/default/web/layouts/agenda/create-event.html similarity index 98% rename from themes/default/layouts/agenda/create-event.html rename to themes/default/web/layouts/agenda/create-event.html index 115fba6..c3af0c4 100644 --- a/themes/default/layouts/agenda/create-event.html +++ b/themes/default/web/layouts/agenda/create-event.html @@ -44,6 +44,11 @@ isFormValid: true, validate() { this.formValidation = Iodine.assert(this.fields, this.rules) + + if(!Iodine.assertAfterOrEqual(new Date(this.fields.enddate), new Date(this.fields.startdate))) { + this.formValidation.fields.enddate.valid = false + this.formValidation.valid = false + } }, validateField(field) { this.formValidation.fields[field] = Iodine.assert(this.fields[field], this.rules[field]) diff --git a/themes/default/layouts/agenda/display-event.html b/themes/default/web/layouts/agenda/display-event.html similarity index 100% rename from themes/default/layouts/agenda/display-event.html rename to themes/default/web/layouts/agenda/display-event.html diff --git a/themes/default/layouts/agenda/home.html b/themes/default/web/layouts/agenda/home.html similarity index 95% rename from themes/default/layouts/agenda/home.html rename to themes/default/web/layouts/agenda/home.html index 49c9aef..864f81c 100644 --- a/themes/default/layouts/agenda/home.html +++ b/themes/default/web/layouts/agenda/home.html @@ -53,6 +53,7 @@ {{range .ViewState.events}} +
{{.Type}}
@@ -83,12 +84,14 @@ + {{if ne .RemainingSubscriptions 999}}
{{.RemainingSubscriptions}}
+ {{end}}
- {{range .Subscribers}} - + {{range .Subscriptions}} + {{end}}
@@ -98,6 +101,7 @@
Voir + {{end}} diff --git a/themes/default/layouts/auth/groups.html b/themes/default/web/layouts/auth/groups.html similarity index 100% rename from themes/default/layouts/auth/groups.html rename to themes/default/web/layouts/auth/groups.html diff --git a/themes/default/web/layouts/auth/onboarding.html b/themes/default/web/layouts/auth/onboarding.html new file mode 100644 index 0000000..3d18e6c --- /dev/null +++ b/themes/default/web/layouts/auth/onboarding.html @@ -0,0 +1,54 @@ +{{define "main"}} + + + PARCOURSMOB - Identification + + + +
+ + + +
+
+ +

Créez votre compte PARCOURSMOB

+
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ + + +
+ +
+ + +
+
+
+
+ + +{{end}} \ No newline at end of file diff --git a/themes/default/layouts/beneficiaries/_partials/beneficiary-events.html b/themes/default/web/layouts/beneficiaries/_partials/beneficiary-events.html similarity index 100% rename from themes/default/layouts/beneficiaries/_partials/beneficiary-events.html rename to themes/default/web/layouts/beneficiaries/_partials/beneficiary-events.html diff --git a/themes/default/layouts/beneficiaries/_partials/beneficiary-files.html b/themes/default/web/layouts/beneficiaries/_partials/beneficiary-files.html similarity index 100% rename from themes/default/layouts/beneficiaries/_partials/beneficiary-files.html rename to themes/default/web/layouts/beneficiaries/_partials/beneficiary-files.html diff --git a/themes/default/web/layouts/beneficiaries/_partials/beneficiary-journeys.html b/themes/default/web/layouts/beneficiaries/_partials/beneficiary-journeys.html new file mode 100644 index 0000000..160a179 --- /dev/null +++ b/themes/default/web/layouts/beneficiaries/_partials/beneficiary-journeys.html @@ -0,0 +1,38 @@ +{{define "beneficiary_journeys"}} +
+
+ + {{ $departureField := "departure" }} + {{ $departureLabel := "Départ" }} + {{ template "address_autocomplete" dict "FieldName" $departureField "FieldLabel" $departureLabel }} + + {{ $destinationField := "destination" }} + {{ $destinationLabel := "Destination" }} + {{ template "address_autocomplete" dict "FieldName" $destinationField "FieldLabel" $destinationLabel }} + + +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+{{end}} \ No newline at end of file diff --git a/themes/default/layouts/beneficiaries/_partials/beneficiary-notes.html b/themes/default/web/layouts/beneficiaries/_partials/beneficiary-notes.html similarity index 100% rename from themes/default/layouts/beneficiaries/_partials/beneficiary-notes.html rename to themes/default/web/layouts/beneficiaries/_partials/beneficiary-notes.html diff --git a/themes/default/layouts/beneficiaries/_partials/beneficiary-vehicles.html b/themes/default/web/layouts/beneficiaries/_partials/beneficiary-vehicles.html similarity index 100% rename from themes/default/layouts/beneficiaries/_partials/beneficiary-vehicles.html rename to themes/default/web/layouts/beneficiaries/_partials/beneficiary-vehicles.html diff --git a/themes/default/layouts/beneficiaries/create.html b/themes/default/web/layouts/beneficiaries/create.html similarity index 100% rename from themes/default/layouts/beneficiaries/create.html rename to themes/default/web/layouts/beneficiaries/create.html diff --git a/themes/default/layouts/beneficiaries/display.html b/themes/default/web/layouts/beneficiaries/display.html similarity index 100% rename from themes/default/layouts/beneficiaries/display.html rename to themes/default/web/layouts/beneficiaries/display.html diff --git a/themes/default/layouts/beneficiaries/list.html b/themes/default/web/layouts/beneficiaries/list.html similarity index 100% rename from themes/default/layouts/beneficiaries/list.html rename to themes/default/web/layouts/beneficiaries/list.html diff --git a/themes/default/layouts/beneficiaries/update.html b/themes/default/web/layouts/beneficiaries/update.html similarity index 100% rename from themes/default/layouts/beneficiaries/update.html rename to themes/default/web/layouts/beneficiaries/update.html diff --git a/themes/default/layouts/dashboard/_partials/agenda-widget.html b/themes/default/web/layouts/dashboard/_partials/agenda-widget.html similarity index 100% rename from themes/default/layouts/dashboard/_partials/agenda-widget.html rename to themes/default/web/layouts/dashboard/_partials/agenda-widget.html diff --git a/themes/default/layouts/dashboard/_partials/beneficiaries-widget.html b/themes/default/web/layouts/dashboard/_partials/beneficiaries-widget.html similarity index 96% rename from themes/default/layouts/dashboard/_partials/beneficiaries-widget.html rename to themes/default/web/layouts/dashboard/_partials/beneficiaries-widget.html index 5492312..dcf45cc 100644 --- a/themes/default/layouts/dashboard/_partials/beneficiaries-widget.html +++ b/themes/default/web/layouts/dashboard/_partials/beneficiaries-widget.html @@ -3,7 +3,7 @@

Bénéficiaires

-

Derniers ajoutés

+

Derniers bénéficiaires ajoutés

+
+

{{.ViewState.group.Data.name}}

+
+
+
+ +
+ +
+
+
+
+
+

+ Paramètres de l'organisation

+

Paramètres généraux de l'organisation

+
+ {{template "groups_members" .}} + +
+
+
+ +
+ + +
+ +
+ + {{template "groups_admins" .}} +
+
+
+
+
+

Modules activés

+ +
+
+
+
+ +
+
+ +

Gestion des bénéficiaires assignés à sa propre organisation. +

+
+
+
+
+ +
+
+ +

Trouver des solutions et organiser les déplacements de ses bénéficiaires.

+
+
+
+
+ +
+
+ +

Trouver et réserver des véhicules pour ses bénéficiaires. +

+
+
+
+
+ +
+
+ +

Gérer les véhicules et réservations (pour les gestionnaires de flottes) +

+
+
+
+
+ +
+
+ +

Agenda des dispositifs pour les bénéficiaires (sessions permis, événements, ...) +

+
+
+
+
+ +
+
+ +

Administration générale de la plateforme PARCOURSMOB. Créer, ajouter des organisations et administrateurs. +

+
+
+
+
+
+ +
+
+ +{{end}} \ No newline at end of file diff --git a/themes/default/web/layouts/journeys/_partials/journeys-all.html b/themes/default/web/layouts/journeys/_partials/journeys-all.html new file mode 100644 index 0000000..92ab184 --- /dev/null +++ b/themes/default/web/layouts/journeys/_partials/journeys-all.html @@ -0,0 +1,103 @@ +{{define "journeys_all"}} +
+ {{ if gt (len .ViewState.carpools) 0}} + {{$carpool := (index .ViewState.carpools 0)}} +
+
+ {{.IconSet.Icon "tabler-icons:car" "h-6 w-6 inline-flex mr-4"}} Covoiturage + {{if $carpool.days.monday}} + entre {{$carpool.outward.monday.mintime}} et {{$carpool.outward.monday.maxtime}} + {{else if $carpool.days.tuesday}} + entre {{$carpool.outward.tuesday.mintime}} et {{$carpool.outward.tuesday.maxtime}} + {{else if $carpool.days.wednesday}} + entre {{$carpool.outward.wednesday.mintime}} et {{$carpool.outward.wednesday.maxtime}} + {{else if $carpool.days.thursday}} + entre {{$carpool.outward.thursday.mintime}} et {{$carpool.outward.thursday.maxtime}} + {{else if $carpool.days.friday}} + entre {{$carpool.outward.friday.mintime}} et {{$carpool.outward.friday.maxtime}} + {{else if $carpool.days.saturday}} + entre {{$carpool.outward.saturday.mintime}} et {{$carpool.outward.saturday.maxtime}} + {{else if $carpool.days.sunday}} + entre {{$carpool.outward.sunday.mintime}} et {{$carpool.outward.sunday.maxtime}} + {{end}} + (Temps trajet : {{divideFloat64 $carpool.duration 60.0 | printf "%.0f"}} Minutes) +
+
+ + RIDYGO + +
+
+ +
+ + {{$carpool.from.address}}, {{$carpool.from.city}} + + {{$.IconSet.Icon "hero:outline/chevron-right" "h-3 w-3 stroke-gray-800 m-2"}} + + {{$carpool.to.address}}, {{$carpool.to.city}} + +
+ +
+ Conducteur : + + {{$carpool.driver.alias}} + +
+ +
+ +
+ + + {{end}} + + +
+
+ {{.IconSet.Icon "tabler-icons:bus" "h-6 w-6 inline-flex mr-4"}} + {{(timeFrom (index .ViewState.journeys.Journeys 0).Departure).Format "15:04"}} - {{(timeFrom (index .ViewState.journeys.Journeys 0).Arrival).Format "15:04"}} + ({{(index .ViewState.journeys.Journeys 0).Duration.Minutes | printf "%.0f"}} Minutes) +
+
+
+
+ {{$firstwalk := true}} + {{range (index .ViewState.journeys.Journeys 0).Sections}} + {{if eq .Type "street_network"}} + + {{$.IconSet.Icon "tabler-icons:walk" "h-4 w-4 stroke-gray-800"}} + + {{if $firstwalk}} + {{$firstwalk = false}} + {{$.IconSet.Icon "hero:outline/chevron-right" "h-3 w-3 stroke-gray-800 m-2"}} + {{end}} + {{end}} + {{if eq .Type "public_transport"}} + + {{if eq .Display.Network "Antibes"}}Envibus{{else}}{{.Display.Network}}{{end}} Ligne {{.Display.Label}} + + {{$.IconSet.Icon "hero:outline/chevron-right" "h-3 w-3 stroke-gray-800 m-2"}} + {{end}} + {{end}} +
+ +
+
+ +
+ + +
+
+ {{.IconSet.Icon "tabler-icons:car" "h-6 w-6 inline-flex mr-4"}} + {{len .ViewState.vehicles}} véhicules partagés disponibles ce jour là et la semaine suivante +
+
+
+
+ +
+
+{{end}} \ No newline at end of file diff --git a/themes/default/web/layouts/journeys/_partials/journeys-carpool.html b/themes/default/web/layouts/journeys/_partials/journeys-carpool.html new file mode 100644 index 0000000..acf140a --- /dev/null +++ b/themes/default/web/layouts/journeys/_partials/journeys-carpool.html @@ -0,0 +1,52 @@ +{{define "journeys_carpool"}} + +{{$first := true}} +{{range .ViewState.carpools}} +{{if $first}} +{{$first = false}} +
+{{else}} +
+{{end}} +
+ {{if .days.monday}} +
Départ entre {{.outward.monday.mintime}} et {{.outward.monday.maxtime}}
+ {{else if .days.tuesday}} +
Départ entre {{.outward.tuesday.mintime}} et {{.outward.tuesday.maxtime}}
+ {{else if .days.wednesday}} +
Départ entre {{.outward.wednesday.mintime}} et {{.outward.wednesday.maxtime}}
+ {{else if .days.thursday}} +
Départ entre {{.outward.thursday.mintime}} et {{.outward.thursday.maxtime}}
+ {{else if .days.friday}} +
Départ entre {{.outward.friday.mintime}} et {{.outward.friday.maxtime}}
+ {{else if .days.saturday}} +
Départ entre {{.outward.saturday.mintime}} et {{.outward.saturday.maxtime}}
+ {{else if .days.sunday}} +
Départ entre {{.outward.sunday.mintime}} et {{.outward.sunday.maxtime}}
+ {{end}} +
{{divideFloat64 .duration 60.0 | printf "%.0f"}} Minutes
+
+
+ + {{.from.address}}, {{.from.city}} + + {{$.IconSet.Icon "hero:outline/chevron-right" "h-3 w-3 stroke-gray-800 m-2"}} + + {{.to.address}}, {{.to.city}} + +
+ +
+ Avec + + {{.driver.alias}} + + + sur l'application + + RIDYGO + +
+
+{{end}} +{{end}} \ No newline at end of file diff --git a/themes/default/web/layouts/journeys/_partials/journeys-others.html b/themes/default/web/layouts/journeys/_partials/journeys-others.html new file mode 100644 index 0000000..39f2176 --- /dev/null +++ b/themes/default/web/layouts/journeys/_partials/journeys-others.html @@ -0,0 +1,38 @@ +{{define "journeys_others"}} + + +
+
+ {{.IconSet.Icon "tabler-icons:car" "h-6 w-6 inline-flex mr-4"}} + {{len .ViewState.vehicles}} véhicules partagés disponibles ce jour là et la semaine suivante +
+
+
+
+
+ + + + + + + + + + + {{range .ViewState.vehicles}} + + + + + + + {{end}} + +
VéhiculeNuméroGestionnaireLieu
{{.Data.name}}{{.Data.licence_plate}}COOPGO{{if .Data.address}}{{.Data.address.properties.label}}{{end}}
+
+
+ +
+ +{{end}} \ No newline at end of file diff --git a/themes/default/web/layouts/journeys/_partials/journeys-public-transit.html b/themes/default/web/layouts/journeys/_partials/journeys-public-transit.html new file mode 100644 index 0000000..5447076 --- /dev/null +++ b/themes/default/web/layouts/journeys/_partials/journeys-public-transit.html @@ -0,0 +1,77 @@ +{{define "journeys_public_transit"}} + +{{$first := true}} +{{range .ViewState.journeys.Journeys}} +{{if $first}} +{{$first = false}} +
+{{else}} +
+{{end}} +
+
{{(timeFrom .Departure).Format "15:04"}} - {{(timeFrom .Arrival).Format "15:04"}}
+
{{.Duration.Minutes | printf "%.0f"}} Minutes
+
+
+ + +
+
+{{end}} +{{end}} \ No newline at end of file diff --git a/themes/default/web/layouts/journeys/search.html b/themes/default/web/layouts/journeys/search.html new file mode 100644 index 0000000..bbe6f8f --- /dev/null +++ b/themes/default/web/layouts/journeys/search.html @@ -0,0 +1,120 @@ +{{define "content"}} +
+

Déplacements

+ + +
+
+
+

Chercher une solution

+
+
+ + {{ $departureField := "departure" }} + {{ $departureLabel := "Départ" }} + {{ $departure := .ViewState.departure }} + {{ template "address_autocomplete" dict "FieldName" $departureField "FieldLabel" $departureLabel "Address" $departure }} + + {{ $destinationField := "destination" }} + {{ $destinationLabel := "Destination" }} + {{ $destination := .ViewState.destination }} + {{ template "address_autocomplete" dict "FieldName" $destinationField "FieldLabel" $destinationLabel "Address" $destination }} + + +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+
+
+
+ {{if .ViewState.searched}} +
+
+
+
+
+ + +
+ +
+ +
{{template "journeys_all" .}}
+
{{template "journeys_carpool" .}}
+
{{template "journeys_public_transit" .}}
+
{{template "journeys_others" .}}
+
+
+
+ {{end}} +
+
+
+{{end}} \ No newline at end of file diff --git a/themes/default/layouts/layout.html b/themes/default/web/layouts/layout.html similarity index 97% rename from themes/default/layouts/layout.html rename to themes/default/web/layouts/layout.html index 21d534b..2e27174 100644 --- a/themes/default/layouts/layout.html +++ b/themes/default/web/layouts/layout.html @@ -118,8 +118,8 @@ x-transition:leave-start="transform opacity-100 scale-100" x-transition:leave-end="transform opacity-0 scale-95"> - + Paramètres Changer d'organisation diff --git a/themes/default/layouts/vehicles/booking-display.html b/themes/default/web/layouts/vehicles/booking-display.html similarity index 100% rename from themes/default/layouts/vehicles/booking-display.html rename to themes/default/web/layouts/vehicles/booking-display.html diff --git a/themes/default/layouts/vehicles/bookings-list.html b/themes/default/web/layouts/vehicles/bookings-list.html similarity index 100% rename from themes/default/layouts/vehicles/bookings-list.html rename to themes/default/web/layouts/vehicles/bookings-list.html diff --git a/themes/default/layouts/vehicles/search.html b/themes/default/web/layouts/vehicles/search.html similarity index 100% rename from themes/default/layouts/vehicles/search.html rename to themes/default/web/layouts/vehicles/search.html diff --git a/themes/default/layouts/vehicles_management/_partials/bookings-list.html b/themes/default/web/layouts/vehicles_management/_partials/bookings-list.html similarity index 100% rename from themes/default/layouts/vehicles_management/_partials/bookings-list.html rename to themes/default/web/layouts/vehicles_management/_partials/bookings-list.html diff --git a/themes/default/layouts/vehicles_management/_partials/calendar.html b/themes/default/web/layouts/vehicles_management/_partials/calendar.html similarity index 100% rename from themes/default/layouts/vehicles_management/_partials/calendar.html rename to themes/default/web/layouts/vehicles_management/_partials/calendar.html diff --git a/themes/default/layouts/vehicles_management/_partials/vehicle-type-select.html b/themes/default/web/layouts/vehicles_management/_partials/vehicle-type-select.html similarity index 54% rename from themes/default/layouts/vehicles_management/_partials/vehicle-type-select.html rename to themes/default/web/layouts/vehicles_management/_partials/vehicle-type-select.html index 316bdc6..eaadfa0 100644 --- a/themes/default/layouts/vehicles_management/_partials/vehicle-type-select.html +++ b/themes/default/web/layouts/vehicles_management/_partials/vehicle-type-select.html @@ -40,6 +40,48 @@ +
  • + + Voiture sans permis + + + +
  • +
  • + + Scooter + + + +
  • +
  • + + Trotinette + + + +
  • diff --git a/themes/default/layouts/vehicles_management/_partials/vehicles-list.html b/themes/default/web/layouts/vehicles_management/_partials/vehicles-list.html similarity index 100% rename from themes/default/layouts/vehicles_management/_partials/vehicles-list.html rename to themes/default/web/layouts/vehicles_management/_partials/vehicles-list.html diff --git a/themes/default/layouts/vehicles_management/booking-display.html b/themes/default/web/layouts/vehicles_management/booking-display.html similarity index 100% rename from themes/default/layouts/vehicles_management/booking-display.html rename to themes/default/web/layouts/vehicles_management/booking-display.html diff --git a/themes/default/layouts/vehicles_management/fleet-add.html b/themes/default/web/layouts/vehicles_management/fleet-add.html similarity index 100% rename from themes/default/layouts/vehicles_management/fleet-add.html rename to themes/default/web/layouts/vehicles_management/fleet-add.html diff --git a/themes/default/layouts/vehicles_management/fleet-display.html b/themes/default/web/layouts/vehicles_management/fleet-display.html similarity index 100% rename from themes/default/layouts/vehicles_management/fleet-display.html rename to themes/default/web/layouts/vehicles_management/fleet-display.html diff --git a/themes/default/layouts/vehicles_management/fleet-update.html b/themes/default/web/layouts/vehicles_management/fleet-update.html similarity index 100% rename from themes/default/layouts/vehicles_management/fleet-update.html rename to themes/default/web/layouts/vehicles_management/fleet-update.html diff --git a/themes/default/layouts/vehicles_management/overview.html b/themes/default/web/layouts/vehicles_management/overview.html similarity index 100% rename from themes/default/layouts/vehicles_management/overview.html rename to themes/default/web/layouts/vehicles_management/overview.html diff --git a/themes/default/public/css/main.css b/themes/default/web/public/css/main.css similarity index 96% rename from themes/default/public/css/main.css rename to themes/default/web/public/css/main.css index 274cdee..2ef3532 100644 --- a/themes/default/public/css/main.css +++ b/themes/default/web/public/css/main.css @@ -798,6 +798,14 @@ html { left: 0px; } +.top-4 { + top: 1rem; +} + +.left-4 { + left: 1rem; +} + .z-40 { z-index: 40; } @@ -826,6 +834,10 @@ html { grid-column: span 5 / span 5; } +.m-2 { + margin: 0.5rem; +} + .mx-auto { margin-left: auto; margin-right: auto; @@ -961,6 +973,18 @@ html { margin-top: -0.5rem; } +.-mb-8 { + margin-bottom: -2rem; +} + +.-ml-px { + margin-left: -1px; +} + +.ml-16 { + margin-left: 4rem; +} + .-mr-1\.5 { margin-right: -0.375rem; } @@ -993,6 +1017,10 @@ html { display: table; } +.flow-root { + display: flow-root; +} + .grid { display: grid; } @@ -1037,6 +1065,10 @@ html { height: 3rem; } +.h-3 { + height: 0.75rem; +} + .max-h-60 { max-height: 15rem; } @@ -1093,6 +1125,18 @@ html { width: 3rem; } +.w-3 { + width: 0.75rem; +} + +.w-0\.5 { + width: 0.125rem; +} + +.w-0 { + width: 0px; +} + .min-w-0 { min-width: 0px; } @@ -1195,6 +1239,12 @@ html { user-select: none; } +.appearance-none { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + .grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } @@ -1338,6 +1388,12 @@ html { margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); } +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + .space-y-reverse > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 1; } @@ -1451,6 +1507,11 @@ html { border-bottom-left-radius: 1rem; } +.rounded-l { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + .border { border-width: 1px; } @@ -1479,6 +1540,10 @@ html { border-left-width: 0px; } +.border-t-2 { + border-top-width: 2px; +} + .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); @@ -1577,6 +1642,14 @@ html { --tw-bg-opacity: 0.75; } +.stroke-gray-800 { + stroke: #1f2937; +} + +.stroke-white { + stroke: #fff; +} + .p-12 { padding: 3rem; } @@ -1597,6 +1670,10 @@ html { padding: 0.375rem; } +.p-3 { + padding: 0.75rem; +} + .px-4 { padding-left: 1rem; padding-right: 1rem; @@ -1728,6 +1805,26 @@ html { padding-right: 0.5rem; } +.pt-4 { + padding-top: 1rem; +} + +.pb-8 { + padding-bottom: 2rem; +} + +.pt-16 { + padding-top: 4rem; +} + +.pt-1\.5 { + padding-top: 0.375rem; +} + +.pt-1 { + padding-top: 0.25rem; +} + .pl-1\.5 { padding-left: 0.375rem; } @@ -1827,6 +1924,10 @@ html { letter-spacing: 0.025em; } +.tracking-tight { + letter-spacing: -0.025em; +} + .text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); @@ -1882,6 +1983,11 @@ html { color: rgb(75 85 99 / var(--tw-text-opacity)); } +.text-black { + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity)); +} + .placeholder-gray-500::-moz-placeholder { --tw-placeholder-opacity: 1; color: rgb(107 114 128 / var(--tw-placeholder-opacity)); @@ -1897,6 +2003,21 @@ html { color: rgb(107 114 128 / var(--tw-placeholder-opacity)); } +.placeholder-gray-400::-moz-placeholder { + --tw-placeholder-opacity: 1; + color: rgb(156 163 175 / var(--tw-placeholder-opacity)); +} + +.placeholder-gray-400:-ms-input-placeholder { + --tw-placeholder-opacity: 1; + color: rgb(156 163 175 / var(--tw-placeholder-opacity)); +} + +.placeholder-gray-400::placeholder { + --tw-placeholder-opacity: 1; + color: rgb(156 163 175 / var(--tw-placeholder-opacity)); +} + .opacity-0 { opacity: 0; } @@ -1947,6 +2068,12 @@ html { box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } +.ring-8 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + .ring-black { --tw-ring-opacity: 1; --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); @@ -2410,6 +2537,11 @@ html { padding-bottom: 1.25rem; } + .sm\:px-10 { + padding-left: 2.5rem; + padding-right: 2.5rem; + } + .sm\:pl-6 { padding-left: 1.5rem; } diff --git a/themes/default/web/public/images/parcoursmob_logo_bluered.svg b/themes/default/web/public/images/parcoursmob_logo_bluered.svg new file mode 100644 index 0000000..092d2ef --- /dev/null +++ b/themes/default/web/public/images/parcoursmob_logo_bluered.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/public/images/parcoursmob_logo_whitered.svg b/themes/default/web/public/images/parcoursmob_logo_whitered.svg similarity index 100% rename from themes/default/public/images/parcoursmob_logo_whitered.svg rename to themes/default/web/public/images/parcoursmob_logo_whitered.svg diff --git a/themes/default/public/js/main.js b/themes/default/web/public/js/main.js similarity index 100% rename from themes/default/public/js/main.js rename to themes/default/web/public/js/main.js diff --git a/themes/default/tailwind.config.js b/themes/default/web/tailwind.config.js similarity index 100% rename from themes/default/tailwind.config.js rename to themes/default/web/tailwind.config.js diff --git a/utils/profile-pictures/profile-pictures.go b/utils/profile-pictures/profile-pictures.go index 6a2db91..75dc9c4 100644 --- a/utils/profile-pictures/profile-pictures.go +++ b/utils/profile-pictures/profile-pictures.go @@ -19,7 +19,7 @@ func DefaultProfilePicture(initials string) *image.RGBA { draw.Draw(img, img.Bounds(), &image.Uniform{col}, image.Point{X: 0, Y: 0}, draw.Src) - ff, err := gg.LoadFontFace("themes/default/fonts/bitter.ttf", 150.0) + ff, err := gg.LoadFontFace("themes/default/web/fonts/bitter.ttf", 150.0) if err != nil { fmt.Println(err) return img