Initial commit
This commit is contained in:
61
internal/hydra/client.go
Normal file
61
internal/hydra/client.go
Normal 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
7
internal/hydra/error.go
Normal file
@ -0,0 +1,7 @@
|
||||
package hydra
|
||||
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
ErrChallengeNotFound = errors.New("challenge not found")
|
||||
)
|
15
internal/hydra/provider.go
Normal file
15
internal/hydra/provider.go
Normal 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
|
||||
}
|
||||
}
|
16
internal/hydra/response.go
Normal file
16
internal/hydra/response.go
Normal 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
33
internal/hydra/service.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user