Skip to content

Commit 58a6df1

Browse files
committed
fix: auth again
1 parent cef3ba0 commit 58a6df1

4 files changed

Lines changed: 49 additions & 36 deletions

File tree

db_controller/db_controller.go

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/google/uuid"
1111
"gorm.io/driver/sqlite"
1212
"gorm.io/gorm"
13+
"gorm.io/gorm/clause"
1314
)
1415

1516
// I will most likely need to store auth tokens in a database, as I can only really get one auth related value from the user, and I can't change that value.
@@ -42,19 +43,19 @@ import (
4243

4344
// Token represents the schema for the tokens table
4445
type Token struct {
45-
UserDID string `gorm:"column:user_did"`
46-
TokenUUID string `gorm:"column:token_uuid"`
47-
EncryptedAccessToken string `gorm:"column:encrypted_access_token"`
48-
EncryptedRefreshToken string `gorm:"column:encrypted_refresh_token"`
49-
AccessExpiry float64 `gorm:"column:access_expiry"`
50-
RefreshExpiry float64 `gorm:"column:refresh_expiry"`
46+
UserDid string `gorm:"type:string;primaryKey;not null"`
47+
TokenUUID string `gorm:"type:string;primaryKey;not null"`
48+
EncryptedAccessToken string `gorm:"type:string;not null"`
49+
EncryptedRefreshToken string `gorm:"type:string;not null"`
50+
AccessExpiry float64 `gorm:"type:float;not null"`
51+
RefreshExpiry float64 `gorm:"type:float;not null"`
5152
}
5253

5354
type MessageContext struct {
54-
UserDID string `gorm:"column:user_did"`
55-
TokenUUID string `gorm:"column:token_uuid"`
56-
LastMessageId string `gorm:"column:message_id"`
57-
TimelineContext string `gorm:"column:timeline_context"`
55+
UserDid string `gorm:"type:string;primaryKey;not null"`
56+
TokenUUID string `gorm:"type:string;primaryKey;not null"`
57+
LastMessageId string `gorm:"type:string;not null"`
58+
TimelineContext string `gorm:"type:string;not null"`
5859
}
5960

6061
var db *gorm.DB
@@ -121,29 +122,35 @@ func StoreToken(did string, accessToken string, refreshToken string, encryptionK
121122
}
122123

123124
func UpdateToken(uuid string, did string, accessToken string, refreshToken string, encryptionKey string, accessExpiry float64, refreshExpiry float64) (*string, error) {
125+
encryptedAccess, err := bridge.Encrypt(accessToken, encryptionKey)
126+
if err != nil {
127+
return nil, fmt.Errorf("failed to encrypt access token: %v", err)
128+
}
129+
130+
encryptedRefresh, err := bridge.Encrypt(refreshToken, encryptionKey)
131+
if err != nil {
132+
return nil, fmt.Errorf("failed to encrypt refresh token: %v", err)
133+
}
134+
124135
token := Token{
125-
UserDID: did,
126-
TokenUUID: uuid,
127-
EncryptedAccessToken: func() string {
128-
encryptedToken, err := bridge.Encrypt(accessToken, encryptionKey)
129-
if err != nil {
130-
panic("failed to encrypt access token")
131-
}
132-
return encryptedToken
133-
}(),
134-
EncryptedRefreshToken: func() string {
135-
encryptedToken, err := bridge.Encrypt(refreshToken, encryptionKey)
136-
if err != nil {
137-
panic("failed to encrypt refresh token")
138-
}
139-
return encryptedToken
140-
}(),
141-
AccessExpiry: accessExpiry,
142-
RefreshExpiry: refreshExpiry,
143-
}
144-
145-
if err := db.Where("user_did = ? AND token_uuid = ?", did, uuid).Assign(&token).FirstOrCreate(&token).Error; err != nil {
146-
return nil, err
136+
UserDid: did,
137+
TokenUUID: uuid,
138+
EncryptedAccessToken: encryptedAccess,
139+
EncryptedRefreshToken: encryptedRefresh,
140+
AccessExpiry: accessExpiry,
141+
RefreshExpiry: refreshExpiry,
142+
}
143+
144+
result := db.Clauses(clause.OnConflict{
145+
Columns: []clause.Column{
146+
{Name: "user_did"},
147+
{Name: "token_uuid"},
148+
},
149+
UpdateAll: true,
150+
}).Create(&token)
151+
152+
if result.Error != nil {
153+
return nil, result.Error
147154
}
148155

149156
return &token.TokenUUID, nil
@@ -189,7 +196,7 @@ func SetTimelineContext(did string, tokenUUID string, lastMessageId big.Int, tim
189196
}
190197

191198
messageContext := MessageContext{
192-
UserDID: did,
199+
UserDid: did,
193200
TokenUUID: tokenUUID,
194201
LastMessageId: encryptedLastMessageId,
195202
TimelineContext: encryptedTimelineContext,

twitterv1/cdnproxy.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"image/jpeg"
88
"image/png"
99
"net/http"
10+
"net/url"
1011
"strconv"
1112
"strings"
1213

@@ -16,6 +17,11 @@ import (
1617

1718
func CDNDownscaler(c *fiber.Ctx) error {
1819
imageURL := c.Query("url")
20+
unescapedURL, err := url.QueryUnescape(imageURL)
21+
if err != nil {
22+
return c.Status(fiber.StatusBadRequest).SendString("Invalid URL")
23+
}
24+
imageURL = unescapedURL
1925
fmt.Println(imageURL)
2026
if !strings.HasPrefix(imageURL, "https://cdn.bsky.app/img/") { // Later maybe lift these restrictions?
2127
return c.SendStatus(fiber.StatusBadRequest)

twitterv1/twitterv1.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ func InitServer() {
4141

4242
// Users
4343
app.Get("/1/users/show.xml", user_info)
44-
app.Get("/1/users/lookup.json", UserLookup)
45-
app.Post("/1/users/lookup.json", UserLookup)
44+
app.Get("/1/users/lookup.json", UsersLookup)
45+
app.Post("/1/users/lookup.json", UsersLookup)
4646

4747
// Connect
4848
app.Get("/1/users/search.json", UserSearch)

twitterv1/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func user_info(c *fiber.Ctx) error {
6262
}
6363

6464
// https://web.archive.org/web/20120508165240/https://dev.twitter.com/docs/api/1/get/users/lookup
65-
func UserLookup(c *fiber.Ctx) error {
65+
func UsersLookup(c *fiber.Ctx) error {
6666
screen_name := c.Query("screen_name")
6767
user_id := c.Query("user_id")
6868
var usersToLookUp []string

0 commit comments

Comments
 (0)