memberships: user page (#126)
* reworked homepage and userhandler
* minor fixes for UI
diff --git a/core/auth/memberships/group.html b/core/auth/memberships/group.html
index ac432d8..f923232 100644
--- a/core/auth/memberships/group.html
+++ b/core/auth/memberships/group.html
@@ -43,7 +43,7 @@
</tr>
{{- range .Owners }}
<tr>
- <td>{{ . }}</td>
+ <td><a href="/user/{{ . }}">{{ . }}</a></td>
<td>Delete</td>
</tr>
{{- end }}
@@ -56,7 +56,7 @@
</tr>
{{- range .Members }}
<tr>
- <td>{{ . }}</td>
+ <td><a href="/user/{{ . }}">{{ . }}</a></td>
<td>Delete</td>
</tr>
{{- end }}
diff --git a/core/auth/memberships/index.html b/core/auth/memberships/index.html
index 03ee299..cd3cf50 100644
--- a/core/auth/memberships/index.html
+++ b/core/auth/memberships/index.html
@@ -7,7 +7,8 @@
<link rel="stylesheet" href="/static/pico.2.0.6.min.css">
</head>
<body class="container">
- <h1>Groups Managment</h1>
+ <h1>User: {{ .CurrentUser }}</h1>
+ {{ if .LoggedInUserPage }}
<form action="/create-group" method="post">
<label for="group-name">Group Name:</label>
<input type="text" id="group-name" name="group-name" required>
@@ -15,6 +16,7 @@
<input type="text" id="description" name="description">
<button type="submit">Create Group</button>
</form>
+ {{ end }}
<h4>Owner</h4>
<table>
<tr>
diff --git a/core/auth/memberships/main.go b/core/auth/memberships/main.go
index bc8f384..a645777 100644
--- a/core/auth/memberships/main.go
+++ b/core/auth/memberships/main.go
@@ -484,6 +484,7 @@
r := mux.NewRouter()
r.PathPrefix("/static/").Handler(http.FileServer(http.FS(staticResources)))
r.HandleFunc("/group/{group-name}", s.groupHandler)
+ r.HandleFunc("/user/{username}", s.userHandler)
r.HandleFunc("/create-group", s.createGroupHandler)
r.HandleFunc("/add-user", s.addUserHandler)
r.HandleFunc("/add-child-group", s.addChildGroupHandler)
@@ -523,12 +524,25 @@
http.Error(w, "User Not Logged In", http.StatusUnauthorized)
return
}
- ownerGroups, err := s.store.GetGroupsOwnedBy(loggedInUser)
+ http.Redirect(w, r, "/user/"+loggedInUser, http.StatusSeeOther)
+}
+
+func (s *Server) userHandler(w http.ResponseWriter, r *http.Request) {
+ loggedInUser, err := getLoggedInUser(r)
+ if err != nil {
+ http.Error(w, "User Not Logged In", http.StatusUnauthorized)
+ return
+ }
+ vars := mux.Vars(r)
+ user := strings.ToLower(vars["username"])
+ // TODO(dtabidze): should check if username exists or not.
+ loggedInUserPage := loggedInUser == user
+ ownerGroups, err := s.store.GetGroupsOwnedBy(user)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- membershipGroups, err := s.store.GetGroupsUserBelongsTo(loggedInUser)
+ membershipGroups, err := s.store.GetGroupsUserBelongsTo(user)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -538,7 +552,7 @@
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- transitiveGroups, err := s.store.GetAllTransitiveGroupsForUser(loggedInUser)
+ transitiveGroups, err := s.store.GetAllTransitiveGroupsForUser(user)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -547,10 +561,14 @@
OwnerGroups []Group
MembershipGroups []Group
TransitiveGroups []Group
+ LoggedInUserPage bool
+ CurrentUser string
}{
OwnerGroups: ownerGroups,
MembershipGroups: membershipGroups,
TransitiveGroups: transitiveGroups,
+ LoggedInUserPage: loggedInUserPage,
+ CurrentUser: user,
}
w.Header().Set("Content-Type", "text/html")
if err := tmpl.Execute(w, data); err != nil {