Initial commit

This commit is contained in:
2020-04-08 08:56:42 +02:00
commit 3a84d819ff
44 changed files with 1769 additions and 0 deletions

61
internal/hydra/client.go Normal file
View File

@ -0,0 +1,61 @@
package hydra
import (
"net/http"
"time"
)
type Client struct {
baseURL string
http *http.Client
}
func (c *Client) LoginRequest(challenge string) (*LoginResponse, error) {
return nil, nil
}
func (c *Client) Accept(challenge string) (*AcceptResponse, error) {
return nil, nil
}
func (c *Client) RejectRequest(challenge string) (*RejectResponse, error) {
return nil, nil
}
func (c *Client) LogoutRequest(challenge string) (*LogoutResponse, error) {
return nil, nil
}
func (c *Client) ConsentRequest(challenge string) (*ConsentResponse, error) {
return nil, nil
}
func (c *Client) LoginChallenge(r *http.Request) (string, error) {
return c.challenge(r, "login_challenge")
}
func (c *Client) ConsentChallenge(r *http.Request) (string, error) {
return c.challenge(r, "consent_challenge")
}
func (c *Client) LogoutChallenge(r *http.Request) (string, error) {
return c.challenge(r, "logout_challenge")
}
func (c *Client) challenge(r *http.Request, name string) (string, error) {
challenge := r.URL.Query().Get(name)
if challenge == "" {
return "", ErrChallengeNotFound
}
return challenge, nil
}
func NewClient(baseURL string, httpTimeout time.Duration) *Client {
return &Client{
baseURL: baseURL,
http: &http.Client{
Timeout: 30 * time.Second,
},
}
}

7
internal/hydra/error.go Normal file
View File

@ -0,0 +1,7 @@
package hydra
import "errors"
var (
ErrChallengeNotFound = errors.New("challenge not found")
)

View File

@ -0,0 +1,15 @@
package hydra
import (
"time"
"gitlab.com/wpetit/goweb/service"
)
func ServiceProvider(baseURL string, httpTimeout time.Duration) service.Provider {
client := NewClient(baseURL, httpTimeout)
return func(ctn *service.Container) (interface{}, error) {
return client, nil
}
}

View File

@ -0,0 +1,16 @@
package hydra
type LoginResponse struct {
}
type AcceptResponse struct {
}
type RejectResponse struct {
}
type LogoutResponse struct {
}
type ConsentResponse struct {
}

33
internal/hydra/service.go Normal file
View File

@ -0,0 +1,33 @@
package hydra
import (
"github.com/pkg/errors"
"gitlab.com/wpetit/goweb/service"
)
const ServiceName service.Name = "hydra"
// From retrieves the hydra service in the given container
func From(container *service.Container) (*Client, error) {
service, err := container.Service(ServiceName)
if err != nil {
return nil, errors.Wrapf(err, "error while retrieving '%s' service", ServiceName)
}
srv, ok := service.(*Client)
if !ok {
return nil, errors.Errorf("retrieved service is not a valid '%s' service", ServiceName)
}
return srv, nil
}
// Must retrieves the hydra service in the given container or panic otherwise
func Must(container *service.Container) *Client {
srv, err := From(container)
if err != nil {
panic(err)
}
return srv
}