add secure requests with tokens.
generate new token on every new page load
This commit is contained in:
		
							
								
								
									
										67
									
								
								apiGo/api/oauth/Oauth.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								apiGo/api/oauth/Oauth.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
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)
 | 
			
		||||
	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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user