summaryrefslogtreecommitdiff
path: root/internal/gtsmodel
diff options
context:
space:
mode:
authorLibravatar Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com>2021-03-22 22:26:54 +0100
committerLibravatar GitHub <noreply@github.com>2021-03-22 22:26:54 +0100
commitaa9ce272dcfa1380b2f05bc3a90ef8ca1b0a7f62 (patch)
treef3e01f5434a2f90007969373f0fa32dc855207c7 /internal/gtsmodel
parentfix lint errors (diff)
downloadgotosocial-aa9ce272dcfa1380b2f05bc3a90ef8ca1b0a7f62.tar.xz
Oauth/token (#7)
* add host and protocol options * some fiddling * tidying up and comments * tick off /oauth/token * tidying a bit * tidying * go mod tidy * allow attaching middleware to server * add middleware * more user friendly * add comments * comments * store account + app * tidying * lots of restructuring * lint + tidy
Diffstat (limited to 'internal/gtsmodel')
-rw-r--r--internal/gtsmodel/account.go2
-rw-r--r--internal/gtsmodel/application.go41
-rw-r--r--internal/gtsmodel/status.go49
3 files changed, 68 insertions, 24 deletions
diff --git a/internal/gtsmodel/account.go b/internal/gtsmodel/account.go
index 67860146e..6c17b90e5 100644
--- a/internal/gtsmodel/account.go
+++ b/internal/gtsmodel/account.go
@@ -16,7 +16,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// package gtsmodel contains types used *internally* by GoToSocial and added/removed/selected from the database.
+// Package gtsmodel contains types used *internally* by GoToSocial and added/removed/selected from the database.
// These types should never be serialized and/or sent out via public APIs, as they contain sensitive information.
// The annotation used on these structs is for handling them via the go-pg ORM. See here: https://pg.uptrace.dev/models/
package gtsmodel
diff --git a/internal/gtsmodel/application.go b/internal/gtsmodel/application.go
index c0d6dddaf..fd0fa6acf 100644
--- a/internal/gtsmodel/application.go
+++ b/internal/gtsmodel/application.go
@@ -18,13 +18,38 @@
package gtsmodel
+import "github.com/gotosocial/gotosocial/pkg/mastotypes"
+
+// Application represents an application that can perform actions on behalf of a user.
+// It is used to authorize tokens etc, and is associated with an oauth client id in the database.
type Application struct {
- ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"`
- Name string
- Website string
- RedirectURI string `json:"redirect_uri"`
- ClientID string `json:"client_id"`
- ClientSecret string `json:"client_secret"`
- Scopes string `json:"scopes"`
- VapidKey string `json:"vapid_key"`
+ // id of this application in the db
+ ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"`
+ // name of the application given when it was created (eg., 'tusky')
+ Name string
+ // website for the application given when it was created (eg., 'https://tusky.app')
+ Website string
+ // redirect uri requested by the application for oauth2 flow
+ RedirectURI string
+ // id of the associated oauth client entity in the db
+ ClientID string
+ // secret of the associated oauth client entity in the db
+ ClientSecret string
+ // scopes requested when this app was created
+ Scopes string
+ // a vapid key generated for this app when it was created
+ VapidKey string
+}
+
+// ToMastotype returns this application as a mastodon api type, ready for serialization
+func (a *Application) ToMastotype() *mastotypes.Application {
+ return &mastotypes.Application{
+ ID: a.ID,
+ Name: a.Name,
+ Website: a.Website,
+ RedirectURI: a.RedirectURI,
+ ClientID: a.ClientID,
+ ClientSecret: a.ClientSecret,
+ VapidKey: a.VapidKey,
+ }
}
diff --git a/internal/gtsmodel/status.go b/internal/gtsmodel/status.go
index 22e88c08e..1c0e920e1 100644
--- a/internal/gtsmodel/status.go
+++ b/internal/gtsmodel/status.go
@@ -20,25 +20,44 @@ package gtsmodel
import "time"
+// Status represents a user-created 'post' or 'status' in the database, either remote or local
type Status struct {
- ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"`
- URI string `pg:",unique"`
- URL string `pg:",unique"`
- Content string
- CreatedAt time.Time `pg:"type:timestamp,notnull,default:now()"`
- UpdatedAt time.Time `pg:"type:timestamp,notnull,default:now()"`
- Local bool
- AccountID string
- InReplyToID string
- BoostOfID string
+ // id of the status in the database
+ ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"`
+ // uri at which this status is reachable
+ URI string `pg:",unique"`
+ // web url for viewing this status
+ URL string `pg:",unique"`
+ // the html-formatted content of this status
+ Content string
+ // when was this status created?
+ CreatedAt time.Time `pg:"type:timestamp,notnull,default:now()"`
+ // when was this status updated?
+ UpdatedAt time.Time `pg:"type:timestamp,notnull,default:now()"`
+ // is this status from a local account?
+ Local bool
+ // which account posted this status?
+ AccountID string
+ // id of the status this status is a reply to
+ InReplyToID string
+ // id of the status this status is a boost of
+ BoostOfID string
+ // cw string for this status
ContentWarning string
- Visibility *Visibility
+ // visibility entry for this status
+ Visibility *Visibility
}
+// Visibility represents the visibility granularity of a status. It is a combination of flags.
type Visibility struct {
- Direct bool
+ // Is this status viewable as a direct message?
+ Direct bool
+ // Is this status viewable to followers?
Followers bool
- Local bool
- Unlisted bool
- Public bool
+ // Is this status viewable on the local timeline?
+ Local bool
+ // Is this status boostable but not shown on public timelines?
+ Unlisted bool
+ // Is this status shown on public and federated timelines?
+ Public bool
}