updates for auth API
This commit is contained in:
parent
0089dec42e
commit
850c52f9dc
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"terms_of_service": ":hostname/tos/",
|
||||||
|
"api_host": ":hostname/api",
|
||||||
|
"authn": {
|
||||||
|
"method": "GET",
|
||||||
|
"pathname": "inspect"
|
||||||
|
},
|
||||||
|
"pair_request": {
|
||||||
|
"method": "POST",
|
||||||
|
"pathname": "telebit.app/pair_request"
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/httputil"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
telebit "git.rootprojects.org/root/telebit"
|
telebit "git.rootprojects.org/root/telebit"
|
||||||
|
@ -20,7 +23,7 @@ import (
|
||||||
|
|
||||||
var httpsrv *http.Server
|
var httpsrv *http.Server
|
||||||
|
|
||||||
func init() {
|
func InitAdmin(authURL string) {
|
||||||
r := chi.NewRouter()
|
r := chi.NewRouter()
|
||||||
|
|
||||||
r.Use(func(next http.Handler) http.Handler {
|
r.Use(func(next http.Handler) http.Handler {
|
||||||
|
@ -39,6 +42,19 @@ func init() {
|
||||||
w.Write(apiPingContent)
|
w.Write(apiPingContent)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
parsedAuthURL, err := url.Parse(authURL)
|
||||||
|
if nil != err {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyHandler := httputil.NewSingleHostReverseProxy(parsedAuthURL)
|
||||||
|
proxyHandleFunc := func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
r.URL.Path = strings.TrimPrefix(r.URL.Path, "/api")
|
||||||
|
proxyHandler.ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
r.Get("/api/inspect", proxyHandleFunc)
|
||||||
|
r.Post("/api/register-device/*", proxyHandleFunc)
|
||||||
|
|
||||||
r.Route("/api", func(r chi.Router) {
|
r.Route("/api", func(r chi.Router) {
|
||||||
// TODO token needs a globally unique subject
|
// TODO token needs a globally unique subject
|
||||||
|
|
||||||
|
@ -69,7 +85,13 @@ func init() {
|
||||||
})
|
})
|
||||||
|
|
||||||
adminUI := http.FileServer(admin.AdminFS)
|
adminUI := http.FileServer(admin.AdminFS)
|
||||||
r.Get("/", adminUI.ServeHTTP)
|
r.Get("/*", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
//rctx := chi.RouteContext(r.Context())
|
||||||
|
//pathPrefix := strings.TrimSuffix(rctx.RoutePattern(), "/*")
|
||||||
|
//fs := http.StripPrefix(pathPrefix, http.FileServer(root))
|
||||||
|
fmt.Println("Request Path:", r.URL.Path)
|
||||||
|
adminUI.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
|
||||||
httpsrv = &http.Server{
|
httpsrv = &http.Server{
|
||||||
Handler: r,
|
Handler: r,
|
||||||
|
|
|
@ -311,7 +311,7 @@ func main() {
|
||||||
EnableTLSALPNChallenge: *enableTLSALPN01,
|
EnableTLSALPNChallenge: *enableTLSALPN01,
|
||||||
}
|
}
|
||||||
|
|
||||||
mux := muxAll(portForwards, forwards, acme, apiHostname, grants)
|
mux := muxAll(portForwards, forwards, acme, apiHostname, authURL, grants)
|
||||||
|
|
||||||
done := make(chan error)
|
done := make(chan error)
|
||||||
if dbg.Debug {
|
if dbg.Debug {
|
||||||
|
@ -385,7 +385,7 @@ func main() {
|
||||||
func muxAll(
|
func muxAll(
|
||||||
portForwards, forwards []Forward,
|
portForwards, forwards []Forward,
|
||||||
acme *telebit.ACME,
|
acme *telebit.ACME,
|
||||||
apiHostname *string,
|
apiHostname, authURL *string,
|
||||||
grants *telebit.Grants,
|
grants *telebit.Grants,
|
||||||
) *telebit.RouteMux {
|
) *telebit.RouteMux {
|
||||||
//mux := telebit.NewRouteMux(acme)
|
//mux := telebit.NewRouteMux(acme)
|
||||||
|
@ -405,6 +405,7 @@ func muxAll(
|
||||||
}
|
}
|
||||||
if "" != *apiHostname {
|
if "" != *apiHostname {
|
||||||
// this is a generic net listener
|
// this is a generic net listener
|
||||||
|
InitAdmin(*authURL)
|
||||||
apiListener := tunnel.NewListener()
|
apiListener := tunnel.NewListener()
|
||||||
go func() {
|
go func() {
|
||||||
httpsrv.Serve(apiListener)
|
httpsrv.Serve(apiListener)
|
||||||
|
|
Loading…
Reference in New Issue