diff --git a/tests/integration/api_activitypub_person_test.go b/tests/integration/api_activitypub_person_test.go index d8492942e5..0981d51ce1 100644 --- a/tests/integration/api_activitypub_person_test.go +++ b/tests/integration/api_activitypub_person_test.go @@ -30,29 +30,43 @@ func TestActivityPubPerson(t *testing.T) { userID := 2 username := "user2" - req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/activitypub/user-id/%v", userID)) - resp := MakeRequest(t, req, http.StatusOK) - assert.Contains(t, resp.Body.String(), "@context") + userURL := fmt.Sprintf("/api/v1/activitypub/user-id/%v", userID) - var person ap.Person - err := person.UnmarshalJSON(resp.Body.Bytes()) + user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) + + clientFactory, err := activitypub.GetClientFactory(db.DefaultContext) require.NoError(t, err) - assert.Equal(t, ap.PersonType, person.Type) - assert.Equal(t, username, person.PreferredUsername.String()) - keyID := person.GetID().String() - assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v$", userID), keyID) - assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v/outbox$", userID), person.Outbox.GetID().String()) - assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v/inbox$", userID), person.Inbox.GetID().String()) + apClient, err := clientFactory.WithKeys(db.DefaultContext, user1, user1.APActorKeyID()) + require.NoError(t, err) - pubKey := person.PublicKey - assert.NotNil(t, pubKey) - publicKeyID := keyID + "#main-key" - assert.Equal(t, pubKey.ID.String(), publicKeyID) + // Unsigned request + req := NewRequest(t, "GET", userURL) + MakeRequest(t, req, http.StatusBadRequest) - pubKeyPem := pubKey.PublicKeyPem - assert.NotNil(t, pubKeyPem) - assert.Regexp(t, "^-----BEGIN PUBLIC KEY-----", pubKeyPem) + // Signed requset + onGiteaRun(t, func(t *testing.T, u *url.URL) { + userURL := u.JoinPath(userURL).String() + + resp, err := apClient.GetBody(userURL) + require.NoError(t, err) + + var person ap.Person + err = person.UnmarshalJSON(resp) + require.NoError(t, err) + + assert.Equal(t, ap.PersonType, person.Type) + assert.Equal(t, username, person.PreferredUsername.String()) + assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v$", userID), person.GetID()) + assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v/outbox$", userID), person.Outbox.GetID().String()) + assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v/inbox$", userID), person.Inbox.GetID().String()) + + assert.NotNil(t, person.PublicKey) + assert.Regexp(t, fmt.Sprintf("activitypub/user-id/%v#main-key$", userID), person.PublicKey.ID) + + assert.NotNil(t, person.PublicKey.PublicKeyPem) + assert.Regexp(t, "^-----BEGIN PUBLIC KEY-----", person.PublicKey.PublicKeyPem) + }) } func TestActivityPubMissingPerson(t *testing.T) { diff --git a/tests/integration/api_activitypub_repository_test.go b/tests/integration/api_activitypub_repository_test.go index 29fbe6d781..a949f2c823 100644 --- a/tests/integration/api_activitypub_repository_test.go +++ b/tests/integration/api_activitypub_repository_test.go @@ -28,18 +28,28 @@ import ( func TestActivityPubRepository(t *testing.T) { defer test.MockVariableValue(&setting.Federation.Enabled, true)() defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())() - defer tests.PrepareTestEnv(t)() - repositoryID := 2 - req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/activitypub/repository-id/%v", repositoryID)) - resp := MakeRequest(t, req, http.StatusOK) - assert.Contains(t, resp.Body.String(), "@context") + onGiteaRun(t, func(t *testing.T, u *url.URL) { + repositoryID := 2 - var repository forgefed_modules.Repository - err := repository.UnmarshalJSON(resp.Body.Bytes()) - require.NoError(t, err) + apServerActor := user.NewAPActorUser() - assert.Regexp(t, fmt.Sprintf("activitypub/repository-id/%v$", repositoryID), repository.GetID().String()) + cf, err := activitypub.GetClientFactory(db.DefaultContext) + require.NoError(t, err) + + c, err := cf.WithKeys(db.DefaultContext, apServerActor, apServerActor.APActorKeyID()) + require.NoError(t, err) + + resp, err := c.GetBody(fmt.Sprintf("%vapi/v1/activitypub/repository-id/%v", u, repositoryID)) + require.NoError(t, err) + assert.Contains(t, string(resp), "@context") + + var repository forgefed_modules.Repository + err = repository.UnmarshalJSON(resp) + require.NoError(t, err) + + assert.Regexp(t, fmt.Sprintf("activitypub/repository-id/%v$", repositoryID), repository.GetID().String()) + }) } func TestActivityPubMissingRepository(t *testing.T) { @@ -62,14 +72,16 @@ func TestActivityPubRepositoryInboxValid(t *testing.T) { defer federatedSrv.Close() onGiteaRun(t, func(t *testing.T, u *url.URL) { - actionsUser := user.NewActionsUser() + apServerActor := user.NewAPActorUser() repositoryID := 2 timeNow := time.Now().UTC() cf, err := activitypub.GetClientFactory(db.DefaultContext) require.NoError(t, err) - c, err := cf.WithKeys(db.DefaultContext, actionsUser, "not used") + + c, err := cf.WithKeys(db.DefaultContext, apServerActor, apServerActor.APActorKeyID()) require.NoError(t, err) + repoInboxURL := u.JoinPath(fmt.Sprintf("/api/v1/activitypub/repository-id/%d/inbox", repositoryID)).String() activity1 := []byte(fmt.Sprintf( @@ -139,11 +151,13 @@ func TestActivityPubRepositoryInboxInvalid(t *testing.T) { defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())() onGiteaRun(t, func(t *testing.T, u *url.URL) { - actionsUser := user.NewActionsUser() + apServerActor := user.NewAPActorUser() repositoryID := 2 + cf, err := activitypub.GetClientFactory(db.DefaultContext) require.NoError(t, err) - c, err := cf.WithKeys(db.DefaultContext, actionsUser, "not used") + + c, err := cf.WithKeys(db.DefaultContext, apServerActor, apServerActor.APActorKeyID()) require.NoError(t, err) repoInboxURL := u.JoinPath(fmt.Sprintf("/api/v1/activitypub/repository-id/%v/inbox", repositoryID)).String()