5
5
"io/fs"
6
6
"log"
7
7
"net/http"
8
+ "net/url"
8
9
"strings"
9
10
10
11
"github.com/cooper/quiki/authenticator"
@@ -196,7 +197,8 @@ func handleLoginPage(w http.ResponseWriter, r *http.Request) {
196
197
return
197
198
}
198
199
199
- handleTemplate (w , r )
200
+ r .ParseForm ()
201
+ handleTemplate (w , r , struct { Redirect string }{r .Form .Get ("redirect" )})
200
202
}
201
203
202
204
func handleLogin (w http.ResponseWriter , r * http.Request ) {
@@ -219,10 +221,11 @@ func handleLogin(w http.ResponseWriter, r *http.Request) {
219
221
// start session and remember user info
220
222
sessMgr .Put (r .Context (), "user" , & user )
221
223
sessMgr .Put (r .Context (), "loggedIn" , true )
222
- sessMgr .Put (r .Context (), "branch" , "master" )
224
+ sessMgr .Put (r .Context (), "branch" , "master" ) // FIXME: derive default branch
223
225
224
226
// redirect to dashboard, which is now located at adminifier root
225
- http .Redirect (w , r , "../" , http .StatusTemporaryRedirect )
227
+ redirect := r .Form .Get ("redirect" )
228
+ http .Redirect (w , r , root + redirect , http .StatusTemporaryRedirect )
226
229
}
227
230
228
231
func handleCreateUserPage (w http.ResponseWriter , r * http.Request ) {
@@ -233,7 +236,7 @@ func handleCreateUserPage(w http.ResponseWriter, r *http.Request) {
233
236
return
234
237
}
235
238
236
- handleTemplate (w , r )
239
+ handleTemplate (w , r , nil )
237
240
}
238
241
239
242
func handleCreateUser (w http.ResponseWriter , r * http.Request ) {
@@ -356,7 +359,11 @@ func parsePost(w http.ResponseWriter, r *http.Request, required ...string) bool
356
359
func redirectIfNotLoggedIn (w http.ResponseWriter , r * http.Request ) bool {
357
360
// if not logged in, temp redirect to login page
358
361
if ! sessMgr .GetBool (r .Context (), "loggedIn" ) {
359
- http .Redirect (w , r , root + "login" , http .StatusTemporaryRedirect )
362
+ redirect := "?redirect=" + strings .TrimPrefix (r .URL .Path , root )
363
+ if r .URL .RawQuery != "" {
364
+ redirect += url .QueryEscape ("?" + r .URL .RawQuery )
365
+ }
366
+ http .Redirect (w , r , root + "login" + redirect , http .StatusTemporaryRedirect )
360
367
return true
361
368
}
362
369
return false
0 commit comments