Fix some more things
This commit is contained in:
parent
a46bf9878b
commit
a32982cb7f
|
@ -38,13 +38,13 @@ CREATE TABLE IF NOT EXISTS userapi_account_datas (
|
||||||
-- The account data content
|
-- The account data content
|
||||||
content TEXT NOT NULL,
|
content TEXT NOT NULL,
|
||||||
|
|
||||||
PRIMARY KEY(localpart, room_id, type)
|
PRIMARY KEY(localpart, server_name, room_id, type)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
const insertAccountDataSQL = `
|
const insertAccountDataSQL = `
|
||||||
INSERT INTO userapi_account_datas(localpart, server_name, room_id, type, content) VALUES($1, $2, $3, $4, $5)
|
INSERT INTO userapi_account_datas(localpart, server_name, room_id, type, content) VALUES($1, $2, $3, $4, $5)
|
||||||
ON CONFLICT (localpart, room_id, type) DO UPDATE SET content = EXCLUDED.content
|
ON CONFLICT (localpart, server_name, room_id, type) DO UPDATE SET content = EXCLUDED.content
|
||||||
`
|
`
|
||||||
|
|
||||||
const selectAccountDataSQL = "" +
|
const selectAccountDataSQL = "" +
|
||||||
|
|
|
@ -35,7 +35,7 @@ const accountsSchema = `
|
||||||
-- Stores data about accounts.
|
-- Stores data about accounts.
|
||||||
CREATE TABLE IF NOT EXISTS userapi_accounts (
|
CREATE TABLE IF NOT EXISTS userapi_accounts (
|
||||||
-- The Matrix user ID localpart for this account
|
-- The Matrix user ID localpart for this account
|
||||||
localpart TEXT NOT NULL PRIMARY KEY,
|
localpart TEXT NOT NULL,
|
||||||
server_name TEXT NOT NULL,
|
server_name TEXT NOT NULL,
|
||||||
-- When this account was first created, as a unix timestamp (ms resolution).
|
-- When this account was first created, as a unix timestamp (ms resolution).
|
||||||
created_ts BIGINT NOT NULL,
|
created_ts BIGINT NOT NULL,
|
||||||
|
@ -46,9 +46,10 @@ CREATE TABLE IF NOT EXISTS userapi_accounts (
|
||||||
-- If the account is currently active
|
-- If the account is currently active
|
||||||
is_deactivated BOOLEAN DEFAULT FALSE,
|
is_deactivated BOOLEAN DEFAULT FALSE,
|
||||||
-- The account_type (user = 1, guest = 2, admin = 3, appservice = 4)
|
-- The account_type (user = 1, guest = 2, admin = 3, appservice = 4)
|
||||||
account_type SMALLINT NOT NULL
|
account_type SMALLINT NOT NULL,
|
||||||
-- TODO:
|
-- TODO:
|
||||||
-- upgraded_ts, devices, any email reset stuff?
|
-- upgraded_ts, devices, any email reset stuff?
|
||||||
|
PRIMARY KEY (localpart, server_name)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -138,8 +139,8 @@ func (s *accountsStatements) InsertAccount(
|
||||||
|
|
||||||
return &api.Account{
|
return &api.Account{
|
||||||
Localpart: localpart,
|
Localpart: localpart,
|
||||||
UserID: userutil.MakeUserID(localpart, s.serverName),
|
UserID: userutil.MakeUserID(localpart, serverName),
|
||||||
ServerName: s.serverName,
|
ServerName: serverName,
|
||||||
AppServiceID: appserviceID,
|
AppServiceID: appserviceID,
|
||||||
AccountType: accountType,
|
AccountType: accountType,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -185,9 +186,7 @@ func (s *accountsStatements) SelectAccountByLocalpart(
|
||||||
acc.AppServiceID = appserviceIDPtr.String
|
acc.AppServiceID = appserviceIDPtr.String
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.UserID = userutil.MakeUserID(localpart, s.serverName)
|
acc.UserID = userutil.MakeUserID(acc.Localpart, acc.ServerName)
|
||||||
acc.ServerName = s.serverName
|
|
||||||
|
|
||||||
return &acc, nil
|
return &acc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ CREATE TABLE IF NOT EXISTS userapi_devices (
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Device IDs must be unique for a given user.
|
-- Device IDs must be unique for a given user.
|
||||||
CREATE UNIQUE INDEX IF NOT EXISTS userapi_device_localpart_id_idx ON userapi_devices(localpart, device_id);
|
CREATE UNIQUE INDEX IF NOT EXISTS userapi_device_localpart_id_idx ON userapi_devices(localpart, server_name, device_id);
|
||||||
`
|
`
|
||||||
|
|
||||||
const insertDeviceSQL = "" +
|
const insertDeviceSQL = "" +
|
||||||
|
|
|
@ -60,7 +60,7 @@ func (s *openIDTokenStatements) InsertOpenIDToken(
|
||||||
expiresAtMS int64,
|
expiresAtMS int64,
|
||||||
) (err error) {
|
) (err error) {
|
||||||
stmt := sqlutil.TxStmt(txn, s.insertTokenStmt)
|
stmt := sqlutil.TxStmt(txn, s.insertTokenStmt)
|
||||||
_, err = stmt.ExecContext(ctx, token, serverName, localpart, expiresAtMS)
|
_, err = stmt.ExecContext(ctx, token, localpart, serverName, expiresAtMS)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,12 +30,13 @@ const profilesSchema = `
|
||||||
-- Stores data about accounts profiles.
|
-- Stores data about accounts profiles.
|
||||||
CREATE TABLE IF NOT EXISTS userapi_profiles (
|
CREATE TABLE IF NOT EXISTS userapi_profiles (
|
||||||
-- The Matrix user ID localpart for this account
|
-- The Matrix user ID localpart for this account
|
||||||
localpart TEXT NOT NULL PRIMARY KEY,
|
localpart TEXT NOT NULL,
|
||||||
server_name TEXT NOT NULL,
|
server_name TEXT NOT NULL,
|
||||||
-- The display name for this account
|
-- The display name for this account
|
||||||
display_name TEXT,
|
display_name TEXT,
|
||||||
-- The URL of the avatar for this account
|
-- The URL of the avatar for this account
|
||||||
avatar_url TEXT
|
avatar_url TEXT,
|
||||||
|
PRIMARY KEY (localpart, server_name)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ CREATE TABLE IF NOT EXISTS userapi_threepids (
|
||||||
PRIMARY KEY(threepid, medium)
|
PRIMARY KEY(threepid, medium)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS userapi_threepid_idx ON userapi_threepids(localpart);
|
CREATE INDEX IF NOT EXISTS userapi_threepid_idx ON userapi_threepids(localpart, server_name);
|
||||||
`
|
`
|
||||||
|
|
||||||
const selectLocalpartForThreePIDSQL = "" +
|
const selectLocalpartForThreePIDSQL = "" +
|
||||||
|
|
|
@ -293,7 +293,7 @@ func (d *Database) SaveThreePIDAssociation(
|
||||||
medium string,
|
medium string,
|
||||||
) (err error) {
|
) (err error) {
|
||||||
return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
|
return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
|
||||||
user, domain, err := d.ThreePIDs.SelectLocalpartForThreePID(
|
user, _, err := d.ThreePIDs.SelectLocalpartForThreePID(
|
||||||
ctx, txn, threepid, medium,
|
ctx, txn, threepid, medium,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -304,7 +304,7 @@ func (d *Database) SaveThreePIDAssociation(
|
||||||
return Err3PIDInUse
|
return Err3PIDInUse
|
||||||
}
|
}
|
||||||
|
|
||||||
return d.ThreePIDs.InsertThreePID(ctx, txn, threepid, medium, localpart, domain)
|
return d.ThreePIDs.InsertThreePID(ctx, txn, threepid, medium, localpart, serverName)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,13 +37,13 @@ CREATE TABLE IF NOT EXISTS userapi_account_datas (
|
||||||
-- The account data content
|
-- The account data content
|
||||||
content TEXT NOT NULL,
|
content TEXT NOT NULL,
|
||||||
|
|
||||||
PRIMARY KEY(localpart, room_id, type)
|
PRIMARY KEY(localpart, server_name, room_id, type)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
const insertAccountDataSQL = `
|
const insertAccountDataSQL = `
|
||||||
INSERT INTO userapi_account_datas(localpart, server_name, room_id, type, content) VALUES($1, $2, $3, $4, $5)
|
INSERT INTO userapi_account_datas(localpart, server_name, room_id, type, content) VALUES($1, $2, $3, $4, $5)
|
||||||
ON CONFLICT (localpart, room_id, type) DO UPDATE SET content = $4
|
ON CONFLICT (localpart, server_name, room_id, type) DO UPDATE SET content = $4
|
||||||
`
|
`
|
||||||
|
|
||||||
const selectAccountDataSQL = "" +
|
const selectAccountDataSQL = "" +
|
||||||
|
|
|
@ -34,7 +34,7 @@ const accountsSchema = `
|
||||||
-- Stores data about accounts.
|
-- Stores data about accounts.
|
||||||
CREATE TABLE IF NOT EXISTS userapi_accounts (
|
CREATE TABLE IF NOT EXISTS userapi_accounts (
|
||||||
-- The Matrix user ID localpart for this account
|
-- The Matrix user ID localpart for this account
|
||||||
localpart TEXT NOT NULL PRIMARY KEY,
|
localpart TEXT NOT NULL,
|
||||||
server_name TEXT NOT NULL,
|
server_name TEXT NOT NULL,
|
||||||
-- When this account was first created, as a unix timestamp (ms resolution).
|
-- When this account was first created, as a unix timestamp (ms resolution).
|
||||||
created_ts BIGINT NOT NULL,
|
created_ts BIGINT NOT NULL,
|
||||||
|
@ -45,9 +45,10 @@ CREATE TABLE IF NOT EXISTS userapi_accounts (
|
||||||
-- If the account is currently active
|
-- If the account is currently active
|
||||||
is_deactivated BOOLEAN DEFAULT 0,
|
is_deactivated BOOLEAN DEFAULT 0,
|
||||||
-- The account_type (user = 1, guest = 2, admin = 3, appservice = 4)
|
-- The account_type (user = 1, guest = 2, admin = 3, appservice = 4)
|
||||||
account_type INTEGER NOT NULL
|
account_type INTEGER NOT NULL,
|
||||||
-- TODO:
|
-- TODO:
|
||||||
-- upgraded_ts, devices, any email reset stuff?
|
-- upgraded_ts, devices, any email reset stuff?
|
||||||
|
PRIMARY KEY (localpart, server_name)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -138,8 +139,8 @@ func (s *accountsStatements) InsertAccount(
|
||||||
|
|
||||||
return &api.Account{
|
return &api.Account{
|
||||||
Localpart: localpart,
|
Localpart: localpart,
|
||||||
UserID: userutil.MakeUserID(localpart, s.serverName),
|
UserID: userutil.MakeUserID(localpart, serverName),
|
||||||
ServerName: s.serverName,
|
ServerName: serverName,
|
||||||
AppServiceID: appserviceID,
|
AppServiceID: appserviceID,
|
||||||
AccountType: accountType,
|
AccountType: accountType,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -185,9 +186,7 @@ func (s *accountsStatements) SelectAccountByLocalpart(
|
||||||
acc.AppServiceID = appserviceIDPtr.String
|
acc.AppServiceID = appserviceIDPtr.String
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.UserID = userutil.MakeUserID(localpart, s.serverName)
|
acc.UserID = userutil.MakeUserID(acc.Localpart, acc.ServerName)
|
||||||
acc.ServerName = s.serverName
|
|
||||||
|
|
||||||
return &acc, nil
|
return &acc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ CREATE TABLE IF NOT EXISTS userapi_devices (
|
||||||
ip TEXT,
|
ip TEXT,
|
||||||
user_agent TEXT,
|
user_agent TEXT,
|
||||||
|
|
||||||
UNIQUE (localpart, device_id)
|
UNIQUE (localpart, server_name, device_id)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ func (s *devicesStatements) DeleteDevices(
|
||||||
params[0] = localpart
|
params[0] = localpart
|
||||||
params[1] = serverName
|
params[1] = serverName
|
||||||
for i, v := range devices {
|
for i, v := range devices {
|
||||||
params[i+1] = v
|
params[i+2] = v
|
||||||
}
|
}
|
||||||
_, err = stmt.ExecContext(ctx, params...)
|
_, err = stmt.ExecContext(ctx, params...)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -62,7 +62,7 @@ func (s *openIDTokenStatements) InsertOpenIDToken(
|
||||||
expiresAtMS int64,
|
expiresAtMS int64,
|
||||||
) (err error) {
|
) (err error) {
|
||||||
stmt := sqlutil.TxStmt(txn, s.insertTokenStmt)
|
stmt := sqlutil.TxStmt(txn, s.insertTokenStmt)
|
||||||
_, err = stmt.ExecContext(ctx, token, serverName, localpart, expiresAtMS)
|
_, err = stmt.ExecContext(ctx, token, localpart, serverName, expiresAtMS)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,12 +30,13 @@ const profilesSchema = `
|
||||||
-- Stores data about accounts profiles.
|
-- Stores data about accounts profiles.
|
||||||
CREATE TABLE IF NOT EXISTS userapi_profiles (
|
CREATE TABLE IF NOT EXISTS userapi_profiles (
|
||||||
-- The Matrix user ID localpart for this account
|
-- The Matrix user ID localpart for this account
|
||||||
localpart TEXT NOT NULL PRIMARY KEY,
|
localpart TEXT NOT NULL,
|
||||||
server_name TEXT NOT NULL,
|
server_name TEXT NOT NULL,
|
||||||
-- The display name for this account
|
-- The display name for this account
|
||||||
display_name TEXT,
|
display_name TEXT,
|
||||||
-- The URL of the avatar for this account
|
-- The URL of the avatar for this account
|
||||||
avatar_url TEXT
|
avatar_url TEXT,
|
||||||
|
PRIMARY KEY (localpart, server_name)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -135,6 +136,7 @@ func (s *profilesStatements) SetDisplayName(
|
||||||
) (*authtypes.Profile, bool, error) {
|
) (*authtypes.Profile, bool, error) {
|
||||||
profile := &authtypes.Profile{
|
profile := &authtypes.Profile{
|
||||||
Localpart: localpart,
|
Localpart: localpart,
|
||||||
|
ServerName: string(serverName),
|
||||||
DisplayName: displayName,
|
DisplayName: displayName,
|
||||||
}
|
}
|
||||||
old, err := s.SelectProfileByLocalpart(ctx, localpart, serverName)
|
old, err := s.SelectProfileByLocalpart(ctx, localpart, serverName)
|
||||||
|
|
|
@ -40,11 +40,11 @@ CREATE TABLE IF NOT EXISTS userapi_threepids (
|
||||||
PRIMARY KEY(threepid, medium)
|
PRIMARY KEY(threepid, medium)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS account_threepid_localpart ON userapi_threepids(localpart);
|
CREATE INDEX IF NOT EXISTS account_threepid_localpart ON userapi_threepids(localpart, server_name);
|
||||||
`
|
`
|
||||||
|
|
||||||
const selectLocalpartForThreePIDSQL = "" +
|
const selectLocalpartForThreePIDSQL = "" +
|
||||||
"SELECT localpart FROM userapi_threepids WHERE threepid = $1 AND medium = $2"
|
"SELECT localpart, server_name FROM userapi_threepids WHERE threepid = $1 AND medium = $2"
|
||||||
|
|
||||||
const selectThreePIDsForLocalpartSQL = "" +
|
const selectThreePIDsForLocalpartSQL = "" +
|
||||||
"SELECT threepid, medium FROM userapi_threepids WHERE localpart = $1 AND server_name = $2"
|
"SELECT threepid, medium FROM userapi_threepids WHERE localpart = $1 AND server_name = $2"
|
||||||
|
|
|
@ -377,7 +377,10 @@ func Test_Profile(t *testing.T) {
|
||||||
|
|
||||||
gotProfile, err := db.GetProfileByLocalpart(ctx, aliceLocalpart, aliceDomain)
|
gotProfile, err := db.GetProfileByLocalpart(ctx, aliceLocalpart, aliceDomain)
|
||||||
assert.NoError(t, err, "unable to get profile by localpart")
|
assert.NoError(t, err, "unable to get profile by localpart")
|
||||||
wantProfile := &authtypes.Profile{Localpart: aliceLocalpart}
|
wantProfile := &authtypes.Profile{
|
||||||
|
Localpart: aliceLocalpart,
|
||||||
|
ServerName: string(aliceDomain),
|
||||||
|
}
|
||||||
assert.Equal(t, wantProfile, gotProfile)
|
assert.Equal(t, wantProfile, gotProfile)
|
||||||
|
|
||||||
// set avatar & displayname
|
// set avatar & displayname
|
||||||
|
|
Loading…
Reference in a new issue