Skip to content

Commit

Permalink
adds revalidation of user session after every 5 mintues
Browse files Browse the repository at this point in the history
  • Loading branch information
csoni111 committed Jun 12, 2018
1 parent bb38716 commit 720587e
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 28 deletions.
44 changes: 21 additions & 23 deletions src/fs/hda_shares.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,11 @@ import (
)

type HdaShare struct {
id int
Name string `json:"name"`
UpdatedAt time.Time `json:"updated_at"`
Path string `json:"path"`
Tags string `json:"tags"`
IsWritable bool `json:"is_writable"`
name string
updatedAt time.Time
path string
tags string
isWritable bool
}

type HdaShares struct {
Expand Down Expand Up @@ -72,8 +71,8 @@ func (shares *HdaShares) updateSqlShares() error {
newShares := make([]*HdaShare, 0)
for rows.Next() {
share := new(HdaShare)
rows.Scan(&share.Name, &share.UpdatedAt, &share.Path, &share.Tags)
debug(5, "share found: %s\n", share.Name)
rows.Scan(&share.name, &share.updatedAt, &share.path, &share.tags)
debug(5, "share found: %s\n", share.name)
newShares = append(newShares, share)
}

Expand Down Expand Up @@ -108,13 +107,12 @@ func (shares *HdaShares) updateDirShares() (nil error) {
for i := range fis {
if fis[i].IsDir() && strings.Index(fis[i].Name(), ".") != 0 {
share := new(HdaShare)
share.id = i
share.Name = fis[i].Name()
share.UpdatedAt = fis[i].ModTime()
share.Tags = fis[i].Name()
share.name = fis[i].Name()
share.updatedAt = fis[i].ModTime()
share.tags = fis[i].Name()
prefix, _ := filepath.Abs(shares.rootDir)
share.Path = prefix + "/" + fis[i].Name()
share.IsWritable = true
share.path = prefix + "/" + fis[i].Name()
share.isWritable = true
newShares = append(newShares, share)
}
}
Expand All @@ -129,7 +127,7 @@ func (shares *HdaShares) updateDirShares() (nil error) {

func (shares *HdaShares) Get(shareName string) *HdaShare {
for i := range shares.Shares {
if shares.Shares[i].Name == shareName {
if shares.Shares[i].name == shareName {
return shares.Shares[i]
}
}
Expand All @@ -146,10 +144,10 @@ func SharesJson(shares []*HdaShare) string {
for i := range shares {
temp := "{"
// NB: 'name' and 'mtime' are used because of API spec
temp += fmt.Sprintf(`"name": "%s", `, shares[i].Name)
temp += fmt.Sprintf(`"mtime": "%s", `, shares[i].UpdatedAt.Format(http.TimeFormat))
temp += fmt.Sprintf(`"name": "%s", `, shares[i].name)
temp += fmt.Sprintf(`"mtime": "%s", `, shares[i].updatedAt.Format(http.TimeFormat))
temp += fmt.Sprintf(`"tags": [%s],`, strings.Join(shares[i].tagsList(), ", "))
temp += fmt.Sprintf(`"is_writable": %t`, shares[i].IsWritable)
temp += fmt.Sprintf(`"is_writable": %t`, shares[i].isWritable)
temp += "}"
ss = append(ss, temp)
}
Expand All @@ -162,13 +160,13 @@ func SharesJson(shares []*HdaShare) string {

// external interface to the path of a share
func (s *HdaShare) GetPath() string {
return s.Path
return s.path
}

// return a list of tags, cleaned up
func (s *HdaShare) tagsList() []string {
re := regexp.MustCompile(`(\s*,+\s*)+`)
ta := re.Split(s.Tags, -1)
ta := re.Split(s.tags, -1)
r := make([]string, 0)
for _, tag := range ta {
if tag != "" {
Expand All @@ -183,9 +181,9 @@ func (shares *HdaShares) startMetadataPrefill(library *metadata.Library) {
// start it up after some time, to prevent overloads
time.Sleep(15 * time.Second)
for i := range shares.Shares {
path := shares.Shares[i].Path
tags := strings.ToLower(shares.Shares[i].Tags)
debug(5, `checking share "%s" (%s) with tags: %s\n`, shares.Shares[i].Name, path, tags)
path := shares.Shares[i].path
tags := strings.ToLower(shares.Shares[i].tags)
debug(5, `checking share "%s" (%s) with tags: %s\n`, shares.Shares[i].name, path, tags)
if path == "" || tags == "" {
continue
}
Expand Down
42 changes: 37 additions & 5 deletions src/fs/hda_users.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (users *HdaUsers) queryUser(pin string) (*string, error) {
return &authToken, nil
}

func (users *HdaUsers) updateUserIfExists(newUser *HdaUser) string {
func (users *HdaUsers) updateUserIfExists(newUser *HdaUser) (authToken string) {
for authToken, user := range users.Users {
if user.id == newUser.id {
newUser.LastCheckedAt = time.Now()
Expand All @@ -68,13 +68,45 @@ func (users *HdaUsers) updateUserIfExists(newUser *HdaUser) string {
return authToken
}
}
return ""
return
}

func (users *HdaUsers) find(authToken string) *HdaUser {
users.Lock()
defer users.Unlock()
return users.Users[authToken]
user := users.Users[authToken]
if user != nil {
if time.Now().Sub(user.LastCheckedAt) > time.Minute*5 {
isValid, err := users.revalidateSession(authToken, user)
if isValid || (!isValid && err != nil) {
user.LastRequestAt = time.Now()
} else {
user = nil
}
}
}
return user
}

func (users *HdaUsers) revalidateSession(authToken string, user *HdaUser) (isValid bool, err error) {
dbconn, err := sql.Open("mysql", MYSQL_CREDENTIALS)
if err != nil {
log(err.Error())
return
}
defer dbconn.Close()
q := "SELECT updated_at FROM users WHERE id=?"
var updatedAt time.Time
err = dbconn.QueryRow(q, user.id).Scan(&updatedAt)
if err != nil {
return
}
if updatedAt != user.UpdatedAt {
delete(users.Users, authToken)
return
}
user.LastCheckedAt = time.Now()
return true, nil
}

func (user *HdaUser) AvailableShares() ([]*HdaShare, error) {
Expand All @@ -84,7 +116,7 @@ func (user *HdaUser) AvailableShares() ([]*HdaShare, error) {
return nil, err
}
defer dbconn.Close()
q := "SELECT s.id, s.name, s.updated_at, s.path, s.tags, " +
q := "SELECT s.name, s.updated_at, s.path, s.tags, " +
"CASE WHEN cw.id IS NULL THEN 'false' ELSE 'true' END AS writable " +
"FROM cap_accesses as ca " +
"INNER JOIN shares AS s ON s.id = ca.share_id " +
Expand All @@ -99,7 +131,7 @@ func (user *HdaUser) AvailableShares() ([]*HdaShare, error) {
newShares := make([]*HdaShare, 0)
for rows.Next() {
share := new(HdaShare)
rows.Scan(&share.Name, &share.UpdatedAt, &share.Path, &share.Tags, &share.IsWritable)
rows.Scan(&share.name, &share.updatedAt, &share.path, &share.tags, &share.isWritable)
newShares = append(newShares, share)
}
return newShares, nil
Expand Down

0 comments on commit 720587e

Please sign in to comment.