From c25f27e82e08bd05ff50f4094ce3950e42512a6b Mon Sep 17 00:00:00 2001 From: mStar Date: Sat, 5 Apr 2025 12:21:44 +0200 Subject: [PATCH] Move utils into shared folder --- feeds/feed.go | 4 +++ mailer/NewUserRequest.go | 5 ---- mailer/mail.go | 12 --------- mailer/templates/NewUserRequest.html | 23 ----------------- main.go | 11 ++++---- server/apiLinstromNotes.go | 4 +-- {util => shared}/fswrapper.go | 2 +- {util => shared}/tagsFromString.go | 2 +- {util => shared}/tracing.go | 2 +- {util => shared}/zerologPasskey.go | 2 +- storage/cache.go | 13 +++++----- storage/cache/cache.go | 9 ++++--- storage/inboundJobs.go | 9 ++++--- storage/mediaFile.go | 17 +++++++------ storage/notes.go | 19 +++++++------- storage/outboundJobs.go | 11 ++++---- storage/passkeySessions.go | 11 ++++---- storage/remoteServerInfo.go | 13 +++++----- storage/roles.go | 15 ++++++----- storage/storage.go | 15 ++++++----- storage/user.go | 38 ++++++++++++++-------------- storage/userInfoFields.go | 11 ++++---- 22 files changed, 111 insertions(+), 137 deletions(-) create mode 100644 feeds/feed.go delete mode 100644 mailer/NewUserRequest.go delete mode 100644 mailer/mail.go delete mode 100644 mailer/templates/NewUserRequest.html rename {util => shared}/fswrapper.go (97%) rename {util => shared}/tagsFromString.go (95%) rename {util => shared}/tracing.go (95%) rename {util => shared}/zerologPasskey.go (96%) diff --git a/feeds/feed.go b/feeds/feed.go new file mode 100644 index 0000000..00c4aa2 --- /dev/null +++ b/feeds/feed.go @@ -0,0 +1,4 @@ +package feeds + +type Feed struct { +} diff --git a/mailer/NewUserRequest.go b/mailer/NewUserRequest.go deleted file mode 100644 index 47e5e6b..0000000 --- a/mailer/NewUserRequest.go +++ /dev/null @@ -1,5 +0,0 @@ -package mailer - -type NewUserMailData struct { - Domain string -} diff --git a/mailer/mail.go b/mailer/mail.go deleted file mode 100644 index b1f09a1..0000000 --- a/mailer/mail.go +++ /dev/null @@ -1,12 +0,0 @@ -package mailer - -import ( - "io/fs" - - mail "github.com/xhit/go-simple-mail/v2" -) - -type MailClient struct { - mailServer *mail.SMTPServer - templatesFs fs.FS -} diff --git a/mailer/templates/NewUserRequest.html b/mailer/templates/NewUserRequest.html deleted file mode 100644 index a805bee..0000000 --- a/mailer/templates/NewUserRequest.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - New user request - - - - -

New account request

-

New user is awaiting account approval

-

Information

- -

Request reason

-

{{ .Reason }}

