chore: linting
parent
9433b97f5d
commit
051b54e45f
|
@ -821,13 +821,15 @@ const MappingWildcard string = "*"
|
|||
// explicit role within the organization.
|
||||
//
|
||||
// One can think of a mapping like so:
|
||||
// Provider:Scheme:Group -> Organization
|
||||
// github:oauth2:influxdata -> Happy
|
||||
// beyondcorp:ldap:influxdata -> TheBillHilliettas
|
||||
//
|
||||
// Provider:Scheme:Group -> Organization
|
||||
// github:oauth2:influxdata -> Happy
|
||||
// beyondcorp:ldap:influxdata -> TheBillHilliettas
|
||||
//
|
||||
// Any of Provider, Scheme, or Group may be provided as a wildcard *
|
||||
// github:oauth2:* -> MyOrg
|
||||
// *:*:* -> AllOrg
|
||||
//
|
||||
// github:oauth2:* -> MyOrg
|
||||
// *:*:* -> AllOrg
|
||||
type Mapping struct {
|
||||
ID string `json:"id"`
|
||||
Organization string `json:"organizationId"`
|
||||
|
|
|
@ -8,12 +8,13 @@
|
|||
//
|
||||
// Resources that are storable in a file are:
|
||||
// (CRUD refers to create, read, update, delete. An '_' means not supported)
|
||||
// Apps(layouts) - _R__
|
||||
// Dashboards - _RUD
|
||||
// Kapacitors - _RUD
|
||||
// Organizations - _R__
|
||||
// Protoboards - _R__
|
||||
// Sources - _RUD
|
||||
//
|
||||
// Apps(layouts) - _R__
|
||||
// Dashboards - _RUD
|
||||
// Kapacitors - _RUD
|
||||
// Organizations - _R__
|
||||
// Protoboards - _R__
|
||||
// Sources - _RUD
|
||||
//
|
||||
// Caution should be taken when editing resources provided via the filestore,
|
||||
// especially in a distributed environment as unexpected behavior may occur.
|
||||
|
|
152
oauth2/doc.go
152
oauth2/doc.go
|
@ -3,49 +3,49 @@
|
|||
//
|
||||
// This is how the pieces of this package fit together:
|
||||
//
|
||||
// ┌────────────────────────────────────────┐
|
||||
// │github.com/influxdata/chronograf/oauth2 │
|
||||
// ├────────────────────────────────────────┴────────────────────────────────────┐
|
||||
// │┌────────────────────┐ │
|
||||
// ││ <<interface>> │ ┌─────────────────────────┐ │
|
||||
// ││ Authenticator │ │ AuthMux │ │
|
||||
// │├────────────────────┤ ├─────────────────────────┤ │
|
||||
// ││Authorize() │ Auth │+SuccessURL : string │ │
|
||||
// ││Validate() ◀────────│+FailureURL : string │──────────┐ │
|
||||
// ||Expire() | |+Now : func() time.Time | | |
|
||||
// │└──────────△─────────┘ └─────────────────────────┘ | |
|
||||
// │ │ │ │ |
|
||||
// │ │ │ │ │
|
||||
// │ │ │ │ │
|
||||
// │ │ Provider│ │ │
|
||||
// │ │ ┌───┘ │ │
|
||||
// │┌──────────┴────────────┐ │ ▽ │
|
||||
// ││ Tokenizer │ │ ┌───────────────┐ │
|
||||
// │├───────────────────────┤ ▼ │ <<interface>> │ │
|
||||
// ││Create() │ ┌───────────────┐ │ OAuth2Mux │ │
|
||||
// ││ValidPrincipal() │ │ <<interface>> │ ├───────────────┤ │
|
||||
// │└───────────────────────┘ │ Provider │ │Login() │ │
|
||||
// │ ├───────────────┤ │Logout() │ │
|
||||
// │ │ID() │ │Callback() │ │
|
||||
// │ │Scopes() │ └───────────────┘ │
|
||||
// │ │Secret() │ │
|
||||
// │ │Authenticator()│ │
|
||||
// │ └───────────────┘ │
|
||||
// │ △ │
|
||||
// │ │ │
|
||||
// │ ┌─────────────────────────┼─────────────────────────┐ │
|
||||
// │ │ │ │ │
|
||||
// │ │ │ │ │
|
||||
// │ │ │ │ │
|
||||
// │ ┌───────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐│
|
||||
// │ │ Github │ │ Google │ │ Heroku ││
|
||||
// │ ├───────────────────────┤ ├──────────────────────┤ ├──────────────────────┤│
|
||||
// │ │+ClientID : string │ │+ClientID : string │ │+ClientID : string ││
|
||||
// │ │+ClientSecret : string │ │+ClientSecret : string│ │+ClientSecret : string││
|
||||
// │ │+Orgs : []string │ │+Domains : []string │ └──────────────────────┘│
|
||||
// │ └───────────────────────┘ │+RedirectURL : string │ │
|
||||
// │ └──────────────────────┘ │
|
||||
// └─────────────────────────────────────────────────────────────────────────────┘
|
||||
// ┌────────────────────────────────────────┐
|
||||
// │github.com/influxdata/chronograf/oauth2 │
|
||||
// ├────────────────────────────────────────┴────────────────────────────────────┐
|
||||
// │┌────────────────────┐ │
|
||||
// ││ <<interface>> │ ┌─────────────────────────┐ │
|
||||
// ││ Authenticator │ │ AuthMux │ │
|
||||
// │├────────────────────┤ ├─────────────────────────┤ │
|
||||
// ││Authorize() │ Auth │+SuccessURL : string │ │
|
||||
// ││Validate() ◀────────│+FailureURL : string │──────────┐ │
|
||||
// ||Expire() | |+Now : func() time.Time | | |
|
||||
// │└──────────△─────────┘ └─────────────────────────┘ | |
|
||||
// │ │ │ │ |
|
||||
// │ │ │ │ │
|
||||
// │ │ │ │ │
|
||||
// │ │ Provider│ │ │
|
||||
// │ │ ┌───┘ │ │
|
||||
// │┌──────────┴────────────┐ │ ▽ │
|
||||
// ││ Tokenizer │ │ ┌───────────────┐ │
|
||||
// │├───────────────────────┤ ▼ │ <<interface>> │ │
|
||||
// ││Create() │ ┌───────────────┐ │ OAuth2Mux │ │
|
||||
// ││ValidPrincipal() │ │ <<interface>> │ ├───────────────┤ │
|
||||
// │└───────────────────────┘ │ Provider │ │Login() │ │
|
||||
// │ ├───────────────┤ │Logout() │ │
|
||||
// │ │ID() │ │Callback() │ │
|
||||
// │ │Scopes() │ └───────────────┘ │
|
||||
// │ │Secret() │ │
|
||||
// │ │Authenticator()│ │
|
||||
// │ └───────────────┘ │
|
||||
// │ △ │
|
||||
// │ │ │
|
||||
// │ ┌─────────────────────────┼─────────────────────────┐ │
|
||||
// │ │ │ │ │
|
||||
// │ │ │ │ │
|
||||
// │ │ │ │ │
|
||||
// │ ┌───────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐│
|
||||
// │ │ Github │ │ Google │ │ Heroku ││
|
||||
// │ ├───────────────────────┤ ├──────────────────────┤ ├──────────────────────┤│
|
||||
// │ │+ClientID : string │ │+ClientID : string │ │+ClientID : string ││
|
||||
// │ │+ClientSecret : string │ │+ClientSecret : string│ │+ClientSecret : string││
|
||||
// │ │+Orgs : []string │ │+Domains : []string │ └──────────────────────┘│
|
||||
// │ └───────────────────────┘ │+RedirectURL : string │ │
|
||||
// │ └──────────────────────┘ │
|
||||
// └─────────────────────────────────────────────────────────────────────────────┘
|
||||
//
|
||||
// The design focuses on an Authenticator, a Provider, and an OAuth2Mux. Their
|
||||
// responsibilities, respectively, are to decode and encode secrets received
|
||||
|
@ -57,36 +57,36 @@
|
|||
// The Oauth2 flow between a browser, backend, and a Provider that this package
|
||||
// implements is pictured below for reference.
|
||||
//
|
||||
// ┌─────────┐ ┌───────────┐ ┌────────┐
|
||||
// │ Browser │ │Chronograf │ │Provider│
|
||||
// └─────────┘ └───────────┘ └────────┘
|
||||
// │ │ │
|
||||
// ├─────── GET /auth ─────────▶ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ◀ ─ ─ ─302 to Provider ─ ─ ┤ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ├──────────────── GET /auth w/ callback ─────────────────────▶
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ◀─ ─ ─ ─ ─ ─ ─ 302 to Chronograf Callback ─ ─ ─ ─ ─ ─ ─ ─ ┤
|
||||
// │ │ │
|
||||
// │ Code and State from │ │
|
||||
// │ Provider │ │
|
||||
// ├───────────────────────────▶ Request token w/ code & │
|
||||
// │ │ state │
|
||||
// │ ├────────────────────────────────▶
|
||||
// │ │ │
|
||||
// │ │ Response with │
|
||||
// │ │ Token │
|
||||
// │ Set cookie, Redirect │◀ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
|
||||
// │ to / │ │
|
||||
// ◀───────────────────────────┤ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ┌─────────┐ ┌───────────┐ ┌────────┐
|
||||
// │ Browser │ │Chronograf │ │Provider│
|
||||
// └─────────┘ └───────────┘ └────────┘
|
||||
// │ │ │
|
||||
// ├─────── GET /auth ─────────▶ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ◀ ─ ─ ─302 to Provider ─ ─ ┤ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ├──────────────── GET /auth w/ callback ─────────────────────▶
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// ◀─ ─ ─ ─ ─ ─ ─ 302 to Chronograf Callback ─ ─ ─ ─ ─ ─ ─ ─ ┤
|
||||
// │ │ │
|
||||
// │ Code and State from │ │
|
||||
// │ Provider │ │
|
||||
// ├───────────────────────────▶ Request token w/ code & │
|
||||
// │ │ state │
|
||||
// │ ├────────────────────────────────▶
|
||||
// │ │ │
|
||||
// │ │ Response with │
|
||||
// │ │ Token │
|
||||
// │ Set cookie, Redirect │◀ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
|
||||
// │ to / │ │
|
||||
// ◀───────────────────────────┤ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
// │ │ │
|
||||
//
|
||||
// The browser ultimately receives a cookie from Chronograf, authorizing it.
|
||||
// Its contents are encoded as a JWT whose "sub" claim is the user's email
|
||||
|
@ -102,14 +102,14 @@
|
|||
// convention to ensure compatibility with the front end logic. These routes
|
||||
// and their responsibilities are:
|
||||
//
|
||||
// /oauth/{provider}/login
|
||||
// /oauth/{provider}/login
|
||||
//
|
||||
// The `/oauth` endpoint redirects to the Provider for OAuth. Chronograf sets
|
||||
// the OAuth `state` request parameter to a JWT with a random "sub". Using
|
||||
// $TOKEN_SECRET `/oauth/github/callback` can validate the `state` parameter
|
||||
// without needing `state` to be saved.
|
||||
//
|
||||
// /oauth/{provider}/callback
|
||||
// /oauth/{provider}/callback
|
||||
//
|
||||
// The `/oauth/github/callback` receives the OAuth `authorization code` and `state`.
|
||||
//
|
||||
|
@ -135,7 +135,7 @@
|
|||
// of the JWT within the cookie value.
|
||||
// If the request did not have a valid JWT, the API returns `HTTP/1.1 401 Unauthorized`.
|
||||
//
|
||||
// /oauth/{provider}/logout
|
||||
// /oauth/{provider}/logout
|
||||
//
|
||||
// Simply expires the session cookie and redirects to `/`.
|
||||
package oauth2
|
||||
|
|
Loading…
Reference in New Issue