mirror of
https://github.com/rclone/rclone.git
synced 2024-11-26 10:13:52 +08:00
oauthutil: Added AuthOptions and shuts down the web server properly
1. This makes AuthOptions a parameter for doConfig, Config and ConfigOffline to enable a Fs to add additional options (required for OneDrive for Business) 2. Fix to properly shutdown the webserver recieving the auth information (go1.8)
This commit is contained in:
parent
6d59887487
commit
73f7278497
|
@ -249,17 +249,17 @@ func NewClient(name string, config *oauth2.Config) (*http.Client, *TokenSource,
|
||||||
// Config does the initial creation of the token
|
// Config does the initial creation of the token
|
||||||
//
|
//
|
||||||
// It may run an internal webserver to receive the results
|
// It may run an internal webserver to receive the results
|
||||||
func Config(id, name string, config *oauth2.Config) error {
|
func Config(id, name string, config *oauth2.Config, opts ...oauth2.AuthCodeOption) error {
|
||||||
return doConfig(id, name, config, true)
|
return doConfig(id, name, config, true, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConfigNoOffline does the same as Config but does not pass the
|
// ConfigNoOffline does the same as Config but does not pass the
|
||||||
// "access_type=offline" parameter.
|
// "access_type=offline" parameter.
|
||||||
func ConfigNoOffline(id, name string, config *oauth2.Config) error {
|
func ConfigNoOffline(id, name string, config *oauth2.Config, opts ...oauth2.AuthCodeOption) error {
|
||||||
return doConfig(id, name, config, false)
|
return doConfig(id, name, config, false, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func doConfig(id, name string, config *oauth2.Config, offline bool) error {
|
func doConfig(id, name string, config *oauth2.Config, offline bool, opts []oauth2.AuthCodeOption) error {
|
||||||
config, changed := overrideCredentials(name, config)
|
config, changed := overrideCredentials(name, config)
|
||||||
automatic := fs.ConfigFileGet(name, fs.ConfigAutomatic) != ""
|
automatic := fs.ConfigFileGet(name, fs.ConfigAutomatic) != ""
|
||||||
|
|
||||||
|
@ -332,7 +332,6 @@ func doConfig(id, name string, config *oauth2.Config, offline bool) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
state := fmt.Sprintf("%x", stateBytes)
|
state := fmt.Sprintf("%x", stateBytes)
|
||||||
var opts []oauth2.AuthCodeOption
|
|
||||||
if offline {
|
if offline {
|
||||||
opts = append(opts, oauth2.AccessTypeOffline)
|
opts = append(opts, oauth2.AccessTypeOffline)
|
||||||
}
|
}
|
||||||
|
@ -394,17 +393,18 @@ type authServer struct {
|
||||||
bindAddress string
|
bindAddress string
|
||||||
code chan string
|
code chan string
|
||||||
authURL string
|
authURL string
|
||||||
|
server *http.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
// startWebServer runs an internal web server to receive config details
|
// startWebServer runs an internal web server to receive config details
|
||||||
func (s *authServer) Start() {
|
func (s *authServer) Start() {
|
||||||
fs.Debugf(nil, "Starting auth server on %s", s.bindAddress)
|
fs.Debugf(nil, "Starting auth server on %s", s.bindAddress)
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
server := &http.Server{
|
s.server = &http.Server{
|
||||||
Addr: s.bindAddress,
|
Addr: s.bindAddress,
|
||||||
Handler: mux,
|
Handler: mux,
|
||||||
}
|
}
|
||||||
server.SetKeepAlivesEnabled(false)
|
s.server.SetKeepAlivesEnabled(false)
|
||||||
mux.HandleFunc("/favicon.ico", func(w http.ResponseWriter, req *http.Request) {
|
mux.HandleFunc("/favicon.ico", func(w http.ResponseWriter, req *http.Request) {
|
||||||
http.Error(w, "", 404)
|
http.Error(w, "", 404)
|
||||||
return
|
return
|
||||||
|
@ -444,15 +444,6 @@ func (s *authServer) Start() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to start auth webserver: %v", err)
|
log.Fatalf("Failed to start auth webserver: %v", err)
|
||||||
}
|
}
|
||||||
err = server.Serve(s.listener)
|
err = s.server.Serve(s.listener)
|
||||||
fs.Debugf(nil, "Closed auth server with error: %v", err)
|
fs.Debugf(nil, "Closed auth server with error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *authServer) Stop() {
|
|
||||||
fs.Debugf(nil, "Closing auth server")
|
|
||||||
if s.code != nil {
|
|
||||||
close(s.code)
|
|
||||||
s.code = nil
|
|
||||||
}
|
|
||||||
_ = s.listener.Close()
|
|
||||||
}
|
|
||||||
|
|
19
oauthutil/oauthutil_new.go
Normal file
19
oauthutil/oauthutil_new.go
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// oauthutil parts go1.8+
|
||||||
|
|
||||||
|
//+build go1.8
|
||||||
|
|
||||||
|
package oauthutil
|
||||||
|
|
||||||
|
import "github.com/ncw/rclone/fs"
|
||||||
|
|
||||||
|
func (s *authServer) Stop() {
|
||||||
|
fs.Debugf(nil, "Closing auth server")
|
||||||
|
if s.code != nil {
|
||||||
|
close(s.code)
|
||||||
|
s.code = nil
|
||||||
|
}
|
||||||
|
_ = s.listener.Close()
|
||||||
|
|
||||||
|
// close the server
|
||||||
|
_ = s.server.Close()
|
||||||
|
}
|
16
oauthutil/oauthutil_old.go
Normal file
16
oauthutil/oauthutil_old.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// oauthutil parts pre go1.8+
|
||||||
|
|
||||||
|
//+build !go1.8
|
||||||
|
|
||||||
|
package oauthutil
|
||||||
|
|
||||||
|
import "github.com/ncw/rclone/fs"
|
||||||
|
|
||||||
|
func (s *authServer) Stop() {
|
||||||
|
fs.Debugf(nil, "Closing auth server")
|
||||||
|
if s.code != nil {
|
||||||
|
close(s.code)
|
||||||
|
s.code = nil
|
||||||
|
}
|
||||||
|
_ = s.listener.Close()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user