94f527bfdaf3ac37e96a1d9822f88ab6add042c6
[bloat] / model / session.go
1 package model
2
3 import (
4         "errors"
5         "strings"
6 )
7
8 var (
9         ErrSessionNotFound = errors.New("session not found")
10 )
11
12 type Session struct {
13         ID             string
14         InstanceDomain string
15         AccessToken    string
16 }
17
18 type SessionRepository interface {
19         Add(session Session) (err error)
20         Update(sessionID string, accessToken string) (err error)
21         Get(sessionID string) (session Session, err error)
22 }
23
24 func (s Session) IsLoggedIn() bool {
25         return len(s.AccessToken) > 0
26 }
27
28 func (s *Session) Marshal() []byte {
29         str := s.InstanceDomain + "\n" + s.AccessToken
30         return []byte(str)
31 }
32
33 func (s *Session) Unmarshal(id string, data []byte) error {
34         str := string(data)
35         lines := strings.Split(str, "\n")
36
37         size := len(lines)
38         if size == 1 {
39                 s.InstanceDomain = lines[0]
40         } else if size == 2 {
41                 s.InstanceDomain = lines[0]
42                 s.AccessToken = lines[1]
43         } else {
44                 return errors.New("invalid data")
45         }
46
47         s.ID = id
48         return nil
49 }