2019-02-18 14:57:54 +01:00
|
|
|
/*
|
|
|
|
Copyright (C) JSC iCore - All Rights Reserved
|
|
|
|
|
|
|
|
Unauthorized copying of this file, via any medium is strictly prohibited
|
|
|
|
Proprietary and confidential
|
|
|
|
*/
|
|
|
|
|
|
|
|
package hydra
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
// LoginReqDoer fetches information on the OAuth2 request and then accept or reject the requested authentication process.
|
|
|
|
type LoginReqDoer struct {
|
2019-05-15 14:03:05 +02:00
|
|
|
hydraURL string
|
|
|
|
rememberFor int
|
2019-02-18 14:57:54 +01:00
|
|
|
}
|
|
|
|
|
2019-05-15 14:03:05 +02:00
|
|
|
// NewLoginReqDoer creates a LoginRequest.
|
|
|
|
func NewLoginReqDoer(hydraURL string, rememberFor int) *LoginReqDoer {
|
|
|
|
return &LoginReqDoer{hydraURL: hydraURL, rememberFor: rememberFor}
|
2019-02-18 14:57:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// InitiateRequest fetches information on the OAuth2 request.
|
2019-05-15 14:03:05 +02:00
|
|
|
func (lrd *LoginReqDoer) InitiateRequest(challenge string) (*ReqInfo, error) {
|
2019-02-18 14:57:54 +01:00
|
|
|
ri, err := initiateRequest(login, lrd.hydraURL, challenge)
|
|
|
|
return ri, errors.Wrap(err, "failed to initiate login request")
|
|
|
|
}
|
|
|
|
|
2019-05-15 14:03:05 +02:00
|
|
|
// AcceptLoginRequest accepts the requested authentication process, and returns redirect URI.
|
|
|
|
func (lrd *LoginReqDoer) AcceptLoginRequest(challenge string, remember bool, subject string) (string, error) {
|
2019-02-18 14:57:54 +01:00
|
|
|
data := struct {
|
|
|
|
Remember bool `json:"remember"`
|
|
|
|
RememberFor int `json:"remember_for"`
|
|
|
|
Subject string `json:"subject"`
|
|
|
|
}{
|
|
|
|
Remember: remember,
|
2019-05-15 14:03:05 +02:00
|
|
|
RememberFor: lrd.rememberFor,
|
2019-02-18 14:57:54 +01:00
|
|
|
Subject: subject,
|
|
|
|
}
|
|
|
|
redirectURI, err := acceptRequest(login, lrd.hydraURL, challenge, data)
|
|
|
|
return redirectURI, errors.Wrap(err, "failed to accept login request")
|
|
|
|
}
|