diff --git a/routers/api/v1/activitypub/repository.go b/routers/api/v1/activitypub/repository.go index 31b6eb0e0d..321981bad9 100644 --- a/routers/api/v1/activitypub/repository.go +++ b/routers/api/v1/activitypub/repository.go @@ -130,6 +130,46 @@ func getPersonByRest(remoteStargazer, starReceiver string, ctx *context.APIConte } +func createFederatedUserFromPerson(ctx *context.APIContext, person ap.Person, remoteStargazer string) error { + email, err := generateUUIDMail(person) + if err != nil { + return err + } + + username, err := generateRemoteUserName(person) + if err != nil { + return err + } + + password, err := generateRandomPassword() + if err != nil { + return err + } + + user := &user_model.User{ + LowerName: strings.ToLower(username), + Name: username, + Email: email, + EmailNotificationsPreference: "disabled", + Passwd: password, + MustChangePassword: false, + LoginName: remoteStargazer, + Type: user_model.UserTypeRemoteUser, + IsAdmin: false, + } + + overwriteDefault := &user_model.CreateUserOverwriteOptions{ + IsActive: util.OptionalBoolFalse, + IsRestricted: util.OptionalBoolFalse, + } + + if err := user_model.CreateUser(ctx, user, overwriteDefault); err != nil { + return err + } + log.Info("User created!") + return nil +} + // Repository function returns the Repository actor for a repo func Repository(ctx *context.APIContext) { // swagger:operation GET /activitypub/repository-id/{repository-id} activitypub activitypubRepository @@ -242,42 +282,11 @@ func RepositoryInbox(ctx *context.APIContext) { } // create user - email, err := generateUUIDMail(person) + err = createFederatedUserFromPerson(ctx, person, remoteStargazer) if err != nil { - panic(fmt.Errorf("generate user failed: %v", err)) - } - - username, err := generateRemoteUserName(person) - if err != nil { - panic(fmt.Errorf("generate user failed: %v", err)) - } - - password, err := generateRandomPassword() - if err != nil { - panic(fmt.Errorf("generate password failed: %v", err)) - } - - user := &user_model.User{ - LowerName: strings.ToLower(username), - Name: username, - Email: email, - EmailNotificationsPreference: "disabled", - Passwd: password, - MustChangePassword: false, - LoginName: remoteStargazer, - Type: user_model.UserTypeRemoteUser, - IsAdmin: false, - } - - overwriteDefault := &user_model.CreateUserOverwriteOptions{ - IsActive: util.OptionalBoolFalse, - IsRestricted: util.OptionalBoolFalse, - } - - if err := user_model.CreateUser(ctx, user, overwriteDefault); err != nil { panic(fmt.Errorf("createUser: %w", err)) } - log.Info("User created!") + } else { // use first user user := users[0]