Lukas Heiligenbrunner
059b0af6e7
implement custom clientstore add new Password page if password is set force entering password to successfully receive the token add a new unsafe api call for init call only
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
package oauth
|
|
|
|
import (
|
|
"gopkg.in/oauth2.v3/errors"
|
|
"gopkg.in/oauth2.v3/manage"
|
|
//"gopkg.in/oauth2.v3/models"
|
|
"gopkg.in/oauth2.v3/server"
|
|
"gopkg.in/oauth2.v3/store"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
var srv *server.Server
|
|
|
|
func InitOAuth() {
|
|
manager := manage.NewDefaultManager()
|
|
// token store
|
|
manager.MustTokenStorage(store.NewMemoryTokenStore())
|
|
|
|
//clientStore := store.NewClientStore()
|
|
//// todo we need to check here if a password is enabled in db -- when yes set it here!
|
|
//clientStore.Set("openmediacenter", &models.Client{
|
|
// ID: "openmediacenter",
|
|
// Secret: "openmediacenter",
|
|
// Domain: "http://localhost:8081",
|
|
//})
|
|
//
|
|
//manager.MapClientStorage(clientStore)
|
|
|
|
strtest := NewCustomStore()
|
|
manager.MapClientStorage(strtest)
|
|
|
|
srv = server.NewServer(server.NewConfig(), manager)
|
|
srv.SetClientInfoHandler(server.ClientFormHandler)
|
|
manager.SetRefreshTokenCfg(manage.DefaultRefreshTokenCfg)
|
|
|
|
srv.SetInternalErrorHandler(func(err error) (re *errors.Response) {
|
|
log.Println("Internal Error:", err.Error())
|
|
return
|
|
})
|
|
|
|
srv.SetResponseErrorHandler(func(re *errors.Response) {
|
|
log.Println("Response Error:", re.Error.Error())
|
|
})
|
|
|
|
http.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) {
|
|
err := srv.HandleAuthorizeRequest(w, r)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
}
|
|
})
|
|
|
|
http.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) {
|
|
err := srv.HandleTokenRequest(w, r)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
}
|
|
})
|
|
}
|
|
|
|
func ValidateToken(f http.HandlerFunc) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
_, err := srv.ValidationBearerToken(r)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
f.ServeHTTP(w, r)
|
|
}
|
|
}
|