add abilty to enter custom dev user #106
This commit is contained in:
@@ -20,6 +20,9 @@ const devAuthPort = 8084
|
||||
type DevAuthServer struct {
|
||||
Provider Provider
|
||||
|
||||
username string // unsafe, but fine for dev
|
||||
nonInteractive bool
|
||||
|
||||
httpServer *http.Server
|
||||
lock sync.Mutex
|
||||
}
|
||||
@@ -34,7 +37,20 @@ func (d *DevAuthServer) Run() {
|
||||
log.Printf("[DEBUG] dev oauth request %s %s %+v", r.Method, r.URL, r.Header)
|
||||
switch {
|
||||
|
||||
case strings.HasPrefix(r.URL.Path, "/login/user"):
|
||||
w.Write([]byte(devUserForm))
|
||||
|
||||
case strings.HasPrefix(r.URL.Path, "/login/oauth/authorize"):
|
||||
|
||||
if !d.nonInteractive && (r.ParseForm() != nil || r.Form.Get("username") == "") {
|
||||
w.Write([]byte(fmt.Sprintf(devUserForm, r.URL.RawQuery)))
|
||||
return
|
||||
}
|
||||
|
||||
if !d.nonInteractive {
|
||||
d.username = r.Form.Get("username")
|
||||
}
|
||||
|
||||
state := r.URL.Query().Get("state")
|
||||
callbackURL := fmt.Sprintf("%s?code=g0ZGZmNjVmOWI&state=%s", d.Provider.RedirectURL, state)
|
||||
log.Printf("[DEBUG] callback url=%s", callbackURL)
|
||||
@@ -57,10 +73,11 @@ func (d *DevAuthServer) Run() {
|
||||
}
|
||||
|
||||
case strings.HasPrefix(r.URL.Path, "/user"):
|
||||
res := `{
|
||||
"id": "ignored",
|
||||
"name":"ignored"
|
||||
}`
|
||||
res := fmt.Sprintf(`{
|
||||
"id": "%s",
|
||||
"name":"%s"
|
||||
}`, d.username, d.username)
|
||||
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
if _, err := w.Write([]byte(res)); err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
@@ -106,11 +123,33 @@ func NewDev(p Params) Provider {
|
||||
InfoURL: fmt.Sprintf("http://127.0.0.1:%d/user", devAuthPort),
|
||||
MapUser: func(data userData, _ []byte) store.User {
|
||||
userInfo := store.User{
|
||||
ID: "dev_user",
|
||||
Name: "developer",
|
||||
ID: data.value("id"),
|
||||
Name: data.value("name"),
|
||||
Picture: "",
|
||||
}
|
||||
return userInfo
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
var devUserForm = `
|
||||
<html>
|
||||
<head>
|
||||
<title>Remark42 Dev User</title>
|
||||
<style>
|
||||
form {
|
||||
margin: 100 auto;
|
||||
width: 300px;
|
||||
padding: 1em;
|
||||
border: 1px solid #CCC;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form action="/login/oauth/authorize?%s" method="post">
|
||||
username: <input type="text" name="username" value="dev_user">
|
||||
<input type="submit" value="Login">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
|
||||
@@ -20,7 +20,7 @@ func TestDevProvider(t *testing.T) {
|
||||
JwtService: NewJWT("12345", false, time.Hour, time.Hour*24*31),
|
||||
PermissionChecker: &mockUserPermissions{admin: "dev_user"},
|
||||
}
|
||||
srv := DevAuthServer{Provider: NewDev(params)}
|
||||
srv := DevAuthServer{Provider: NewDev(params), nonInteractive: true, username: "dev_user"}
|
||||
|
||||
// auth routes for all providers
|
||||
router := chi.NewRouter()
|
||||
@@ -62,7 +62,7 @@ func TestDevProvider(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
|
||||
u := *claims.User
|
||||
assert.Equal(t, store.User{Name: "developer", ID: "dev_user", Picture: "", IP: "",
|
||||
assert.Equal(t, store.User{Name: "dev_user", ID: "dev_user", Picture: "", IP: "",
|
||||
Admin: true, Blocked: false, Verified: false}, u)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user