54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"crypto/rand"
|
|
"crypto/sha256"
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"caos-test-op/mock"
|
|
"github.com/caos/oidc/pkg/op"
|
|
)
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
b := make([]byte, 32)
|
|
rand.Read(b)
|
|
|
|
port := "9998"
|
|
config := &op.Config{
|
|
Issuer: "http://dummy-oidc:9998",
|
|
CryptoKey: sha256.Sum256(b),
|
|
CodeMethodS256: true,
|
|
}
|
|
storage := mock.NewAuthStorage()
|
|
|
|
handler, err := op.NewOpenIDProvider(ctx, config, storage)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
router := handler.HttpHandler().(*mux.Router)
|
|
router.Methods("GET").Path("/login").HandlerFunc(HandleLogin)
|
|
server := &http.Server{
|
|
Addr: ":" + port,
|
|
Handler: router,
|
|
}
|
|
err = server.ListenAndServe()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
<-ctx.Done()
|
|
}
|
|
|
|
func HandleLogin(w http.ResponseWriter, r *http.Request) {
|
|
r.ParseForm()
|
|
requestId := r.Form.Get("id")
|
|
// simulate user login and retrieve a token that indicates a successfully logged-in user
|
|
usertoken := requestId + ":usertoken"
|
|
|
|
http.Redirect(w, r, "/authorize/callback?id="+usertoken, http.StatusFound)
|
|
}
|