Generate SenderLocalpart AS user (#505)
* Generate sender_localpart user for each AS on startup Signed-off-by: Andrew Morgan <andrewm@matrix.org> * Clean up diff
This commit is contained in:
parent
dbbfd26be7
commit
d2ae425752
|
@ -15,6 +15,7 @@
|
||||||
package appservice
|
package appservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
@ -27,7 +28,9 @@ import (
|
||||||
"github.com/matrix-org/dendrite/appservice/types"
|
"github.com/matrix-org/dendrite/appservice/types"
|
||||||
"github.com/matrix-org/dendrite/appservice/workers"
|
"github.com/matrix-org/dendrite/appservice/workers"
|
||||||
"github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
|
"github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
|
||||||
|
"github.com/matrix-org/dendrite/clientapi/auth/storage/devices"
|
||||||
"github.com/matrix-org/dendrite/common/basecomponent"
|
"github.com/matrix-org/dendrite/common/basecomponent"
|
||||||
|
"github.com/matrix-org/dendrite/common/config"
|
||||||
"github.com/matrix-org/dendrite/common/transactions"
|
"github.com/matrix-org/dendrite/common/transactions"
|
||||||
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
|
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
|
@ -39,6 +42,7 @@ import (
|
||||||
func SetupAppServiceAPIComponent(
|
func SetupAppServiceAPIComponent(
|
||||||
base *basecomponent.BaseDendrite,
|
base *basecomponent.BaseDendrite,
|
||||||
accountsDB *accounts.Database,
|
accountsDB *accounts.Database,
|
||||||
|
deviceDB *devices.Database,
|
||||||
federation *gomatrixserverlib.FederationClient,
|
federation *gomatrixserverlib.FederationClient,
|
||||||
roomserverAliasAPI roomserverAPI.RoomserverAliasAPI,
|
roomserverAliasAPI roomserverAPI.RoomserverAliasAPI,
|
||||||
roomserverQueryAPI roomserverAPI.RoomserverQueryAPI,
|
roomserverQueryAPI roomserverAPI.RoomserverQueryAPI,
|
||||||
|
@ -61,6 +65,13 @@ func SetupAppServiceAPIComponent(
|
||||||
Cond: sync.NewCond(&m),
|
Cond: sync.NewCond(&m),
|
||||||
}
|
}
|
||||||
workerStates[i] = ws
|
workerStates[i] = ws
|
||||||
|
|
||||||
|
// Create bot account for this AS if it doesn't already exist
|
||||||
|
if err = generateAppServiceAccount(accountsDB, deviceDB, appservice); err != nil {
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"appservice": appservice.ID,
|
||||||
|
}).WithError(err).Panicf("failed to generate bot account for appservice")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a HTTP client that this component will use for all outbound and
|
// Create a HTTP client that this component will use for all outbound and
|
||||||
|
@ -97,3 +108,27 @@ func SetupAppServiceAPIComponent(
|
||||||
|
|
||||||
return &appserviceQueryAPI
|
return &appserviceQueryAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generateAppServiceAccounts creates a dummy account based off the
|
||||||
|
// `sender_localpart` field of each application service if it doesn't
|
||||||
|
// exist already
|
||||||
|
func generateAppServiceAccount(
|
||||||
|
accountsDB *accounts.Database,
|
||||||
|
deviceDB *devices.Database,
|
||||||
|
as config.ApplicationService,
|
||||||
|
) error {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
// Create an account for the application service
|
||||||
|
acc, err := accountsDB.CreateAccount(ctx, as.SenderLocalpart, "", as.ID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if acc == nil {
|
||||||
|
// This account already exists
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a dummy device with a dummy token for the application service
|
||||||
|
_, err = deviceDB.CreateDevice(ctx, as.SenderLocalpart, nil, as.ASToken, &as.SenderLocalpart)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
@ -26,12 +26,13 @@ func main() {
|
||||||
|
|
||||||
defer base.Close() // nolint: errcheck
|
defer base.Close() // nolint: errcheck
|
||||||
accountDB := base.CreateAccountsDB()
|
accountDB := base.CreateAccountsDB()
|
||||||
|
deviceDB := base.CreateDeviceDB()
|
||||||
federation := base.CreateFederationClient()
|
federation := base.CreateFederationClient()
|
||||||
alias, _, query := base.CreateHTTPRoomserverAPIs()
|
alias, _, query := base.CreateHTTPRoomserverAPIs()
|
||||||
cache := transactions.New()
|
cache := transactions.New()
|
||||||
|
|
||||||
appservice.SetupAppServiceAPIComponent(
|
appservice.SetupAppServiceAPIComponent(
|
||||||
base, accountDB, federation, alias, query, cache,
|
base, accountDB, deviceDB, federation, alias, query, cache,
|
||||||
)
|
)
|
||||||
|
|
||||||
base.SetupAndServeHTTP(string(base.Cfg.Listen.FederationSender))
|
base.SetupAndServeHTTP(string(base.Cfg.Listen.FederationSender))
|
||||||
|
|
|
@ -21,6 +21,7 @@ import (
|
||||||
"github.com/matrix-org/dendrite/common/keydb"
|
"github.com/matrix-org/dendrite/common/keydb"
|
||||||
"github.com/matrix-org/dendrite/common/transactions"
|
"github.com/matrix-org/dendrite/common/transactions"
|
||||||
|
|
||||||
|
"github.com/matrix-org/dendrite/appservice"
|
||||||
"github.com/matrix-org/dendrite/clientapi"
|
"github.com/matrix-org/dendrite/clientapi"
|
||||||
"github.com/matrix-org/dendrite/common"
|
"github.com/matrix-org/dendrite/common"
|
||||||
"github.com/matrix-org/dendrite/common/basecomponent"
|
"github.com/matrix-org/dendrite/common/basecomponent"
|
||||||
|
@ -65,6 +66,7 @@ func main() {
|
||||||
mediaapi.SetupMediaAPIComponent(base, deviceDB)
|
mediaapi.SetupMediaAPIComponent(base, deviceDB)
|
||||||
publicroomsapi.SetupPublicRoomsAPIComponent(base, deviceDB)
|
publicroomsapi.SetupPublicRoomsAPIComponent(base, deviceDB)
|
||||||
syncapi.SetupSyncAPIComponent(base, deviceDB, accountDB, query)
|
syncapi.SetupSyncAPIComponent(base, deviceDB, accountDB, query)
|
||||||
|
appservice.SetupAppServiceAPIComponent(base, accountDB, deviceDB, federation, alias, query, transactions.New())
|
||||||
|
|
||||||
httpHandler := common.WrapHandlerInCORS(base.APIMux)
|
httpHandler := common.WrapHandlerInCORS(base.APIMux)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue