add inspect to server, move Inspect from mgmt
This commit is contained in:
parent
309ecf89f5
commit
24f5b4b2d2
|
@ -14,12 +14,13 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"git.coolaj86.com/coolaj86/go-telebitd/log"
|
"git.coolaj86.com/coolaj86/go-telebitd/log"
|
||||||
|
"git.coolaj86.com/coolaj86/go-telebitd/mplexer/mgmt"
|
||||||
"git.coolaj86.com/coolaj86/go-telebitd/relay"
|
"git.coolaj86.com/coolaj86/go-telebitd/relay"
|
||||||
"git.coolaj86.com/coolaj86/go-telebitd/relay/api"
|
"git.coolaj86.com/coolaj86/go-telebitd/relay/api"
|
||||||
"git.coolaj86.com/coolaj86/go-telebitd/relay/mplexy"
|
"git.coolaj86.com/coolaj86/go-telebitd/relay/mplexy"
|
||||||
|
|
||||||
"github.com/caddyserver/certmagic"
|
"github.com/caddyserver/certmagic"
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
//jwt "github.com/dgrijalva/jwt-go"
|
||||||
"github.com/go-acme/lego/v3/providers/dns/duckdns"
|
"github.com/go-acme/lego/v3/providers/dns/duckdns"
|
||||||
lumberjack "gopkg.in/natefinch/lumberjack.v2"
|
lumberjack "gopkg.in/natefinch/lumberjack.v2"
|
||||||
|
|
||||||
|
@ -57,6 +58,8 @@ var (
|
||||||
acmeAgree bool
|
acmeAgree bool
|
||||||
acmeStaging bool
|
acmeStaging bool
|
||||||
allclients string
|
allclients string
|
||||||
|
authURL string
|
||||||
|
acmeRelay string
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -66,6 +69,8 @@ func init() {
|
||||||
flag.BoolVar(&acmeAgree, "acme-agree", false, "agree to the terms of the ACME service provider (required)")
|
flag.BoolVar(&acmeAgree, "acme-agree", false, "agree to the terms of the ACME service provider (required)")
|
||||||
flag.BoolVar(&acmeStaging, "staging", false, "get fake certificates for testing")
|
flag.BoolVar(&acmeStaging, "staging", false, "get fake certificates for testing")
|
||||||
flag.StringVar(&adminHostName, "admin-hostname", "", "the management domain")
|
flag.StringVar(&adminHostName, "admin-hostname", "", "the management domain")
|
||||||
|
flag.StringVar(&authURL, "auth-url", "http://localhost:3010/api", "the auth server url")
|
||||||
|
flag.StringVar(&acmeRelay, "acme-relay", "", "the ACME DNS-01 relay, if any")
|
||||||
flag.StringVar(&wssHostName, "wss-hostname", "", "the wss domain for connecting devices, if different from admin")
|
flag.StringVar(&wssHostName, "wss-hostname", "", "the wss domain for connecting devices, if different from admin")
|
||||||
flag.StringVar(&configPath, "config-path", configPath, "Configuration File Path")
|
flag.StringVar(&configPath, "config-path", configPath, "Configuration File Path")
|
||||||
flag.StringVar(&secretKey, "secret", "", "a >= 16-character random string for JWT key signing") // SECRET
|
flag.StringVar(&secretKey, "secret", "", "a >= 16-character random string for JWT key signing") // SECRET
|
||||||
|
@ -220,9 +225,12 @@ func main() {
|
||||||
tokenString = r.URL.Query().Get("access_token")
|
tokenString = r.URL.Query().Get("access_token")
|
||||||
}
|
}
|
||||||
|
|
||||||
tok, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
|
grants, err := mgmt.Inspect(authURL, tokenString)
|
||||||
return []byte(secretKey), nil
|
/*
|
||||||
})
|
tok, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
|
||||||
|
return []byte(secretKey), nil
|
||||||
|
})
|
||||||
|
*/
|
||||||
if nil != err {
|
if nil != err {
|
||||||
fmt.Println("return an error, do not go on")
|
fmt.Println("return an error, do not go on")
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -230,9 +238,11 @@ func main() {
|
||||||
fmt.Printf("client claims:\n%+v\n", tok.Claims)
|
fmt.Printf("client claims:\n%+v\n", tok.Claims)
|
||||||
|
|
||||||
domains := []string{}
|
domains := []string{}
|
||||||
for _, name := range tok.Claims.(jwt.MapClaims)["domains"].([]interface{}) {
|
/*
|
||||||
domains = append(domains, name.(string))
|
for _, name := range tok.Claims.(jwt.MapClaims)["domains"].([]interface{}) {
|
||||||
}
|
domains = append(domains, name.(string))
|
||||||
|
}
|
||||||
|
*/
|
||||||
authz := &mplexy.Authz{
|
authz := &mplexy.Authz{
|
||||||
Domains: domains,
|
Domains: domains,
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,14 +165,14 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
grants, err := mgmt.Inspect(*authURL, *token)
|
grants, err := telebit.Inspect(*authURL, *token)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
_, err := mgmt.Register(*authURL, *secret, ppid)
|
_, err := mgmt.Register(*authURL, *secret, ppid)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
fmt.Fprintf(os.Stderr, "failed to register client: %s", err)
|
fmt.Fprintf(os.Stderr, "failed to register client: %s", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
grants, err = mgmt.Inspect(*authURL, *token)
|
grants, err = telebit.Inspect(*authURL, *token)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
fmt.Fprintf(os.Stderr, "failed to authenticate after registering client: %s", err)
|
fmt.Fprintf(os.Stderr, "failed to authenticate after registering client: %s", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
TOKEN=$(go run cmd/signjwt/*.go)
|
||||||
|
echo "TOKEN: $TOKEN"
|
||||||
|
|
||||||
|
my_shared="k7nsLSwNKbOeBhDFpbhwGHv"
|
||||||
|
my_domain="duckdns.org"
|
||||||
|
my_client="rooted"
|
||||||
|
curl -X POST http://roottest.duckdns.org:3010/api/devices \
|
||||||
|
-H "Authorization: Bearer ${TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{ "slug": "'$my_client'", "shared_key": "'$my_shared'" }'
|
|
@ -10,10 +10,6 @@ import (
|
||||||
"git.coolaj86.com/coolaj86/go-telebitd/mplexer/mgmt/authstore"
|
"git.coolaj86.com/coolaj86/go-telebitd/mplexer/mgmt/authstore"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Grants struct {
|
|
||||||
Domains []string `json:"domains"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type SuccessResponse struct {
|
type SuccessResponse struct {
|
||||||
Success bool `json:"success"`
|
Success bool `json:"success"`
|
||||||
}
|
}
|
||||||
|
@ -37,23 +33,6 @@ func Ping(authURL, token string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Inspect(authURL, token string) (*Grants, error) {
|
|
||||||
msg, err := telebit.Request("GET", authURL+"/inspect", token, nil)
|
|
||||||
if nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if nil == msg {
|
|
||||||
return nil, fmt.Errorf("invalid response")
|
|
||||||
}
|
|
||||||
|
|
||||||
grants := &Grants{}
|
|
||||||
err = json.NewDecoder(msg).Decode(grants)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return grants, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Register(authURL, secret, ppid string) (kid string, err error) {
|
func Register(authURL, secret, ppid string) (kid string, err error) {
|
||||||
pub := authstore.ToPublicKeyString(ppid)
|
pub := authstore.ToPublicKeyString(ppid)
|
||||||
jsonb := bytes.NewBuffer([]byte(
|
jsonb := bytes.NewBuffer([]byte(
|
||||||
|
|
|
@ -3,6 +3,7 @@ package telebit
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
@ -258,6 +259,27 @@ func newCertMagic(acme *ACME) (*certmagic.Config, error) {
|
||||||
return magic, nil
|
return magic, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Grants struct {
|
||||||
|
Domains []string `json:"domains"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func Inspect(authURL, token string) (*Grants, error) {
|
||||||
|
msg, err := Request("GET", authURL+"/inspect", token, nil)
|
||||||
|
if nil != err {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if nil == msg {
|
||||||
|
return nil, fmt.Errorf("invalid response")
|
||||||
|
}
|
||||||
|
|
||||||
|
grants := &Grants{}
|
||||||
|
err = json.NewDecoder(msg).Decode(grants)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return grants, nil
|
||||||
|
}
|
||||||
|
|
||||||
func Request(method, fullurl, token string, payload io.Reader) (io.Reader, error) {
|
func Request(method, fullurl, token string, payload io.Reader) (io.Reader, error) {
|
||||||
HTTPClient := &http.Client{
|
HTTPClient := &http.Client{
|
||||||
Timeout: 15 * time.Second,
|
Timeout: 15 * time.Second,
|
||||||
|
|
Loading…
Reference in New Issue