diff --git a/client/model/files.js b/client/model/files.js index f53d8b10..8886e649 100644 --- a/client/model/files.js +++ b/client/model/files.js @@ -98,6 +98,9 @@ class FileSystem{ return store; }); }).catch((_err) => { + if(_err.code === "Unauthorized"){ + location = "/login?next="+location.pathname; + } this.obs.next(_err); return Promise.reject(null); }); diff --git a/client/pages/connectpage.js b/client/pages/connectpage.js index 29859fdc..1675543f 100644 --- a/client/pages/connectpage.js +++ b/client/pages/connectpage.js @@ -23,7 +23,10 @@ export class ConnectPage extends React.Component { componentWillMount(){ const urlData = urlParams(); - if(Object.keys(urlData).length === 0){ + const get_params = Object.keys(urlData); + if(get_params.length === 0){ + return; + }else if(get_params.length === 1 && !!urlData["next"]){ return; } @@ -40,6 +43,9 @@ export class ConnectPage extends React.Component { Session.authenticate(params) .then(Session.currentUser) .then((user) => { + if(location.search.indexOf("?next=") === 0){ + location = urlParams()["next"]; + } let url = '/files/'; let path = user.home; if(path){ diff --git a/server/common/error.go b/server/common/error.go index c36b3b79..d3a9b05b 100644 --- a/server/common/error.go +++ b/server/common/error.go @@ -19,6 +19,7 @@ var ( ErrNotImplemented = NewError("Not Implemented", 501) ErrFilesystemError = NewError("Can't use filesystem", 503) ErrMissingDependency = NewError("Missing dependency", 424) + ErrNotAuthorized = NewError("Not authorized", 401) ) type AppError struct { diff --git a/server/middleware/session.go b/server/middleware/session.go index 90bca82f..9bc8d6b4 100644 --- a/server/middleware/session.go +++ b/server/middleware/session.go @@ -59,6 +59,10 @@ func SessionStart (fn func(App, http.ResponseWriter, *http.Request)) func(ctx Ap return } if ctx.Backend, err = _extractBackend(req, &ctx); err != nil { + if len(ctx.Session) == 0 { + SendErrorResult(res, ErrNotAuthorized) + return + } SendErrorResult(res, err) return }