diff options
Diffstat (limited to 'model')
| -rw-r--r-- | model/app.go | 33 | ||||
| -rw-r--r-- | model/session.go | 34 | 
2 files changed, 57 insertions, 10 deletions
diff --git a/model/app.go b/model/app.go index 52ebdf5..89d656d 100644 --- a/model/app.go +++ b/model/app.go @@ -1,19 +1,40 @@  package model -import "errors" +import ( +	"errors" +	"strings" +)  var (  	ErrAppNotFound = errors.New("app not found")  )  type App struct { -	InstanceURL  string -	ClientID     string -	ClientSecret string +	InstanceDomain string +	InstanceURL    string +	ClientID       string +	ClientSecret   string  }  type AppRepository interface {  	Add(app App) (err error) -	Update(instanceURL string, clientID string, clientSecret string) (err error) -	Get(instanceURL string) (app App, err error) +	Get(instanceDomain string) (app App, err error) +} + +func (a *App) Marshal() []byte { +	str := a.InstanceURL + "\n" + a.ClientID + "\n" + a.ClientSecret +	return []byte(str) +} + +func (a *App) Unmarshal(instanceDomain string, data []byte) error { +	str := string(data) +	lines := strings.Split(str, "\n") +	if len(lines) != 3 { +		return errors.New("invalid data") +	} +	a.InstanceDomain = instanceDomain +	a.InstanceURL = lines[0] +	a.ClientID = lines[1] +	a.ClientSecret = lines[2] +	return nil  } diff --git a/model/session.go b/model/session.go index 43628ee..94f527b 100644 --- a/model/session.go +++ b/model/session.go @@ -1,15 +1,18 @@  package model -import "errors" +import ( +	"errors" +	"strings" +)  var (  	ErrSessionNotFound = errors.New("session not found")  )  type Session struct { -	ID          string -	InstanceURL string -	AccessToken string +	ID             string +	InstanceDomain string +	AccessToken    string  }  type SessionRepository interface { @@ -21,3 +24,26 @@ type SessionRepository interface {  func (s Session) IsLoggedIn() bool {  	return len(s.AccessToken) > 0  } + +func (s *Session) Marshal() []byte { +	str := s.InstanceDomain + "\n" + s.AccessToken +	return []byte(str) +} + +func (s *Session) Unmarshal(id string, data []byte) error { +	str := string(data) +	lines := strings.Split(str, "\n") + +	size := len(lines) +	if size == 1 { +		s.InstanceDomain = lines[0] +	} else if size == 2 { +		s.InstanceDomain = lines[0] +		s.AccessToken = lines[1] +	} else { +		return errors.New("invalid data") +	} + +	s.ID = id +	return nil +}  | 
