diff options
| author | r <r@freesoftwareextremist.com> | 2022-10-25 13:40:49 +0000 | 
|---|---|---|
| committer | r <r@freesoftwareextremist.com> | 2022-10-25 14:14:46 +0000 | 
| commit | 887ed241d64ba5db3fd3d87194fb5595e5ad7d73 (patch) | |
| tree | 40fe52d870ac31dce139ceb11b40e0161bf10946 /model | |
| parent | b4ccde54a70495937a5667950363cbf2c24d40bf (diff) | |
| download | bloat-887ed241d64ba5db3fd3d87194fb5595e5ad7d73.tar.gz bloat-887ed241d64ba5db3fd3d87194fb5595e5ad7d73.zip  | |
Use cookies for session storage
Remove the server side session storage and store all the session related data
in the client side cookies. This decreases the exposure of the auth tokens.
It also simplifies the installation process as bloat no longer requires write
access to the filesystem.
This is a breaking change, all the existing sessions will stop working.
Diffstat (limited to 'model')
| -rw-r--r-- | model/app.go | 21 | ||||
| -rw-r--r-- | model/session.go | 60 | ||||
| -rw-r--r-- | model/settings.go | 33 | 
3 files changed, 40 insertions, 74 deletions
diff --git a/model/app.go b/model/app.go deleted file mode 100644 index 8f172c8..0000000 --- a/model/app.go +++ /dev/null @@ -1,21 +0,0 @@ -package model - -import ( -	"errors" -) - -var ( -	ErrAppNotFound = errors.New("app not found") -) - -type App struct { -	InstanceDomain string `json:"instance_domain"` -	InstanceURL    string `json:"instance_url"` -	ClientID       string `json:"client_id"` -	ClientSecret   string `json:"client_secret"` -} - -type AppRepo interface { -	Add(app App) (err error) -	Get(instanceDomain string) (app App, err error) -} diff --git a/model/session.go b/model/session.go index 5ff079b..6ada4aa 100644 --- a/model/session.go +++ b/model/session.go @@ -1,28 +1,48 @@  package model -import ( -	"errors" -) - -var ( -	ErrSessionNotFound = errors.New("session not found") -) -  type Session struct { -	ID             string   `json:"id"` -	UserID         string   `json:"user_id"` -	InstanceDomain string   `json:"instance_domain"` -	AccessToken    string   `json:"access_token"` -	CSRFToken      string   `json:"csrf_token"` -	Settings       Settings `json:"settings"` -} - -type SessionRepo interface { -	Add(session Session) (err error) -	Get(sessionID string) (session Session, err error) -	Remove(sessionID string) +	ID           string   `json:"id,omitempty"` +	UserID       string   `json:"uid,omitempty"` +	Instance     string   `json:"ins,omitempty"` +	ClientID     string   `json:"cid,omitempty"` +	ClientSecret string   `json:"cs,omitempty"` +	AccessToken  string   `json:"at,omitempty"` +	CSRFToken    string   `json:"csrf,omitempty"` +	Settings     Settings `json:"sett,omitempty"`  }  func (s Session) IsLoggedIn() bool {  	return len(s.AccessToken) > 0  } + +type Settings struct { +	DefaultVisibility     string `json:"dv,omitempty"` +	DefaultFormat         string `json:"df,omitempty"` +	CopyScope             bool   `json:"cs,omitempty"` +	ThreadInNewTab        bool   `json:"tnt,omitempty"` +	HideAttachments       bool   `json:"ha,omitempty"` +	MaskNSFW              bool   `json:"mn,omitempty"` +	NotificationInterval  int    `json:"ni,omitempty"` +	FluorideMode          bool   `json:"fm,omitempty"` +	DarkMode              bool   `json:"dm,omitempty"` +	AntiDopamineMode      bool   `json:"adm,omitempty"` +	HideUnsupportedNotifs bool   `json:"hun,omitempty"` +	CSS                   string `json:"css,omitempty"` +} + +func NewSettings() *Settings { +	return &Settings{ +		DefaultVisibility:     "public", +		DefaultFormat:         "", +		CopyScope:             true, +		ThreadInNewTab:        false, +		HideAttachments:       false, +		MaskNSFW:              true, +		NotificationInterval:  0, +		FluorideMode:          false, +		DarkMode:              false, +		AntiDopamineMode:      false, +		HideUnsupportedNotifs: false, +		CSS:                   "", +	} +} diff --git a/model/settings.go b/model/settings.go deleted file mode 100644 index 1f83c75..0000000 --- a/model/settings.go +++ /dev/null @@ -1,33 +0,0 @@ -package model - -type Settings struct { -	DefaultVisibility     string `json:"default_visibility"` -	DefaultFormat         string `json:"default_format"` -	CopyScope             bool   `json:"copy_scope"` -	ThreadInNewTab        bool   `json:"thread_in_new_tab"` -	HideAttachments       bool   `json:"hide_attachments"` -	MaskNSFW              bool   `json:"mask_nfsw"` -	NotificationInterval  int    `json:"notifications_interval"` -	FluorideMode          bool   `json:"fluoride_mode"` -	DarkMode              bool   `json:"dark_mode"` -	AntiDopamineMode      bool   `json:"anti_dopamine_mode"` -	HideUnsupportedNotifs bool   `json:"hide_unsupported_notifs"` -	CSS                   string `json:"css"` -} - -func NewSettings() *Settings { -	return &Settings{ -		DefaultVisibility:     "public", -		DefaultFormat:         "", -		CopyScope:             true, -		ThreadInNewTab:        false, -		HideAttachments:       false, -		MaskNSFW:              true, -		NotificationInterval:  0, -		FluorideMode:          false, -		DarkMode:              false, -		AntiDopamineMode:      false, -		HideUnsupportedNotifs: false, -		CSS:                   "", -	} -}  | 
