diff --git a/dockerfiles/dind/Dockerfile b/dockerfiles/dind/Dockerfile index ad828a3..2fd4d18 100644 --- a/dockerfiles/dind/Dockerfile +++ b/dockerfiles/dind/Dockerfile @@ -10,17 +10,17 @@ ENV PATH $PATH:$GOPATH ENV DOCKER_TLS_CERTDIR="" ENV DOCKER_CLI_EXPERIMENTAL=enabled -ENV DOCKERAPP_VERSION=v0.9.1-beta3 -ENV COMPOSE_VERSION=1.26.0 +ENV COMPOSE_VERSION=2.6.1 -RUN pip install docker-compose==${COMPOSE_VERSION} -RUN curl -fsSL --output /tmp/docker-app-linux.tar.gz https://github.com/docker/app/releases/download/${DOCKERAPP_VERSION}/docker-app-linux.tar.gz \ - && tar xf "/tmp/docker-app-linux.tar.gz" -C /tmp/ && mkdir -p /root/.docker/cli-plugins && mv /tmp/docker-app-plugin-linux /root/.docker/cli-plugins/docker-app && rm /tmp/docker-app* +# Add bash completion and set bash as default shell +RUN mkdir -p /usr/lib/docker/cli-plugins \ + && curl -LsS https://github.com/docker/compose/releases/download/v$COMPOSE_VERSION/docker-compose-linux-x86_64 -o /usr/lib/docker/cli-plugins/docker-compose \ + && chmod +x /usr/lib/docker/cli-plugins/docker-compose # Add bash completion and set bash as default shell RUN mkdir /etc/bash_completion.d \ - && curl https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker -o /etc/bash_completion.d/docker \ + && curl -sS https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker -o /etc/bash_completion.d/docker \ && sed -i "s/ash/bash/" /etc/passwd # Replace modprobe with a no-op to get rid of spurious warnings diff --git a/handlers/bootstrap.go b/handlers/bootstrap.go index 61135d8..70deb69 100644 --- a/handlers/bootstrap.go +++ b/handlers/bootstrap.go @@ -33,9 +33,11 @@ import ( "google.golang.org/api/people/v1" ) -var core pwd.PWDApi -var e event.EventApi -var landings = map[string][]byte{} +var ( + core pwd.PWDApi + e event.EventApi + landings = map[string][]byte{} +) //go:embed www/* var embeddedFiles embed.FS @@ -53,7 +55,6 @@ type HandlerExtender func(h *mux.Router) func init() { prometheus.MustRegister(latencyHistogramVec) staticFiles, _ = fs.Sub(embeddedFiles, "www") - } func Bootstrap(c pwd.PWDApi, ev event.EventApi) { @@ -278,8 +279,8 @@ func initOauthProviders(p *types.Playground) { ClientSecret: p.DockerClientSecret, Scopes: []string{"openid"}, Endpoint: oauth2.Endpoint{ - AuthURL: fmt.Sprintf("https://%s/id/oauth/authorize/", endpoint), - TokenURL: fmt.Sprintf("https://%s/id/oauth/token", endpoint), + AuthURL: fmt.Sprintf("https://%s/authorize/", endpoint), + TokenURL: fmt.Sprintf("https://%s/oauth/token", endpoint), }, } diff --git a/handlers/login.go b/handlers/login.go index 72cba5a..a3cf7aa 100644 --- a/handlers/login.go +++ b/handlers/login.go @@ -162,7 +162,6 @@ func LoginCallback(rw http.ResponseWriter, req *http.Request) { } person, err := p.People.Get("people/me").PersonFields("emailAddresses,names").Do() - if err != nil { log.Printf("Could not initialize people service . Got: %v\n", err) rw.WriteHeader(http.StatusInternalServerError) @@ -180,23 +179,23 @@ func LoginCallback(rw http.ResponseWriter, req *http.Request) { tc := oauth2.NewClient(ctx, ts) endpoint := getDockerEndpoint(playground) - resp, err := tc.Get(fmt.Sprintf("https://%s/api/id/v1/openid/userinfo", endpoint)) + resp, err := tc.Get(fmt.Sprintf("https://%s/userinfo", endpoint)) if err != nil { log.Printf("Could not get user from docker. Got: %v\n", err) rw.WriteHeader(http.StatusInternalServerError) return } - userInfo := map[string]string{} + userInfo := map[string]interface{}{} if err := json.NewDecoder(resp.Body).Decode(&userInfo); err != nil { log.Printf("Could not decode user info. Got: %v\n", err) rw.WriteHeader(http.StatusInternalServerError) return } - user.ProviderUserId = userInfo["sub"] - user.Name = userInfo["preferred_username"] - user.Email = userInfo["email"] + user.ProviderUserId = strings.Split(userInfo["sub"].(string), "|")[1] + user.Name = userInfo["https://hub.docker.com"].(map[string]interface{})["username"].(string) + user.Email = userInfo["https://hub.docker.com"].(map[string]interface{})["email"].(string) // Since DockerID doesn't return a user avatar, we try with twitter through avatars.io // Worst case we get a generic avatar user.Avatar = fmt.Sprintf("https://avatars.io/twitter/%s", user.Name) @@ -262,5 +261,5 @@ func getDockerEndpoint(p *types.Playground) string { if len(p.DockerHost) > 0 { return p.DockerHost } - return "id.docker.com" + return "login.docker.com" }