mirror of https://github.com/usbharu/Hideout.git
feat: 凍結されたユーザーの復旧に対応
This commit is contained in:
parent
c8294c4cb8
commit
84b038f472
|
@ -40,9 +40,13 @@ interface APUserService {
|
|||
* @param targetActor 署名するユーザー
|
||||
* @return
|
||||
*/
|
||||
suspend fun fetchPerson(url: String, targetActor: String? = null): Person
|
||||
suspend fun fetchPerson(url: String, targetActor: String? = null, idOverride: Long? = null): Person
|
||||
|
||||
suspend fun fetchPersonWithEntity(url: String, targetActor: String? = null): Pair<Person, Actor>
|
||||
suspend fun fetchPersonWithEntity(
|
||||
url: String,
|
||||
targetActor: String? = null,
|
||||
idOverride: Long? = null,
|
||||
): Pair<Person, Actor>
|
||||
}
|
||||
|
||||
@Service
|
||||
|
@ -51,7 +55,7 @@ class APUserServiceImpl(
|
|||
private val transaction: Transaction,
|
||||
private val applicationConfig: ApplicationConfig,
|
||||
private val apResourceResolveService: APResourceResolveService,
|
||||
private val actorRepository: ActorRepository
|
||||
private val actorRepository: ActorRepository,
|
||||
) :
|
||||
APUserService {
|
||||
|
||||
|
@ -88,13 +92,17 @@ class APUserServiceImpl(
|
|||
)
|
||||
}
|
||||
|
||||
override suspend fun fetchPerson(url: String, targetActor: String?): Person =
|
||||
fetchPersonWithEntity(url, targetActor).first
|
||||
override suspend fun fetchPerson(url: String, targetActor: String?, idOverride: Long?): Person =
|
||||
fetchPersonWithEntity(url, targetActor, idOverride).first
|
||||
|
||||
override suspend fun fetchPersonWithEntity(url: String, targetActor: String?): Pair<Person, Actor> {
|
||||
override suspend fun fetchPersonWithEntity(
|
||||
url: String,
|
||||
targetActor: String?,
|
||||
idOverride: Long?,
|
||||
): Pair<Person, Actor> {
|
||||
val userEntity = actorRepository.findByUrl(url)
|
||||
|
||||
if (userEntity != null) {
|
||||
if (userEntity != null && idOverride == null) {
|
||||
return entityToPerson(userEntity, userEntity.url) to userEntity
|
||||
}
|
||||
|
||||
|
@ -104,7 +112,7 @@ class APUserServiceImpl(
|
|||
|
||||
val actor = actorRepository.findByUrlWithLock(id)
|
||||
|
||||
if (actor != null) {
|
||||
if (actor != null && idOverride == null) {
|
||||
return person to actor
|
||||
}
|
||||
|
||||
|
@ -123,13 +131,14 @@ class APUserServiceImpl(
|
|||
followers = person.followers,
|
||||
sharedInbox = person.endpoints["sharedInbox"],
|
||||
locked = person.manuallyApprovesFollowers
|
||||
)
|
||||
),
|
||||
idOverride
|
||||
)
|
||||
}
|
||||
|
||||
private fun entityToPerson(
|
||||
actorEntity: Actor,
|
||||
id: String
|
||||
id: String,
|
||||
) = Person(
|
||||
type = emptyList(),
|
||||
name = actorEntity.name,
|
||||
|
|
|
@ -26,7 +26,7 @@ interface UserService {
|
|||
|
||||
suspend fun createLocalUser(user: UserCreateDto): Actor
|
||||
|
||||
suspend fun createRemoteUser(user: RemoteUserCreateDto): Actor
|
||||
suspend fun createRemoteUser(user: RemoteUserCreateDto, idOverride: Long? = null): Actor
|
||||
|
||||
suspend fun updateUser(userId: Long, updateUserDto: UpdateUserDto)
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ class UserServiceImpl(
|
|||
return save
|
||||
}
|
||||
|
||||
override suspend fun createRemoteUser(user: RemoteUserCreateDto): Actor {
|
||||
override suspend fun createRemoteUser(user: RemoteUserCreateDto, idOverride: Long?): Actor {
|
||||
logger.info("START Create New remote user. name: {} url: {}", user.name, user.url)
|
||||
|
||||
val deletedActor = deletedActorRepository.findByNameAndDomain(user.name, user.domain)
|
||||
|
@ -107,7 +107,7 @@ class UserServiceImpl(
|
|||
|
||||
val nextId = actorRepository.nextId()
|
||||
val userEntity = actorBuilder.of(
|
||||
id = nextId,
|
||||
id = idOverride ?: nextId,
|
||||
name = user.name,
|
||||
domain = user.domain,
|
||||
screenName = user.screenName,
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright (C) 2024 usbharu
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.usbharu.hideout.worker
|
||||
|
||||
import dev.usbharu.hideout.activitypub.service.objects.user.APUserService
|
||||
import dev.usbharu.hideout.application.external.Transaction
|
||||
import dev.usbharu.hideout.core.external.job.UpdateActorTask
|
||||
import dev.usbharu.hideout.core.external.job.UpdateActorTaskDef
|
||||
import dev.usbharu.owl.consumer.AbstractTaskRunner
|
||||
import dev.usbharu.owl.consumer.TaskRequest
|
||||
import dev.usbharu.owl.consumer.TaskResult
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Component
|
||||
class UpdateActorWorker(
|
||||
private val transaction: Transaction,
|
||||
private val apUserService: APUserService,
|
||||
) : AbstractTaskRunner<UpdateActorTask, UpdateActorTaskDef>(UpdateActorTaskDef) {
|
||||
override suspend fun typedRun(typedParam: UpdateActorTask, taskRequest: TaskRequest): TaskResult {
|
||||
transaction.transaction {
|
||||
apUserService.fetchPerson(typedParam.apId, idOverride = typedParam.id)
|
||||
}
|
||||
|
||||
return TaskResult.ok()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue