80 lines
2.5 KiB
Go
80 lines
2.5 KiB
Go
package cas
|
|
|
|
import (
|
|
"net/url"
|
|
"path"
|
|
)
|
|
|
|
// URLScheme creates the url which are required to handle the cas protocol.
|
|
type URLScheme interface {
|
|
Login() (*url.URL, error)
|
|
Logout() (*url.URL, error)
|
|
Validate() (*url.URL, error)
|
|
ServiceValidate() (*url.URL, error)
|
|
RestGrantingTicket() (*url.URL, error)
|
|
RestServiceTicket(tgt string) (*url.URL, error)
|
|
RestLogout(tgt string) (*url.URL, error)
|
|
}
|
|
|
|
// NewDefaultURLScheme creates a URLScheme which uses the cas default urls
|
|
func NewDefaultURLScheme(base *url.URL) *DefaultURLScheme {
|
|
return &DefaultURLScheme{
|
|
base: base,
|
|
LoginPath: "login",
|
|
LogoutPath: "logout",
|
|
ValidatePath: "validate",
|
|
ServiceValidatePath: "serviceValidate",
|
|
RestEndpoint: path.Join("v1", "tickets"),
|
|
}
|
|
}
|
|
|
|
// DefaultURLScheme is a configurable URLScheme. Use NewDefaultURLScheme to create DefaultURLScheme with the default cas
|
|
// urls.
|
|
type DefaultURLScheme struct {
|
|
base *url.URL
|
|
LoginPath string
|
|
LogoutPath string
|
|
ValidatePath string
|
|
ServiceValidatePath string
|
|
RestEndpoint string
|
|
}
|
|
|
|
// Login returns the url for the cas login page
|
|
func (scheme *DefaultURLScheme) Login() (*url.URL, error) {
|
|
return scheme.createURL(scheme.LoginPath)
|
|
}
|
|
|
|
// Logout returns the url for the cas logut page
|
|
func (scheme *DefaultURLScheme) Logout() (*url.URL, error) {
|
|
return scheme.createURL(scheme.LogoutPath)
|
|
}
|
|
|
|
// Validate returns the url for the request validation endpoint
|
|
func (scheme *DefaultURLScheme) Validate() (*url.URL, error) {
|
|
return scheme.createURL(scheme.ValidatePath)
|
|
}
|
|
|
|
// ServiceValidate returns the url for the service validation endpoint
|
|
func (scheme *DefaultURLScheme) ServiceValidate() (*url.URL, error) {
|
|
return scheme.createURL(scheme.ServiceValidatePath)
|
|
}
|
|
|
|
// RestGrantingTicket returns the url for requesting an granting ticket via rest api
|
|
func (scheme *DefaultURLScheme) RestGrantingTicket() (*url.URL, error) {
|
|
return scheme.createURL(scheme.RestEndpoint)
|
|
}
|
|
|
|
// RestServiceTicket returns the url for requesting an service ticket via rest api
|
|
func (scheme *DefaultURLScheme) RestServiceTicket(tgt string) (*url.URL, error) {
|
|
return scheme.createURL(path.Join(scheme.RestEndpoint, tgt))
|
|
}
|
|
|
|
// RestLogout returns the url for destroying an granting ticket via rest api
|
|
func (scheme *DefaultURLScheme) RestLogout(tgt string) (*url.URL, error) {
|
|
return scheme.createURL(path.Join(scheme.RestEndpoint, tgt))
|
|
}
|
|
|
|
func (scheme *DefaultURLScheme) createURL(urlPath string) (*url.URL, error) {
|
|
return scheme.base.Parse(path.Join(scheme.base.Path, urlPath))
|
|
}
|