8 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/sessions"
9 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/requests"
12// AtlassianProvider represents an Atlassian Cloud based Identity Provider
13type AtlassianProvider struct {
17var _ Provider = (*AtlassianProvider)(nil)
20 atlassianProviderName = "Atlassian"
21 atlassianDefaultScope = "read:me"
22 atlassianPrompt = "consent"
23 atlassianAudience = "api.atlassian.com"
27 atlassianDefaultLoginURL = &url.URL{
29 Host: "auth.atlassian.com",
33 atlassianDefaultRedeemURL = &url.URL{
35 Host: "auth.atlassian.com",
39 // atlassianDefaultProfileURL returns the signed-in user's profile.
40 atlassianDefaultProfileURL = &url.URL{
42 Host: "api.atlassian.com",
47// NewAtlassianProvider initiates a new AtlassianProvider
48func NewAtlassianProvider(p *ProviderData) *AtlassianProvider {
49 p.setProviderDefaults(providerDefaults{
50 name: atlassianProviderName,
51 loginURL: atlassianDefaultLoginURL,
52 redeemURL: atlassianDefaultRedeemURL,
53 profileURL: atlassianDefaultProfileURL,
54 validateURL: atlassianDefaultProfileURL,
55 scope: atlassianDefaultScope,
57 return &AtlassianProvider{ProviderData: p}
60// GetLoginURL adds the audience and prompt parameters Atlassian requires.
61func (p *AtlassianProvider) GetLoginURL(redirectURI, state, _ string, extraParams url.Values) string {
62 params := url.Values{}
63 for k, v := range extraParams {
66 params.Del("approval_prompt")
67 if params.Get("prompt") == "" {
68 params.Set("prompt", atlassianPrompt)
70 params.Set("audience", atlassianAudience)
72 loginURL := makeLoginURL(p.ProviderData, redirectURI, state, params)
73 return loginURL.String()
76// EnrichSession sets the session's email from the Atlassian profile.
77func (p *AtlassianProvider) EnrichSession(ctx context.Context, s *sessions.SessionState) error {
79 Email string `json:"email"`
81 err := requests.New(p.ProfileURL.String()).
83 WithHeaders(makeOIDCHeader(s.AccessToken)).
85 UnmarshalInto(&profile)
89 if profile.Email == "" {
90 return errors.New("no email in Atlassian profile")
92 s.Email = profile.Email
96// ValidateSession validates the AccessToken
97func (p *AtlassianProvider) ValidateSession(ctx context.Context, s *sessions.SessionState) bool {
98 return validateToken(ctx, p, s.AccessToken, makeOIDCHeader(s.AccessToken))
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list