depot/go/openshiftauth/example/example.go
Luke Granger-Brown 04c3a8431b go/openshiftauth: init
This is a small "library" for wrapping binaries with magic OAuth authentication based on the automatically-injected k8s service account tokens and OpenShift's OAuth service.

There's an example of this deployed at https://example-lukegb-openshiftauth-test.apps.k8s.lukegb.tech/.

The main pieces of setup that need to happen is:

* Set "serviceAccount" in pod definition
* Add Route for pod
* Edit serviceaccount and add metadata.annotations, e.g.:
    serviceaccounts.openshift.io/oauth-redirectreference.first: >-
      {"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"example"}}
2020-10-04 14:38:56 +01:00

34 lines
750 B
Go

package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
"hg.lukegb.com/lukegb/depot/go/openshiftauth"
)
func main() {
r := mux.NewRouter()
authR, err := openshiftauth.NewRouter(r)
if err != nil {
log.Fatalf("openshiftauth.NewRouter: %v", err)
}
authR.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
u := openshiftauth.UserFromContext(r.Context())
rw.Header().Set("Content-Type", "application/json")
enc := json.NewEncoder(rw)
enc.SetIndent("", " ")
enc.Encode(u)
})
r.HandleFunc("/healthz", func(rw http.ResponseWriter, r *http.Request) {
rw.Header().Set("Content-Type", "text/plain")
fmt.Fprintf(rw, "ok")
})
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
}