From bea497ff96f4deae617e54468576d11d105e2125 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Mon, 2 Mar 2020 22:11:45 -0500 Subject: [PATCH] nextcloud oauth (#10562) Fix #7078 --- models/oauth2.go | 14 +- modules/auth/oauth2/oauth2.go | 23 ++ options/locale/locale_en-US.ini | 1 + public/img/auth/nextcloud.png | Bin 0 -> 2918 bytes templates/admin/auth/new.tmpl | 2 + .../goth/providers/nextcloud/README.md | 85 +++++++ .../goth/providers/nextcloud/nextcloud.go | 208 ++++++++++++++++++ .../providers/nextcloud/nextcloud_setup.png | Bin 0 -> 85944 bytes .../goth/providers/nextcloud/session.go | 63 ++++++ vendor/modules.txt | 1 + web_src/js/index.js | 2 + 11 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 public/img/auth/nextcloud.png create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/README.md create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/nextcloud_setup.png create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/session.go diff --git a/models/oauth2.go b/models/oauth2.go index ee3ea4b924..8164699d8d 100644 --- a/models/oauth2.go +++ b/models/oauth2.go @@ -51,15 +51,23 @@ var OAuth2Providers = map[string]OAuth2Provider{ ProfileURL: oauth2.GetDefaultProfileURL("gitea"), }, }, + "nextcloud": {Name: "nextcloud", DisplayName: "Nextcloud", Image: "/img/auth/nextcloud.png", + CustomURLMapping: &oauth2.CustomURLMapping{ + TokenURL: oauth2.GetDefaultTokenURL("nextcloud"), + AuthURL: oauth2.GetDefaultAuthURL("nextcloud"), + ProfileURL: oauth2.GetDefaultProfileURL("nextcloud"), + }, + }, } // OAuth2DefaultCustomURLMappings contains the map of default URL's for OAuth2 providers that are allowed to have custom urls // key is used to map the OAuth2Provider // value is the mapping as defined for the OAuth2Provider var OAuth2DefaultCustomURLMappings = map[string]*oauth2.CustomURLMapping{ - "github": OAuth2Providers["github"].CustomURLMapping, - "gitlab": OAuth2Providers["gitlab"].CustomURLMapping, - "gitea": OAuth2Providers["gitea"].CustomURLMapping, + "github": OAuth2Providers["github"].CustomURLMapping, + "gitlab": OAuth2Providers["gitlab"].CustomURLMapping, + "gitea": OAuth2Providers["gitea"].CustomURLMapping, + "nextcloud": OAuth2Providers["nextcloud"].CustomURLMapping, } // GetActiveOAuth2ProviderLoginSources returns all actived LoginOAuth2 sources diff --git a/modules/auth/oauth2/oauth2.go b/modules/auth/oauth2/oauth2.go index 20dfb15e81..193a87c4e8 100644 --- a/modules/auth/oauth2/oauth2.go +++ b/modules/auth/oauth2/oauth2.go @@ -22,6 +22,7 @@ import ( "github.com/markbates/goth/providers/github" "github.com/markbates/goth/providers/gitlab" "github.com/markbates/goth/providers/google" + "github.com/markbates/goth/providers/nextcloud" "github.com/markbates/goth/providers/openidConnect" "github.com/markbates/goth/providers/twitter" "github.com/satori/go.uuid" @@ -192,6 +193,22 @@ func createProvider(providerName, providerType, clientID, clientSecret, openIDCo } } provider = gitea.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL) + case "nextcloud": + authURL := nextcloud.AuthURL + tokenURL := nextcloud.TokenURL + profileURL := nextcloud.ProfileURL + if customURLMapping != nil { + if len(customURLMapping.AuthURL) > 0 { + authURL = customURLMapping.AuthURL + } + if len(customURLMapping.TokenURL) > 0 { + tokenURL = customURLMapping.TokenURL + } + if len(customURLMapping.ProfileURL) > 0 { + profileURL = customURLMapping.ProfileURL + } + } + provider = nextcloud.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL) } // always set the name if provider is created so we can support multiple setups of 1 provider @@ -211,6 +228,8 @@ func GetDefaultTokenURL(provider string) string { return gitlab.TokenURL case "gitea": return gitea.TokenURL + case "nextcloud": + return nextcloud.TokenURL } return "" } @@ -224,6 +243,8 @@ func GetDefaultAuthURL(provider string) string { return gitlab.AuthURL case "gitea": return gitea.AuthURL + case "nextcloud": + return nextcloud.AuthURL } return "" } @@ -237,6 +258,8 @@ func GetDefaultProfileURL(provider string) string { return gitlab.ProfileURL case "gitea": return gitea.ProfileURL + case "nextcloud": + return nextcloud.ProfileURL } return "" } diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index be478ad44b..90abac6f19 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1927,6 +1927,7 @@ auths.tips.oauth2.general = OAuth2 Authentication auths.tips.oauth2.general.tip = When registering a new OAuth2 authentication, the callback/redirect URL should be: /user/oauth2//callback auths.tip.oauth2_provider = OAuth2 Provider auths.tip.bitbucket = Register a new OAuth consumer on https://bitbucket.org/account/user//oauth-consumers/new and add the permission 'Account' - 'Read' +auths.tip.nextcloud = Register a new OAuth consumer on your instance using the following menu "Settings -> Security -> OAuth 2.0 client" auths.tip.dropbox = Create a new application at https://www.dropbox.com/developers/apps auths.tip.facebook = Register a new application at https://developers.facebook.com/apps and add the product "Facebook Login" auths.tip.github = Register a new OAuth application on https://github.com/settings/applications/new diff --git a/public/img/auth/nextcloud.png b/public/img/auth/nextcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..635806813a61c2eed5e7c91b3e547ce5107aabb3 GIT binary patch literal 2918 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 literal 0 HcmV?d00001 diff --git a/templates/admin/auth/new.tmpl b/templates/admin/auth/new.tmpl index f2fc26cdc8..2260782cc6 100644 --- a/templates/admin/auth/new.tmpl +++ b/templates/admin/auth/new.tmpl @@ -115,6 +115,8 @@ {{.i18n.Tr "admin.auths.tip.discord"}}
  • Gitea
  • {{.i18n.Tr "admin.auths.tip.gitea"}} +
  • Nextcloud
  • + {{.i18n.Tr "admin.auths.tip.nextcloud"}} diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/README.md b/vendor/github.com/markbates/goth/providers/nextcloud/README.md new file mode 100644 index 0000000000..3047934eb6 --- /dev/null +++ b/vendor/github.com/markbates/goth/providers/nextcloud/README.md @@ -0,0 +1,85 @@ +# Nextcloud OAuth2 + +For this backend, you need to have an OAuth2 enabled Nextcloud Instance, e.g. +on your own private server. + +## Setting up Nextcloud Test Environment + +To test, you only need a working Docker image of Nextcloud running on a public +URL, e.g. through [traefik](https://traefik.io/) + +```docker-compose.yml +version: '2' + +networks: + traefik-web: + external: true + +services: + app: + image: nextcloud + restart: always + networks: + - traefik-web + labels: + - traefik.enable=true + - traefik.frontend.rule=Host:${NEXTCLOUD_DNS} + - traefik.docker.network=traefik-web + environment: + SQLITE_DATABASE: "database.sqlite3" + NEXTCLOUD_ADMIN_USER: admin + NEXTCLOUD_ADMIN_PASSWORD: admin + NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DNS} +``` + +and start it up via + +``` +NEXTCLOUD_DNS=goth.my.server.name docker-compose up -d +``` + +afterwards, you will have a running Nextcloud instance with credentials + +``` +admin / admin +``` + +Then add a new OAuth 2.0 Client by going to + +``` +Settings -> Security -> OAuth 2.0 client +``` + +![Nextcloud Setup](nextcloud_setup.png) + +and add a new client with the name `goth` and redirection uri `http://localhost:3000/auth/nextcloud/callback`. The imporant part here the +two cryptic entries `Client Identifier` and `Secret`, which needs to be +used in your application. + +## Running Login Example + +If you want to run the default example in `/examples`, you have to +retrieve the keys described in the previous section and run the example +as follows: + +``` +NEXTCLOUD_URL=https://goth.my.server.name \ +NEXTCLOUD_KEY= \ +NEXTCLOUD_SECRET= \ +SESSION_SECRET=1 \ +./examples +``` + +Afterwards, you should be able to login via Nextcloud in the examples app. + +## Running the Provider Test + +The test has the same arguments as the login example test, but starts the test itself + +``` +NEXTCLOUD_URL=https://goth.my.server.name \ +NEXTCLOUD_KEY= \ +NEXTCLOUD_SECRET= \ +SESSION_SECRET=1 \ +go test -v +``` diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go b/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go new file mode 100644 index 0000000000..df64de71f9 --- /dev/null +++ b/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go @@ -0,0 +1,208 @@ +// Package nextcloud implements the OAuth2 protocol for authenticating users through nextcloud. +// This package can be used as a reference implementation of an OAuth2 provider for Goth. +package nextcloud + +import ( + "bytes" + "encoding/json" + "io" + "io/ioutil" + "net/http" + + "fmt" + + "github.com/markbates/goth" + "golang.org/x/oauth2" +) + +// These vars define the Authentication, Token, and Profile URLS for Nextcloud. +// You have to set these values to something useful, because nextcloud is always +// hosted somewhere. +// +var ( + AuthURL = "https:///apps/oauth2/authorize" + TokenURL = "https:///apps/oauth2/api/v1/token" + ProfileURL = "https:///ocs/v2.php/cloud/user?format=json" +) + +// Provider is the implementation of `goth.Provider` for accessing Nextcloud. +type Provider struct { + ClientKey string + Secret string + CallbackURL string + HTTPClient *http.Client + config *oauth2.Config + providerName string + authURL string + tokenURL string + profileURL string +} + +// New is only here to fulfill the interface requirements and does not work properly without +// setting your own Nextcloud connect parameters, more precisely AuthURL, TokenURL and ProfileURL. +// Please use NewCustomisedDNS with the beginning of your URL or NewCustomiseURL. +func New(clientKey, secret, callbackURL string, scopes ...string) *Provider { + return NewCustomisedURL(clientKey, secret, callbackURL, AuthURL, TokenURL, ProfileURL, scopes...) +} + +// NewCustomisedURL create a working connection to your Nextcloud server given by the values +// authURL, tokenURL and profileURL. +// If you want to use a simpler method, please have a look at NewCustomisedDNS, which gets only +// on parameter instead of three. +func NewCustomisedURL(clientKey, secret, callbackURL, authURL, tokenURL, profileURL string, scopes ...string) *Provider { + p := &Provider{ + ClientKey: clientKey, + Secret: secret, + CallbackURL: callbackURL, + providerName: "nextcloud", + profileURL: profileURL, + } + p.config = newConfig(p, authURL, tokenURL, scopes) + return p +} + +// NewCustomisedDNS is the simplest method to create a provider based only on your key/secret +// and the beginning of the URL to your server, e.g. https://my.server.name/ +func NewCustomisedDNS(clientKey, secret, callbackURL, nextcloudURL string, scopes ...string) *Provider { + return NewCustomisedURL( + clientKey, + secret, + callbackURL, + nextcloudURL+"/apps/oauth2/authorize", + nextcloudURL+"/apps/oauth2/api/v1/token", + nextcloudURL+"/ocs/v2.php/cloud/user?format=json", + scopes..., + ) +} + +// Name is the name used to retrieve this provider later. +func (p *Provider) Name() string { + return p.providerName +} + +// SetName is to update the name of the provider (needed in case of multiple providers of 1 type) +func (p *Provider) SetName(name string) { + p.providerName = name +} + +func (p *Provider) Client() *http.Client { + return goth.HTTPClientWithFallBack(p.HTTPClient) +} + +// Debug is a no-op for the nextcloud package. +func (p *Provider) Debug(debug bool) {} + +// BeginAuth asks Nextcloud for an authentication end-point. +func (p *Provider) BeginAuth(state string) (goth.Session, error) { + return &Session{ + AuthURL: p.config.AuthCodeURL(state), + }, nil +} + +// FetchUser will go to Nextcloud and access basic information about the user. +func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { + sess := session.(*Session) + user := goth.User{ + AccessToken: sess.AccessToken, + Provider: p.Name(), + RefreshToken: sess.RefreshToken, + ExpiresAt: sess.ExpiresAt, + } + + if user.AccessToken == "" { + // data is not yet retrieved since accessToken is still empty + return user, fmt.Errorf("%s cannot get user information without accessToken", p.providerName) + } + + req, err := http.NewRequest("GET", p.profileURL, nil) + if err != nil { + return user, err + } + req.Header.Set("Authorization", "Bearer "+sess.AccessToken) + response, err := p.Client().Do(req) + + if err != nil { + if response != nil { + response.Body.Close() + } + return user, err + } + + defer response.Body.Close() + + if response.StatusCode != http.StatusOK { + return user, fmt.Errorf("%s responded with a %d trying to fetch user information", p.providerName, response.StatusCode) + } + + bits, err := ioutil.ReadAll(response.Body) + if err != nil { + return user, err + } + + err = json.NewDecoder(bytes.NewReader(bits)).Decode(&user.RawData) + if err != nil { + return user, err + } + + err = userFromReader(bytes.NewReader(bits), &user) + + return user, err +} + +func newConfig(provider *Provider, authURL, tokenURL string, scopes []string) *oauth2.Config { + c := &oauth2.Config{ + ClientID: provider.ClientKey, + ClientSecret: provider.Secret, + RedirectURL: provider.CallbackURL, + Endpoint: oauth2.Endpoint{ + AuthURL: authURL, + TokenURL: tokenURL, + }, + Scopes: []string{}, + } + + if len(scopes) > 0 { + for _, scope := range scopes { + c.Scopes = append(c.Scopes, scope) + } + } + return c +} + +func userFromReader(r io.Reader, user *goth.User) error { + u := struct { + Ocs struct { + Data struct { + EMail string `json:"email"` + DisplayName string `json:"display-name"` + ID string `json:"id"` + Address string `json:"address"` + } + } `json:"ocs"` + }{} + err := json.NewDecoder(r).Decode(&u) + if err != nil { + return err + } + user.Email = u.Ocs.Data.EMail + user.Name = u.Ocs.Data.DisplayName + user.UserID = u.Ocs.Data.ID + user.Location = u.Ocs.Data.Address + return nil +} + +//RefreshTokenAvailable refresh token is provided by auth provider or not +func (p *Provider) RefreshTokenAvailable() bool { + return true +} + +//RefreshToken get new access token based on the refresh token +func (p *Provider) RefreshToken(refreshToken string) (*oauth2.Token, error) { + token := &oauth2.Token{RefreshToken: refreshToken} + ts := p.config.TokenSource(goth.ContextForClient(p.Client()), token) + newToken, err := ts.Token() + if err != nil { + return nil, err + } + return newToken, err +} diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud_setup.png b/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..8f457dd2a31650fd33e44126db684aaf847c92c4 GIT binary patch literal 85944 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/session.go b/vendor/github.com/markbates/goth/providers/nextcloud/session.go new file mode 100644 index 0000000000..568f3d6d4d --- /dev/null +++ b/vendor/github.com/markbates/goth/providers/nextcloud/session.go @@ -0,0 +1,63 @@ +package nextcloud + +import ( + "encoding/json" + "errors" + "strings" + "time" + + "github.com/markbates/goth" +) + +// Session stores data during the auth process with Nextcloud. +type Session struct { + AuthURL string + AccessToken string + RefreshToken string + ExpiresAt time.Time +} + +var _ goth.Session = &Session{} + +// GetAuthURL will return the URL set by calling the `BeginAuth` function on the Nextcloud provider. +func (s Session) GetAuthURL() (string, error) { + if s.AuthURL == "" { + return "", errors.New(goth.NoAuthUrlErrorMessage) + } + return s.AuthURL, nil +} + +// Authorize the session with Nextcloud and return the access token to be stored for future use. +func (s *Session) Authorize(provider goth.Provider, params goth.Params) (string, error) { + p := provider.(*Provider) + token, err := p.config.Exchange(goth.ContextForClient(p.Client()), params.Get("code")) + if err != nil { + return "", err + } + + if !token.Valid() { + return "", errors.New("Invalid token received from provider") + } + + s.AccessToken = token.AccessToken + s.RefreshToken = token.RefreshToken + s.ExpiresAt = token.Expiry + return token.AccessToken, err +} + +// Marshal the session into a string +func (s Session) Marshal() string { + b, _ := json.Marshal(s) + return string(b) +} + +func (s Session) String() string { + return s.Marshal() +} + +// UnmarshalSession wil unmarshal a JSON string into a session. +func (p *Provider) UnmarshalSession(data string) (goth.Session, error) { + s := &Session{} + err := json.NewDecoder(strings.NewReader(data)).Decode(s) + return s, err +} diff --git a/vendor/modules.txt b/vendor/modules.txt index e26566e592..80f3b6ac0b 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -311,6 +311,7 @@ github.com/markbates/goth/providers/gitea github.com/markbates/goth/providers/github github.com/markbates/goth/providers/gitlab github.com/markbates/goth/providers/google +github.com/markbates/goth/providers/nextcloud github.com/markbates/goth/providers/openidConnect github.com/markbates/goth/providers/twitter # github.com/mattn/go-isatty v0.0.7 diff --git a/web_src/js/index.js b/web_src/js/index.js index fcf9701c3c..b2eec525d3 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -1892,6 +1892,7 @@ function initAdmin() { case 'github': case 'gitlab': case 'gitea': + case 'nextcloud': $('.oauth2_use_custom_url').show(); break; case 'openidConnect': @@ -1925,6 +1926,7 @@ function initAdmin() { $('.oauth2_token_url input, .oauth2_auth_url input, .oauth2_profile_url input, .oauth2_email_url input').attr('required', 'required'); $('.oauth2_token_url, .oauth2_auth_url, .oauth2_profile_url, .oauth2_email_url').show(); break; + case 'nextcloud': case 'gitea': case 'gitlab': $('.oauth2_token_url input, .oauth2_auth_url input, .oauth2_profile_url input').attr('required', 'required');