- - - diff --git a/main.go b/main.go index 71bd806..36aa1d2 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,6 @@ import ( "git.mstar.dev/mstar/linstrom/shared" "git.mstar.dev/mstar/linstrom/storage" "git.mstar.dev/mstar/linstrom/storage/cache" - "git.mstar.dev/mstar/linstrom/util" ) // TODO: Add frontend overwrite @@ -29,7 +28,7 @@ var reactiveFS embed.FS var nojsFS embed.FS //go:embed duck.webp -var placeholderFile string +var defaultDuck string func main() { other.SetupFlags() @@ -77,7 +76,7 @@ func main() { UserStore: store, SessionStore: store, SessionMaxAge: time.Hour * 24, - }, passkey.WithLogger(&util.ZerologWrapper{})) + }, passkey.WithLogger(&shared.ZerologWrapper{})) if err != nil { log.Fatal().Err(err).Msg("Failed to setup passkey support") } @@ -85,9 +84,9 @@ func main() { server := server.NewServer( store, pkey, - util.NewFSWrapper(reactiveFS, "frontend-reactive/dist/", false), - util.NewFSWrapper(nojsFS, "frontend-noscript/", false), - &placeholderFile, + shared.NewFSWrapper(reactiveFS, "frontend-reactive/dist/", false), + shared.NewFSWrapper(nojsFS, "frontend-noscript/", false), + &defaultDuck, ) server.Start(":8000") // TODO: Set up media server diff --git a/server/apiLinstromNotes.go b/server/apiLinstromNotes.go index 2aea464..d478647 100644 --- a/server/apiLinstromNotes.go +++ b/server/apiLinstromNotes.go @@ -8,8 +8,8 @@ import ( "github.com/google/jsonapi" "github.com/rs/zerolog/hlog" + "git.mstar.dev/mstar/linstrom/shared" "git.mstar.dev/mstar/linstrom/storage" - "git.mstar.dev/mstar/linstrom/util" ) // Notes @@ -98,7 +98,7 @@ func linstromNewNote(w http.ResponseWriter, r *http.Request) { return } - rawTags := util.TagsFromText(newNote.RawContent) + rawTags := shared.TagsFromText(newNote.RawContent) note, err := store.CreateNoteLocal( actorId, diff --git a/util/fswrapper.go b/shared/fswrapper.go similarity index 97% rename from util/fswrapper.go rename to shared/fswrapper.go index 466c991..d500142 100644 --- a/util/fswrapper.go +++ b/shared/fswrapper.go @@ -1,4 +1,4 @@ -package util +package shared import ( "io/fs" diff --git a/util/tagsFromString.go b/shared/tagsFromString.go similarity index 95% rename from util/tagsFromString.go rename to shared/tagsFromString.go index 7a9e62e..8190d5f 100644 --- a/util/tagsFromString.go +++ b/shared/tagsFromString.go @@ -1,4 +1,4 @@ -package util +package shared import ( "regexp" diff --git a/util/tracing.go b/shared/tracing.go similarity index 95% rename from util/tracing.go rename to shared/tracing.go index 0319a2e..6c0c37a 100644 --- a/util/tracing.go +++ b/shared/tracing.go @@ -1,4 +1,4 @@ -package util +package shared import ( "github.com/rs/zerolog" diff --git a/util/zerologPasskey.go b/shared/zerologPasskey.go similarity index 96% rename from util/zerologPasskey.go rename to shared/zerologPasskey.go index 1fdb032..f9d0b89 100644 --- a/util/zerologPasskey.go +++ b/shared/zerologPasskey.go @@ -1,4 +1,4 @@ -package util +package shared import "github.com/rs/zerolog/log" diff --git a/storage/cache.go b/storage/cache.go index 77e36b6..dc4a26d 100644 --- a/storage/cache.go +++ b/storage/cache.go @@ -6,7 +6,8 @@ import ( "github.com/redis/go-redis/v9" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" + + "git.mstar.dev/mstar/linstrom/shared" ) // various prefixes for accessing items in the cache (since it's a simple key-value store) @@ -26,7 +27,7 @@ var errCacheNotFound = errors.New("not found in cache") // err contains an error describing why an account's id couldn't be found // The most common one should be errCacheNotFound func (s *Storage) cacheHandleToAccUid(handle string) (accId *string, err error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // Where to put the data (in case it's found) var target string found, err := s.cache.Get(cacheUserHandleToIdPrefix+strings.TrimLeft(handle, "@"), &target) @@ -48,7 +49,7 @@ func (s *Storage) cacheHandleToAccUid(handle string) (accId *string, err error) // err contains an error describing why an account's id couldn't be found // The most common one should be errCacheNotFound func (s *Storage) cacheLocalUsernameToAccUid(username string) (accId *string, err error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // Where to put the data (in case it's found) var target string found, err := s.cache.Get(cacheLocalUsernameToIdPrefix+username, &target) @@ -66,7 +67,7 @@ func (s *Storage) cacheLocalUsernameToAccUid(username string) (accId *string, er } func (s *Storage) cachePkeyIdToAccId(pkeyId []byte) (accId *string, err error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // Where to put the data (in case it's found) var target string found, err := s.cache.Get(cachePasskeyIdToAccIdPrefix+string(pkeyId), &target) @@ -88,7 +89,7 @@ func (s *Storage) cachePkeyIdToAccId(pkeyId []byte) (accId *string, err error) { // err contains an error describing why an account couldn't be found // The most common one should be errCacheNotFound func (s *Storage) cacheAccIdToData(id string) (acc *Account, err error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) var target Account found, err := s.cache.Get(cacheUserIdToAccPrefix+id, &target) if !found { @@ -106,7 +107,7 @@ func (s *Storage) cacheAccIdToData(id string) (acc *Account, err error) { // err contains an error describing why a note couldn't be found // The most common one should be errCacheNotFound func (s *Storage) cacheNoteIdToData(id string) (note *Note, err error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) target := Note{} found, err := s.cache.Get(cacheNoteIdToNotePrefix+id, &target) if !found { diff --git a/storage/cache/cache.go b/storage/cache/cache.go index 264f718..d3a563f 100644 --- a/storage/cache/cache.go +++ b/storage/cache/cache.go @@ -12,8 +12,9 @@ import ( ristretto_store "github.com/eko/gocache/store/ristretto/v4" "github.com/redis/go-redis/v9" "github.com/rs/zerolog/log" + "git.mstar.dev/mstar/linstrom/config" - "git.mstar.dev/mstar/linstrom/util" + "git.mstar.dev/mstar/linstrom/shared" ) type Cache struct { @@ -73,7 +74,7 @@ func NewCache(maxSize int64, redisUrl *string) (*Cache, error) { } func (c *Cache) Get(key string, target any) (bool, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return false, nil data, err := c.cache.Get(ctxBackground, key) if err != nil { @@ -87,7 +88,7 @@ func (c *Cache) Get(key string, target any) (bool, error) { } func (c *Cache) Set(key string, value any) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return nil data, err := c.encoders.Encode(value) if err != nil { @@ -98,7 +99,7 @@ func (c *Cache) Set(key string, value any) error { } func (c *Cache) Delete(key string) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // Error return doesn't matter here. Delete is delete is gone _ = c.cache.Delete(ctxBackground, key) } diff --git a/storage/inboundJobs.go b/storage/inboundJobs.go index df3c0e2..52018ad 100644 --- a/storage/inboundJobs.go +++ b/storage/inboundJobs.go @@ -2,8 +2,9 @@ package storage import ( "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) // Auto-generate string names for the various constants @@ -37,7 +38,7 @@ type InboundJob struct { } func (s *Storage) AddNewInboundJob(data []byte, source InboundJobSource, inboxOwner *string) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) newJob := InboundJob{ RawData: data, Source: source, @@ -48,7 +49,7 @@ func (s *Storage) AddNewInboundJob(data []byte, source InboundJobSource, inboxOw // Get the specified amount of jobs, sorted by age (oldest first) func (s *Storage) GetOldestInboundJobs(amount uint) ([]InboundJob, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) jobs := []InboundJob{} switch err := s.db.Order("id asc, created_at asc").Limit(int(amount)).Find(jobs).Error; err { case gorm.ErrRecordNotFound: @@ -61,7 +62,7 @@ func (s *Storage) GetOldestInboundJobs(amount uint) ([]InboundJob, error) { } func (s *Storage) CompleteInboundJob(id uint) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) s.db.Delete(InboundJob{Model: gorm.Model{ID: id}}) return nil } diff --git a/storage/mediaFile.go b/storage/mediaFile.go index e83cb25..4f45079 100644 --- a/storage/mediaFile.go +++ b/storage/mediaFile.go @@ -4,8 +4,9 @@ import ( "time" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) // MediaMetadata contains metadata about some media @@ -36,7 +37,7 @@ type MediaMetadata struct { func (s *Storage) NewMediaMetadata( ownerId, location, mediaType, name string, ) (*MediaMetadata, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) newMedia := MediaMetadata{ OwnedBy: ownerId, Location: location, @@ -48,7 +49,7 @@ func (s *Storage) NewMediaMetadata( } func (s *Storage) FuzzyFindMediaMetadataByName(name string) ([]MediaMetadata, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) notes := []MediaMetadata{} err := s.db.Where("name LIKE %?%", name).Find(notes).Error if err != nil { @@ -58,7 +59,7 @@ func (s *Storage) FuzzyFindMediaMetadataByName(name string) ([]MediaMetadata, er } func (s *Storage) GetMediaMetadataById(id string) (*MediaMetadata, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) media := MediaMetadata{ID: id} err := s.db.First(&media).Error if err != nil { @@ -68,7 +69,7 @@ func (s *Storage) GetMediaMetadataById(id string) (*MediaMetadata, error) { } func (s *Storage) FuzzyFindMediaMetadataByLocation(location string) ([]MediaMetadata, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) data := []MediaMetadata{} if err := s.db.Where("location LIKE %?%", location).Find(data).Error; err != nil { return nil, err @@ -77,18 +78,18 @@ func (s *Storage) FuzzyFindMediaMetadataByLocation(location string) ([]MediaMeta } func (s *Storage) DeleteMediaMetadataById(id string) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Delete(MediaMetadata{ID: id}).Error } func (s *Storage) DeleteMediaMetadataByFuzzyLocation(location string) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) var tmp MediaMetadata return s.db.Where("location LIKE %?%", location).Delete(&tmp).Error } func (s *Storage) DeleteMediaMetadataByFuzzyName(name string) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) var tmp MediaMetadata return s.db.Where("name LIKE %?%", name).Delete(&tmp).Error } diff --git a/storage/notes.go b/storage/notes.go index fd87cec..3c40fae 100644 --- a/storage/notes.go +++ b/storage/notes.go @@ -5,8 +5,9 @@ import ( "time" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) // Note represents an ActivityPub note @@ -41,7 +42,7 @@ type Note struct { } func (s *Storage) FindNoteById(id string) (*Note, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) note := &Note{} cacheNote, err := s.cacheNoteIdToData(id) switch err { @@ -70,7 +71,7 @@ func (s *Storage) FindNoteById(id string) (*Note, error) { } func (s *Storage) FindNotesByFuzzyContent(fuzzyContent string) ([]Note, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) notes := []Note{} // TODO: Figure out if cache can be used here too err := s.db.Where("raw_content LIKE %?%", fuzzyContent).Find(notes).Error @@ -81,7 +82,7 @@ func (s *Storage) FindNotesByFuzzyContent(fuzzyContent string) ([]Note, error) { } func (s *Storage) FindNotesByAuthorHandle(handle string) ([]Note, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) acc, err := s.FindAccountByFullHandle(handle) if err != nil { return nil, fmt.Errorf("account with handle %s not found: %w", handle, err) @@ -90,7 +91,7 @@ func (s *Storage) FindNotesByAuthorHandle(handle string) ([]Note, error) { } func (s *Storage) FindNotesByAuthorId(id string) ([]Note, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) notes := []Note{} err := s.db.Where("creator = ?", id).Find(notes).Error switch err { @@ -104,7 +105,7 @@ func (s *Storage) FindNotesByAuthorId(id string) ([]Note, error) { } func (s *Storage) UpdateNote(note *Note) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) if note == nil || note.ID == "" { return ErrInvalidData } @@ -133,7 +134,7 @@ func (s *Storage) CreateNoteLocal( accessLevel NoteAccessLevel, tags []string, ) (*Note, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // TODO: Implement me panic("not implemented") } @@ -151,13 +152,13 @@ func (s *Storage) CreateNoteRemote( tags []string, originId string, ) (*Note, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // TODO: Implement me panic("not implemented") } func (s *Storage) DeleteNote(id string) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) s.cache.Delete(cacheNoteIdToNotePrefix + id) s.db.Delete(Note{ID: id}) } diff --git a/storage/outboundJobs.go b/storage/outboundJobs.go index 99e3eac..0fe6995 100644 --- a/storage/outboundJobs.go +++ b/storage/outboundJobs.go @@ -2,8 +2,9 @@ package storage import ( "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) type OutboundJob struct { @@ -15,7 +16,7 @@ type OutboundJob struct { } func (s *Storage) AddNewOutboundJob(data []byte, targetDomain string, targetUrl string) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) newJob := OutboundJob{ Data: data, TargetServer: targetDomain, @@ -26,7 +27,7 @@ func (s *Storage) AddNewOutboundJob(data []byte, targetDomain string, targetUrl // Get the specified amount of jobs, sorted by age (oldest first) func (s *Storage) GetOldestOutboundJobs(amount uint) ([]OutboundJob, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) jobs := []OutboundJob{} err := s.db.Order("id asc, created_at asc").Limit(int(amount)).Find(jobs).Error switch err { @@ -40,7 +41,7 @@ func (s *Storage) GetOldestOutboundJobs(amount uint) ([]OutboundJob, error) { } func (s *Storage) GetOutboundJobsForDomain(domain string, amount uint) ([]OutboundJob, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) jobs := []OutboundJob{} err := s.db.Where("target_server = ?", domain). Order("id asc, created_at asc"). @@ -58,7 +59,7 @@ func (s *Storage) GetOutboundJobsForDomain(domain string, amount uint) ([]Outbou } func (s *Storage) CompleteOutboundJob(id uint) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) s.db.Delete(OutboundJob{Model: gorm.Model{ID: id}}) return nil } diff --git a/storage/passkeySessions.go b/storage/passkeySessions.go index 62c0cf6..97ca0d6 100644 --- a/storage/passkeySessions.go +++ b/storage/passkeySessions.go @@ -4,7 +4,8 @@ import ( "github.com/go-webauthn/webauthn/webauthn" "github.com/google/uuid" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" + + "git.mstar.dev/mstar/linstrom/shared" ) // Session data used during login attempts with a passkey @@ -19,7 +20,7 @@ type PasskeySession struct { // Generate some id for a new session. Just returns a new uuid func (s *Storage) GenSessionID() (string, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) x := uuid.NewString() log.Debug().Str("session-id", x).Msg("Generated new passkey session id") return x, nil @@ -28,7 +29,7 @@ func (s *Storage) GenSessionID() (string, error) { // Look for an active session with a given id // Returns the session if found and a bool indicating if a session was found func (s *Storage) GetSession(sessionId string) (*webauthn.SessionData, bool) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Str("id", sessionId).Msg("Looking for passkey session") session := PasskeySession{} res := s.db.Where("id = ?", sessionId).First(&session) @@ -41,7 +42,7 @@ func (s *Storage) GetSession(sessionId string) (*webauthn.SessionData, bool) { // Save (or update) a session with the new data func (s *Storage) SaveSession(token string, data *webauthn.SessionData) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Str("id", token).Any("webauthn-data", data).Msg("Saving passkey session") session := PasskeySession{ ID: token, @@ -53,7 +54,7 @@ func (s *Storage) SaveSession(token string, data *webauthn.SessionData) { // Delete a session // NOTE: This is a hard delete since the session struct contains no DeletedAt field func (s *Storage) DeleteSession(token string) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Str("id", token).Msg("Deleting passkey session (if one exists)") s.db.Delete(&PasskeySession{ID: token}) } diff --git a/storage/remoteServerInfo.go b/storage/remoteServerInfo.go index 6fdd90e..fec15ad 100644 --- a/storage/remoteServerInfo.go +++ b/storage/remoteServerInfo.go @@ -2,8 +2,9 @@ package storage import ( "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) type RemoteServer struct { @@ -16,7 +17,7 @@ type RemoteServer struct { } func (s *Storage) FindRemoteServerByDomain(url string) (*RemoteServer, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) server := RemoteServer{} err := s.db.Where("domain = ?").First(&server).Error switch err { @@ -31,7 +32,7 @@ func (s *Storage) FindRemoteServerByDomain(url string) (*RemoteServer, error) { // Find a remote server with a given display name func (s *Storage) FindRemoteServerByDisplayName(displayName string) (*RemoteServer, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) server := RemoteServer{} err := s.db.Where("name = ?", displayName).First(&server).Error switch err { @@ -45,7 +46,7 @@ func (s *Storage) FindRemoteServerByDisplayName(displayName string) (*RemoteServ } func (s *Storage) FindRemoteServerById(id uint) (*RemoteServer, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) server := RemoteServer{} err := s.db.First(&server, id).Error switch err { @@ -63,7 +64,7 @@ func (s *Storage) NewRemoteServer( url, displayName, icon string, serverType RemoteServerType, ) (*RemoteServer, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) _, err := s.FindRemoteServerByDomain(url) switch err { case nil: @@ -90,7 +91,7 @@ func (s *Storage) NewRemoteServer( // If icon is set, update that // Returns the updated version func (s *Storage) UpdateRemoteServer(url string, displayName, icon *string) (*RemoteServer, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) if displayName == nil && icon == nil { return nil, ErrNothingToChange } diff --git a/storage/roles.go b/storage/roles.go index 2f50d37..c822883 100644 --- a/storage/roles.go +++ b/storage/roles.go @@ -2,9 +2,10 @@ package storage import ( "git.mstar.dev/mstar/goutils/sliceutils" - "git.mstar.dev/mstar/linstrom/util" "github.com/rs/zerolog/log" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) // Could I collapse all these go:generate command into more condensed ones? @@ -14,7 +15,7 @@ import ( // This is explicit in what is being done. And easier to understand //go:generate go build -o RolesGenerator ../cmd/RolesGenerator/main.go -//go:generate ./RolesGenerator -input=roles.go -output=rolesUtil_generated.go +//go:generate ./RolesGenerator -input=roles.go -output=rolesshared_generated.go //go:generate rm RolesGenerator //go:generate go build -o ApiGenerator ../cmd/RolesApiTypeGenerator/main.go @@ -186,7 +187,7 @@ Misskey "permissions" (no order): */ func (s *Storage) NewEmptyRole(name string) (*Role, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // Check if a role with the given name already exists _, err := s.FindRoleByName(name) switch err { @@ -207,7 +208,7 @@ func (s *Storage) NewEmptyRole(name string) (*Role, error) { } func (s *Storage) FindRoleByName(name string) (*Role, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) role := Role{} err := s.db.Where("name = ?", name).First(&role).Error switch err { @@ -221,7 +222,7 @@ func (s *Storage) FindRoleByName(name string) (*Role, error) { } func (s *Storage) FindRolesByNames(names []string) ([]Role, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) roles := []Role{} err := s.db.Where("name IN ?", names).Find(&roles).Error switch err { @@ -235,7 +236,7 @@ func (s *Storage) FindRolesByNames(names []string) ([]Role, error) { } func (s *Storage) UpdateRole(role *Role) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Save(role).Error } @@ -247,6 +248,6 @@ func (s *Storage) DeleteRoleByName(name string) error { ) { return ErrNotAllowed } - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Where(&Role{Name: name, IsBuiltIn: false}).Delete(&Role{}).Error } diff --git a/storage/storage.go b/storage/storage.go index 527d134..47f92ce 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -10,11 +10,12 @@ import ( "fmt" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/config" - "git.mstar.dev/mstar/linstrom/storage/cache" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/driver/postgres" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/config" + "git.mstar.dev/mstar/linstrom/shared" + "git.mstar.dev/mstar/linstrom/storage/cache" ) // Always keep a reference of the server's own RemoteServer entry here @@ -30,7 +31,7 @@ type Storage struct { } func NewStorage(dbUrl string, cache *cache.Cache) (*Storage, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) db, err := gorm.Open(postgres.Open(dbUrl), &gorm.Config{ Logger: newGormLogger(log.Logger), }) @@ -73,7 +74,7 @@ func NewStorage(dbUrl string, cache *cache.Cache) (*Storage, error) { } func (s *Storage) insertSelfFromConfig() error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) const ServerActorId = "self" var err error @@ -139,7 +140,7 @@ func (s *Storage) insertSelfFromConfig() error { } func (s *Storage) insertDefaultRoles() error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) for _, role := range allDefaultRoles { log.Debug().Str("role-name", role.Name).Msg("Inserting default role") if err := s.db.FirstOrCreate(role).Error; err != nil { @@ -150,7 +151,7 @@ func (s *Storage) insertDefaultRoles() error { } func (s *Storage) insertPlaceholderFile() error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Model(&MediaMetadata{}).Assign(&MediaMetadata{ ID: "placeholder", Type: "image/webp", diff --git a/storage/user.go b/storage/user.go index 1c8a4b6..725a19f 100644 --- a/storage/user.go +++ b/storage/user.go @@ -8,12 +8,12 @@ import ( "strings" "time" + "git.mstar.dev/mstar/linstrom/ap" + "git.mstar.dev/mstar/linstrom/shared" "github.com/go-webauthn/webauthn/webauthn" "github.com/google/uuid" "github.com/mstarongithub/passkey" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/ap" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" ) @@ -102,7 +102,7 @@ type RemoteAccountLinks struct { // Find an account in the db using a given full handle (@max@example.com) // Returns an account and nil if an account is found, otherwise nil and the error func (s *Storage) FindAccountByFullHandle(handle string) (*Account, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Str("account-handle", handle).Msg("Looking for account by handle") log.Debug().Str("account-handle", handle).Msg("Checking if there's a cache hit") @@ -155,7 +155,7 @@ func (s *Storage) FindAccountByFullHandle(handle string) (*Account, error) { // Find an account given a specific ID func (s *Storage) FindAccountById(id string) (*Account, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Str("account-id", id).Msg("Looking for account by id") log.Debug().Str("account-id", id).Msg("First trying to hit cache") acc, err := s.cacheAccIdToData(id) @@ -187,7 +187,7 @@ func (s *Storage) FindAccountById(id string) (*Account, error) { } func (s *Storage) FindLocalAccountByUsername(username string) (*Account, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Str("account-username", username).Msg("Looking for local account") log.Debug().Str("account-username", username).Msg("Checking cache first") @@ -238,7 +238,7 @@ func (s *Storage) FindLocalAccountByUsername(username string) (*Account, error) } func (s *Storage) FindAccountByPasskeyId(pkeyId []byte) (*Account, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Bytes("account-passkey-id", pkeyId).Msg("Looking for account") log.Debug().Bytes("account-passkey-id", pkeyId).Msg("Checking cache first") @@ -290,7 +290,7 @@ func (s *Storage) FindAccountByPasskeyId(pkeyId []byte) (*Account, error) { // Update a given account in storage and cache func (s *Storage) UpdateAccount(acc *Account) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) // If the account is nil or doesn't have an id, error out if acc == nil || acc.ID == "" { return ErrInvalidData @@ -307,7 +307,7 @@ func (s *Storage) UpdateAccount(acc *Account) error { // Create a new empty account for future use func (s *Storage) NewEmptyAccount() (*Account, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Msg("Creating new empty account") acc := Account{} // Generate the 64 bit id for passkey and webauthn stuff @@ -353,7 +353,7 @@ func (s *Storage) NewEmptyAccount() (*Account, error) { // The handle in this case is only the part before the domain (example: @bob@example.com would have a handle of bob) // It also sets up a bunch of values that tend to be obvious for local accounts func (s *Storage) NewLocalAccount(handle string) (*Account, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Trace().Caller().Send() log.Debug().Str("account-handle", handle).Msg("Creating new local account") acc, err := s.NewEmptyAccount() @@ -391,7 +391,7 @@ func (s *Storage) NewLocalAccount(handle string) (*Account, error) { } func (s *Storage) DeleteAccount(accId string) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Delete(&Account{ID: accId}).Error } @@ -399,27 +399,27 @@ func (s *Storage) DeleteAccount(accId string) error { // Implements the webauthn.User interface for interaction with passkeys func (a *Account) WebAuthnID() []byte { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return a.WebAuthnId } func (u *Account) WebAuthnName() string { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return u.Username } func (u *Account) WebAuthnDisplayName() string { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return u.DisplayName } func (u *Account) WebAuthnCredentials() []webauthn.Credential { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return u.PasskeyCredentials } func (u *Account) WebAuthnIcon() string { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return "" } @@ -427,7 +427,7 @@ func (u *Account) WebAuthnIcon() string { // Implements the passkey.User interface func (u *Account) PutCredential(new webauthn.Credential) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) u.PasskeyCredentials = append(u.PasskeyCredentials, new) } @@ -435,7 +435,7 @@ func (u *Account) PutCredential(new webauthn.Credential) { // Implements the passkey.UserStore interface func (s *Storage) GetOrCreateUser(userID string) passkey.User { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug(). Str("account-handle", userID). Msg("Looking for or creating account for passkey stuff") @@ -458,7 +458,7 @@ func (s *Storage) GetOrCreateUser(userID string) passkey.User { } func (s *Storage) GetUserByWebAuthnId(id []byte) passkey.User { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) log.Debug().Bytes("webauthn-id", id).Msg("Looking for account with webauthn id") acc := Account{} res := s.db.Where(Account{WebAuthnId: id}).First(&acc) @@ -474,7 +474,7 @@ func (s *Storage) GetUserByWebAuthnId(id []byte) passkey.User { } func (s *Storage) SaveUser(rawUser passkey.User) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) user, ok := rawUser.(*Account) if !ok { log.Error().Any("raw-user", rawUser).Msg("Failed to cast raw user to db account") diff --git a/storage/userInfoFields.go b/storage/userInfoFields.go index 8cb1658..3c66b90 100644 --- a/storage/userInfoFields.go +++ b/storage/userInfoFields.go @@ -4,8 +4,9 @@ import ( "time" "github.com/rs/zerolog/log" - "git.mstar.dev/mstar/linstrom/util" "gorm.io/gorm" + + "git.mstar.dev/mstar/linstrom/shared" ) // Describes a custom attribute field for accounts @@ -24,7 +25,7 @@ type UserInfoField struct { // TODO: Add functions to store, load, update and delete these func (s *Storage) FindUserFieldById(id uint) (*UserInfoField, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) entry := UserInfoField{} err := s.db.First(&entry, id).Error switch err { @@ -38,7 +39,7 @@ func (s *Storage) FindUserFieldById(id uint) (*UserInfoField, error) { } func (s *Storage) FindMultipleUserFieldsById(ids []uint) ([]UserInfoField, error) { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) entries := []UserInfoField{} err := s.db.Where(ids).Find(&entries).Error switch err { @@ -57,12 +58,12 @@ func (s *Storage) AddNewUserField(name, value, belongsToId string) (*UserInfoFie } func (s *Storage) DeleteUserField(id uint) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Delete(UserInfoField{Model: gorm.Model{ID: id}}).Error } func (s *Storage) DeleteAllUserFieldsForAccountId(id string) error { - defer util.Untrace(util.Trace(&log.Logger)) + defer shared.Untrace(shared.Trace(&log.Logger)) return s.db.Model(&UserInfoField{}). Where(&UserInfoField{BelongsTo: id}). Delete(&UserInfoField{}).