ActivityPub actor 구현

Status: 실험
자체 관리 GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 사용하려면 관리자가 activity_pubactivity_pub_project라는 기능 플래그를 활성화해야 합니다. GitLab.com 및 전용 GitLab에서는 이 기능을 사용할 수 없습니다. 이 기능은 프로덕션 환경에서 사용할 준비가 되지 않았습니다.

이 기능에는 두 가지 기능 플래그가 필요합니다: - activity_pub: 모든 ActivityPub 관련 기능을 활성화하거나 비활성화합니다. - activity_pub_project: 프로젝트별로 특정한 ActivityPub 기능을 활성화하거나 비활성화합니다. activity_pub 플래그도 활성화되어 있어야 합니다.

ActivityPub는 세 가지 표준 문서를 기반으로 합니다: - ActivityPub: 페더레이션을 구현하는 HTTP 요청을 정의합니다. - ActivityStreams: 프로토콜의 사용자들 간에 교환되는 JSON 메시지의 형식을 정의합니다. - Activity 용어집: 기본적으로 인식되는 다양한 메시지를 정의합니다.

첫 번째 문서는 일반적으로 컨트롤러에서 처리하고, 나머지 두 문서는 직렬화 중에 발생하는 것과 관련이 있습니다.

ActivityPub actor를 구현하려면: - 리소스의 프로필 페이지를 구현하세요. - 아웃박스 페이지를 구현하세요. - 인박스에서 들어오는 요청을 처리하세요.

모든 요청은 Accept HTTP 헤더로 application/ld+json; profile="https://www.w3.org/ns/activitystreams"를 사용하여 이루어집니다.

우리가 소셜 기능을 위해 구현한 액터들: - 릴리스

계획된 액터에 대한 자세한 정보는 epic 11247를 참조하세요.

프로필 페이지

프로필 페이지를 쿼리하는 것은 다음을 검색하는 데 사용됩니다: - 이름 및 설명과 같은 것에 대한 일반 정보. - 인박스 및 아웃박스의 URL.

프로필 페이지를 구현하려면 app/serializers/activity_pub/에 ActivityStreams 직렬화기를 만들어야 하며, 직렬화기를 ActivityStreamsSerializer에서 상속하도록 만들어야 합니다. 필수 필드에 대한 직렬화기 섹션에서 아래의 내용을 확인하세요.

컨트롤러에서 직렬화기를 호출하려면: ```ruby opts = { inbox: nil, outbox: outbox_project_releases_url(project) }

render json: ActivityPub::ReleasesActorSerializer.new.represent(project, opts) ```

  • outbox는 이 액터의 활동 피드를 찾을 수 있는 엔드포인트입니다.
  • inbox는 피드에 구독하려면 어디로 POST해야 하는지를 나타냅니다. 아직 구현되지 않았으므로 nil을 전달하세요.

아웃박스 페이지

아웃박스는 리소스에 대한 활동 목록입니다. 이것은 리소스의 활동 피드이며, 아직 구독하지 않은 ActivityPub 클라이언트들이 이 액터의 공개 활동을 표시할 수 있도록 합니다.

아웃박스 페이지를 구현하려면 app/serializers/activity_pub/에 ActivityStreams 직렬화기를 만들어야 하며, 직렬화기를 ActivityStreamsSerializer에서 상속하도록 만들어야 합니다. 직렬화기 섹션에서 아래의 내용을 확인하세요.

다음과 같이 컨트롤러에서 직렬화기를 호출하세요: ruby serializer = ActivityPub::ReleasesOutboxSerializer.new.with_pagination(request, response) render json: serializer.represent(releases)

이렇게 하면 응답이 올바른 필드를 가진 OrderedCollection ActivityPub 유형으로 변환됩니다.

인박스

아직 구현되지 않음.

인박스는 ActivityPub 호환 타사에서 해당 액터에 구독하거나 메시지를 보내기 위해 요청을 하는 곳입니다.

ActivityStreams 직렬화기

직렬화기는 ActivityPub 지원의 중심 부분을 구현합니다. 이것은 모두 ActivityStreams에서 사용되는 메시지 형식에 관한 것입니다.

가장 많은 형식을 자동으로 처리하기 위해 직렬화기를 활용하려면 직렬화기를 ActivityPub::ActivityStreamsSerializer에서 상속하도록 만들어야 합니다.

이를 사용하려면 #represent 메서드를 호출하세요. 액터 프로필 페이지에서 나온 것이라면 (위에서 언급한 것처럼) inboxoutbox 옵션을 제공해야 합니다. 사용자의 연락처 정보를 나타내는 개체와 같이 액터의 일부로 포함되기만을 위한 개체를 나타내는 직렬화기라면 이러한 옵션이 필요하지 않습니다.

직렬화된 각 리소스(액터에 포함된 다른 개체들을 포함)는 idtype 필드를 제공해야 합니다.

id는 URL입니다. 이것은 리소스에 대한 고유 식별자이어야 하며, 기존 페이지를 가리켜야 합니다. 이상적으로는 액터여야 하고, 그렇지 않으면 가장 가까운 액터를 참조하고 다음과 같이 앵커를 사용할 수 있습니다: plaintext https://gitlab.com/user/project/-/releases#release-1

type은 ActivityStreams 핵심 용어집에서 가져와야 합니다: - 활동 유형 - 액터 유형 - 객체 유형

사용할 수 있는 속성들은 모두 ActivityStreams 용어집 문서에 문서화되어 있습니다. 선택한 유형에 따라 사용할 수 있는 properties 목록을 찾아 모든 사용 가능한 속성(직접 또는 상속받은)을 확인하세요.

Mastodon은 하나의 속성인 preferredName을 더 추가합니다. Mastodon은 모든 액터에 이 속성이 설정되어 있거나 해당 액터는 Mastodon에서 인식되지 않습니다.