@@ -15,15 +15,17 @@ type HdaUser struct {
1515 UpdatedAt time.Time `json:"updated_at"`
1616 LastRequestAt time.Time `json:"last_request_at"`
1717 LastCheckedAt time.Time `json:"last_checked_at"`
18+ IsDemo bool `json:"is_demo"`
1819}
1920
2021type HdaUsers struct {
21- Users map [string ]* HdaUser
22+ IsDemo bool
23+ Users map [string ]* HdaUser
2224 sync.RWMutex
2325}
2426
25- func NewHdaUsers () * HdaUsers {
26- return & HdaUsers {Users : make (map [string ]* HdaUser )}
27+ func NewHdaUsers (isDemo bool ) * HdaUsers {
28+ return & HdaUsers {IsDemo : isDemo , Users : make (map [string ]* HdaUser )}
2729}
2830
2931func tokenGenerator () string {
@@ -33,17 +35,25 @@ func tokenGenerator() string {
3335}
3436
3537func (users * HdaUsers ) queryUser (pin string ) (* string , error ) {
36- dbconn , err := sql .Open ("mysql" , MYSQL_CREDENTIALS )
37- if err != nil {
38- log (err .Error ())
39- return nil , err
40- }
41- defer dbconn .Close ()
42- q := "SELECT id, login, name, updated_at FROM users WHERE pin=?"
4338 user := new (HdaUser )
44- err = dbconn .QueryRow (q , pin ).Scan (& user .id , & user .Login , & user .Name , & user .UpdatedAt )
45- if err != nil {
46- return nil , err
39+ if users .IsDemo {
40+ user .IsDemo = true
41+ user .id = 0
42+ user .LastCheckedAt = time .Now ()
43+ user .UpdatedAt = time .Now ()
44+ } else {
45+ dbconn , err := sql .Open ("mysql" , MYSQL_CREDENTIALS )
46+ if err != nil {
47+ log (err .Error ())
48+ return nil , err
49+ }
50+ defer dbconn .Close ()
51+ q := "SELECT id, login, name, updated_at FROM users WHERE pin=?"
52+
53+ err = dbconn .QueryRow (q , pin ).Scan (& user .id , & user .Login , & user .Name , & user .UpdatedAt )
54+ if err != nil {
55+ return nil , err
56+ }
4757 }
4858 authToken := users .updateUserIfExists (user )
4959 if authToken != "" {
@@ -75,7 +85,7 @@ func (users *HdaUsers) find(authToken string) *HdaUser {
7585 users .Lock ()
7686 defer users .Unlock ()
7787 user := users .Users [authToken ]
78- if user != nil {
88+ if ! ( user == nil || user . IsDemo ) {
7989 if time .Now ().Sub (user .LastCheckedAt ) > time .Minute * 5 {
8090 isValid , err := users .revalidateSession (authToken , user )
8191 if isValid || (! isValid && err != nil ) {
@@ -146,6 +156,9 @@ func (user *HdaUser) AvailableShares() ([]*HdaShare, error) {
146156}
147157
148158func (user * HdaUser ) HasReadAccess (shareName string ) (access bool , err error ) {
159+ if user .IsDemo {
160+ return true , nil
161+ }
149162 dbconn , err := sql .Open ("mysql" , MYSQL_CREDENTIALS )
150163 if err != nil {
151164 log (err .Error ())
@@ -161,6 +174,9 @@ func (user *HdaUser) HasReadAccess(shareName string) (access bool, err error) {
161174}
162175
163176func (user * HdaUser ) HasWriteAccess (shareName string ) (access bool , err error ) {
177+ if user .IsDemo {
178+ return true , nil
179+ }
164180 dbconn , err := sql .Open ("mysql" , MYSQL_CREDENTIALS )
165181 if err != nil {
166182 log (err .Error ())
0 commit comments