@@ -4,9 +4,12 @@ import (
44 "fmt"
55 "os"
66 "path/filepath"
7+ "time"
8+
9+ "strconv"
710
8- "github.com/Preloading/MastodonTwitterAPI/bridge"
911 "github.com/Preloading/MastodonTwitterAPI/config"
12+ authcrypt "github.com/Preloading/MastodonTwitterAPI/cryption"
1013 "github.com/google/uuid"
1114 "gorm.io/driver/mysql"
1215 "gorm.io/driver/postgres"
@@ -54,6 +57,13 @@ type Token struct {
5457 RefreshExpiry float64 `gorm:"type:float;not null"`
5558}
5659
60+ type TwitterIDs struct {
61+ BlueskyID string `gorm:"type:string;not null"`
62+ TwitterID string `gorm:"type:string;primaryKey;not null"` // Ensure this has a unique constraint
63+ ReposterDid * string `gorm:"type:string"`
64+ DateCreated * time.Time `gorm:"type:timestamp"`
65+ }
66+
5767type MessageContext struct {
5868 UserDid string `gorm:"type:string;primaryKey;not null"`
5969 TokenUUID string `gorm:"type:string;primaryKey;not null"`
@@ -90,6 +100,7 @@ func InitDB(cfg config.Config) {
90100 // Auto-migrate the schema
91101 db .AutoMigrate (& Token {})
92102 db .AutoMigrate (& MessageContext {})
103+ db .AutoMigrate (& TwitterIDs {})
93104}
94105
95106// StoreToken stores an encrypted access token and refresh token in the database.
@@ -124,12 +135,12 @@ func StoreToken(did string, pds string, accessToken string, refreshToken string,
124135}
125136
126137func UpdateToken (uuid string , did string , pds string , accessToken string , refreshToken string , encryptionKey string , accessExpiry float64 , refreshExpiry float64 ) (* string , error ) {
127- encryptedAccess , err := bridge .Encrypt (accessToken , encryptionKey )
138+ encryptedAccess , err := authcrypt .Encrypt (accessToken , encryptionKey )
128139 if err != nil {
129140 return nil , fmt .Errorf ("failed to encrypt access token: %v" , err )
130141 }
131142
132- encryptedRefresh , err := bridge .Encrypt (refreshToken , encryptionKey )
143+ encryptedRefresh , err := authcrypt .Encrypt (refreshToken , encryptionKey )
133144 if err != nil {
134145 return nil , fmt .Errorf ("failed to encrypt refresh token: %v" , err )
135146 }
@@ -168,15 +179,63 @@ func GetToken(did string, tokenUUID string, encryptionKey string) (*string, *str
168179 return nil , nil , nil , nil , nil , err
169180 }
170181
171- accessToken , err := bridge .Decrypt (token .EncryptedAccessToken , encryptionKey )
182+ accessToken , err := authcrypt .Decrypt (token .EncryptedAccessToken , encryptionKey )
172183 if err != nil {
173184 return nil , nil , nil , nil , nil , err
174185 }
175186
176- refreshToken , err := bridge .Decrypt (token .EncryptedRefreshToken , encryptionKey )
187+ refreshToken , err := authcrypt .Decrypt (token .EncryptedRefreshToken , encryptionKey )
177188 if err != nil {
178189 return nil , nil , nil , nil , nil , err
179190 }
180191
181192 return & accessToken , & refreshToken , & token .AccessExpiry , & token .RefreshExpiry , & token .UserPDS , nil
182193}
194+
195+ // Stores ID data in the database.
196+ // @params: twitterID, blueskyID, dateCreated, reposterDid
197+ // @results: error
198+ func StoreTwitterIdInDatabase (twitterID * int64 , blueskyId string , dateCreated * time.Time , reposterDid * string ) error {
199+ if twitterID == nil {
200+ return fmt .Errorf ("twitterID is nil" )
201+ }
202+
203+ storedData := TwitterIDs {
204+ TwitterID : strconv .FormatInt (* twitterID , 10 ), // Convert *int64 to string
205+ BlueskyID : blueskyId ,
206+ DateCreated : dateCreated ,
207+ ReposterDid : reposterDid ,
208+ }
209+
210+ result := db .Clauses (clause.OnConflict {
211+ Columns : []clause.Column {
212+ {Name : "twitter_id" },
213+ },
214+ UpdateAll : true ,
215+ }).Create (& storedData )
216+
217+ if result .Error != nil {
218+ // If there's an error, try updating the existing record
219+ fmt .Println ("Error:" , result .Error )
220+ panic (result .Error )
221+ //return db.Model(&TwitterIDs{}).Where("twitter_id = ?", strconv.FormatUint(twitterID, 10)).Updates(storedData).Error
222+ }
223+
224+ return nil
225+ }
226+
227+ // Gets a twitter id from the database
228+ // @params: twitterID
229+ // @results: blueskyID, dateCreated, reposterDid, error
230+ func GetTwitterIDFromDatabase (twitterID * int64 ) (* string , * time.Time , * string , error ) {
231+ if twitterID == nil {
232+ return nil , nil , nil , fmt .Errorf ("twitterID is nil" )
233+ }
234+
235+ var blueskyID TwitterIDs
236+ if err := db .Where ("twitter_id = ?" , strconv .FormatInt (* twitterID , 10 )).First (& blueskyID ).Error ; err != nil {
237+ return nil , nil , nil , err
238+ }
239+
240+ return & blueskyID .BlueskyID , blueskyID .DateCreated , blueskyID .ReposterDid , nil
241+ }
0 commit comments