Skip to content

Commit e89ce88

Browse files
authored
Merge pull request #9 from csoni111/non-admin-users
Add logout functionality and resolve some crashes
2 parents c237ab5 + dc60acd commit e89ce88

3 files changed

Lines changed: 26 additions & 5 deletions

File tree

src/fs/auth.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ func (service *MercuryFsService) authenticate(writer http.ResponseWriter, reques
4949
}
5050
}
5151

52+
func (service *MercuryFsService) logout(w http.ResponseWriter, r *http.Request) {
53+
authToken := r.Header.Get("Authorization")
54+
service.Users.remove(authToken)
55+
w.WriteHeader(http.StatusOK)
56+
}
57+
5258
func (service *MercuryFsService) checkAuthHeader(w http.ResponseWriter, r *http.Request) (user *HdaUser) {
5359
authToken := r.Header.Get("Authorization")
5460
user = service.Users.find(authToken)
@@ -60,14 +66,19 @@ func (service *MercuryFsService) checkAuthHeader(w http.ResponseWriter, r *http.
6066

6167
func (service *MercuryFsService) authMiddleware(pass http.HandlerFunc) http.HandlerFunc {
6268
return func(w http.ResponseWriter, r *http.Request) {
63-
service.checkAuthHeader(w, r)
64-
pass(w, r)
69+
user := service.checkAuthHeader(w, r)
70+
if user != nil {
71+
pass(w, r)
72+
}
6573
}
6674
}
6775

6876
func (service *MercuryFsService) shareReadAccess(pass http.HandlerFunc) http.HandlerFunc {
6977
return func(w http.ResponseWriter, r *http.Request) {
7078
user := service.checkAuthHeader(w, r)
79+
if user == nil {
80+
return
81+
}
7182
shareName := r.URL.Query().Get("s")
7283
if access, err := user.HasReadAccess(shareName); !access {
7384
if err == nil {
@@ -84,6 +95,9 @@ func (service *MercuryFsService) shareReadAccess(pass http.HandlerFunc) http.Han
8495
func (service *MercuryFsService) shareWriteAccess(pass http.HandlerFunc) http.HandlerFunc {
8596
return func(w http.ResponseWriter, r *http.Request) {
8697
user := service.checkAuthHeader(w, r)
98+
if user == nil {
99+
return
100+
}
87101
shareName := r.URL.Query().Get("s")
88102
if access, err := user.HasWriteAccess(shareName); !access {
89103
if err == nil {

src/fs/hda_users.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ func (users *HdaUsers) find(authToken string) *HdaUser {
8888
return user
8989
}
9090

91+
func (users *HdaUsers) remove(authToken string) {
92+
if authToken != "" {
93+
users.Lock()
94+
delete(users.Users, authToken)
95+
users.Unlock()
96+
}
97+
}
98+
9199
func (users *HdaUsers) revalidateSession(authToken string, user *HdaUser) (isValid bool, err error) {
92100
dbconn, err := sql.Open("mysql", MYSQL_CREDENTIALS)
93101
if err != nil {

src/fs/service.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ func NewMercuryFSService(rootDir, localAddr string) (service *MercuryFsService,
6969
// set up API mux
7070
apiRouter := mux.NewRouter()
7171
apiRouter.HandleFunc("/auth", service.authenticate).Methods("POST")
72+
apiRouter.HandleFunc("/logout", service.logout).Methods("POST")
7273
apiRouter.HandleFunc("/shares", service.serveShares).Methods("GET")
7374
apiRouter.HandleFunc("/files", use(service.serveFile, service.shareReadAccess)).Methods("GET")
7475
apiRouter.HandleFunc("/files", use(service.deleteFile, service.shareWriteAccess)).Methods("DELETE")
@@ -272,10 +273,8 @@ func (service *MercuryFsService) serveFile(writer http.ResponseWriter, request *
272273
}
273274

274275
func (service *MercuryFsService) serveShares(writer http.ResponseWriter, request *http.Request) {
275-
authToken := request.Header.Get("Authorization")
276-
user := service.Users.find(authToken)
276+
user := service.checkAuthHeader(writer, request)
277277
if user == nil {
278-
http.Error(writer, "Authentication Failed", http.StatusUnauthorized)
279278
return
280279
}
281280
var shares []*HdaShare

0 commit comments

Comments
 (0)