55 lines
1.1 KiB
Go
55 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)
|
||
|
}
|