mirror of
https://github.com/element-hq/dendrite.git
synced 2025-09-13 21:02:25 +03:00
msc3861: cr
This commit is contained in:
parent
f91cc64401
commit
fd52c7eb1f
4 changed files with 15 additions and 41 deletions
|
@ -89,11 +89,11 @@ func (m *Monolith) AddAllPublicRoutes(
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserVerifierProvider struct {
|
type UserVerifierProvider struct {
|
||||||
UserVerifier httputil.UserVerifier
|
httputil.UserVerifier
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UserVerifierProvider) VerifyUserFromRequest(req *http.Request) (*userapi.Device, *util.JSONResponse) {
|
func (u *UserVerifierProvider) VerifyUserFromRequest(req *http.Request) (*userapi.Device, *util.JSONResponse) {
|
||||||
return u.UserVerifier.VerifyUserFromRequest(req)
|
return u.VerifyUserFromRequest(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserVerifierProvider(userVerifier httputil.UserVerifier) *UserVerifierProvider {
|
func NewUserVerifierProvider(userVerifier httputil.UserVerifier) *UserVerifierProvider {
|
||||||
|
|
|
@ -202,17 +202,12 @@ func (m *MSC3861UserVerifier) getUserByAccessToken(ctx context.Context, token st
|
||||||
}
|
}
|
||||||
|
|
||||||
localpart := ""
|
localpart := ""
|
||||||
{
|
localpartExternalID, err := m.userAPI.QueryExternalUserIDByLocalpartAndProvider(ctx, sub, externalAuthProvider)
|
||||||
var rs api.QueryLocalpartExternalIDResponse
|
if err != nil && err != sql.ErrNoRows {
|
||||||
if err = m.userAPI.QueryExternalUserIDByLocalpartAndProvider(ctx, &api.QueryLocalpartExternalIDRequest{
|
return nil, err
|
||||||
ExternalID: sub,
|
}
|
||||||
AuthProvider: externalAuthProvider,
|
if localpartExternalID != nil {
|
||||||
}, &rs); err != nil && err != sql.ErrNoRows {
|
localpart = localpartExternalID.Localpart
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if l := rs.LocalpartExternalID; l != nil {
|
|
||||||
localpart = l.Localpart
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if localpart == "" {
|
if localpart == "" {
|
||||||
|
@ -253,11 +248,7 @@ func (m *MSC3861UserVerifier) getUserByAccessToken(ctx context.Context, token st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = m.userAPI.PerformLocalpartExternalUserIDCreation(ctx, &api.PerformLocalpartExternalUserIDCreationRequest{
|
if err = m.userAPI.PerformLocalpartExternalUserIDCreation(ctx, userID.Local(), sub, externalAuthProvider); err != nil {
|
||||||
Localpart: userID.Local(),
|
|
||||||
ExternalID: sub,
|
|
||||||
AuthProvider: externalAuthProvider,
|
|
||||||
}); err != nil {
|
|
||||||
logger.WithError(err).Error("PerformLocalpartExternalUserIDCreation")
|
logger.WithError(err).Error("PerformLocalpartExternalUserIDCreation")
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,8 +31,8 @@ type UserInternalAPI interface {
|
||||||
FederationUserAPI
|
FederationUserAPI
|
||||||
|
|
||||||
QuerySearchProfilesAPI // used by p2p demos
|
QuerySearchProfilesAPI // used by p2p demos
|
||||||
QueryExternalUserIDByLocalpartAndProvider(ctx context.Context, req *QueryLocalpartExternalIDRequest, res *QueryLocalpartExternalIDResponse) (err error)
|
QueryExternalUserIDByLocalpartAndProvider(ctx context.Context, externalID, authProvider string) (*LocalpartExternalID, error)
|
||||||
PerformLocalpartExternalUserIDCreation(ctx context.Context, req *PerformLocalpartExternalUserIDCreationRequest) (err error)
|
PerformLocalpartExternalUserIDCreation(ctx context.Context, localpart, externalID, authProvider string) (error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// api functions required by the appservice api
|
// api functions required by the appservice api
|
||||||
|
@ -667,22 +667,6 @@ type QueryAccountByLocalpartRequest struct {
|
||||||
type QueryAccountByLocalpartResponse struct {
|
type QueryAccountByLocalpartResponse struct {
|
||||||
Account *Account
|
Account *Account
|
||||||
}
|
}
|
||||||
|
|
||||||
type QueryLocalpartExternalIDRequest struct {
|
|
||||||
ExternalID string
|
|
||||||
AuthProvider string
|
|
||||||
}
|
|
||||||
|
|
||||||
type QueryLocalpartExternalIDResponse struct {
|
|
||||||
LocalpartExternalID *LocalpartExternalID
|
|
||||||
}
|
|
||||||
|
|
||||||
type PerformLocalpartExternalUserIDCreationRequest struct {
|
|
||||||
Localpart string
|
|
||||||
ExternalID string
|
|
||||||
AuthProvider string
|
|
||||||
}
|
|
||||||
|
|
||||||
// API functions required by the clientapi
|
// API functions required by the clientapi
|
||||||
type ClientKeyAPI interface {
|
type ClientKeyAPI interface {
|
||||||
UploadDeviceKeysAPI
|
UploadDeviceKeysAPI
|
||||||
|
|
|
@ -604,13 +604,12 @@ func (a *UserInternalAPI) QueryAccountByLocalpart(ctx context.Context, req *api.
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *UserInternalAPI) PerformLocalpartExternalUserIDCreation(ctx context.Context, req *api.PerformLocalpartExternalUserIDCreationRequest) (err error) {
|
func (a *UserInternalAPI) PerformLocalpartExternalUserIDCreation(ctx context.Context, localpart, externalID, authProvider string) (err error) {
|
||||||
return a.DB.CreateLocalpartExternalID(ctx, req.Localpart, req.ExternalID, req.AuthProvider)
|
return a.DB.CreateLocalpartExternalID(ctx, localpart, externalID, authProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *UserInternalAPI) QueryExternalUserIDByLocalpartAndProvider(ctx context.Context, req *api.QueryLocalpartExternalIDRequest, res *api.QueryLocalpartExternalIDResponse) (err error) {
|
func (a *UserInternalAPI) QueryExternalUserIDByLocalpartAndProvider(ctx context.Context, externalID, authProvider string) (*api.LocalpartExternalID, error) {
|
||||||
res.LocalpartExternalID, err = a.DB.GetLocalpartForExternalID(ctx, req.ExternalID, req.AuthProvider)
|
return a.DB.GetLocalpartForExternalID(ctx, externalID, authProvider)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the appservice 'device' or nil if the token is not an appservice. Returns an error if there was a problem
|
// Return the appservice 'device' or nil if the token is not an appservice. Returns an error if there was a problem
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue