Added CLI and more functionality

This commit is contained in:
David Allen 2024-02-21 17:51:59 -07:00
parent c04107cf3d
commit 053095c412
12 changed files with 199 additions and 92 deletions

15
internal/oauth/oauth.go Normal file
View file

@ -0,0 +1,15 @@
package oauth
type Client struct {
Id string
Secret string
Issuer string
}
func NewClient() *Client {
return &Client{
Id: "",
Secret: "",
Issuer: "",
}
}

BIN
internal/oidc/oidc-auth Executable file

Binary file not shown.

28
internal/oidc/oidc.go Normal file
View file

@ -0,0 +1,28 @@
package oidc
type OpenIDConnectProvider struct {
Host string
AuthorizeEndpoint string
TokenEndpoint string
ConfigEndpoint string
}
func NewOIDCProvider() *OpenIDConnectProvider {
return &OpenIDConnectProvider{
Host: "https://gitlab.newmexicoconsortium.org",
AuthorizeEndpoint: "/oauth/authorize",
TokenEndpoint: "/oauth/token",
}
}
func (oidc *OpenIDConnectProvider) GetAuthorizeUrl() string {
return oidc.Host + oidc.AuthorizeEndpoint
}
func (oidc *OpenIDConnectProvider) GetTokenUrl() string {
return oidc.Host + oidc.TokenEndpoint
}
func (oidc *OpenIDConnectProvider) FetchServerConfiguration(url string) {
// make a request to a server's openid-configuration
}

16
internal/server/server.go Normal file
View file

@ -0,0 +1,16 @@
package server
import (
"fmt"
"net/http"
)
func Start(host string, port int) error {
http.HandleFunc("/oauth/callback", getAuthorizationCode)
err := http.ListenAndServe(host+":"+fmt.Sprintf("%d", port), nil)
return err
}
func getAuthorizationCode(w http.ResponseWriter, r *http.Request) {
fmt.Printf("response from OIDC provider: %v\n", r)
}

39
internal/util/util.go Normal file
View file

@ -0,0 +1,39 @@
package util
import (
"math/rand"
"strings"
)
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
const (
letterIdxBits = 6 // 6 bits to represent a letter index
letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
)
func RandomString(n int) string {
b := make([]byte, n)
// A rand.Int63() generates 63 random bits, enough for letterIdxMax letters!
for i, cache, remain := n-1, rand.Int63(), letterIdxMax; i >= 0; {
if remain == 0 {
cache, remain = rand.Int63(), letterIdxMax
}
if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
b[i] = letterBytes[idx]
i--
}
cache >>= letterIdxBits
remain--
}
return string(b)
}
func BuildAuthorizationUrl(authEndpoint string, clientId string, redirectUri []string, state string, responseType string, scope []string) string {
return authEndpoint + "?" + "cilent_id=" + clientId +
"&redirect_url=" + strings.Join(redirectUri, ",") +
"&response_type=" + responseType +
"&state=" + state +
"&scope=" + strings.Join(scope, "+")
}