Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

webfinger_test.go 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package integrations
  5. import (
  6. "fmt"
  7. "net/http"
  8. "net/url"
  9. "testing"
  10. "code.gitea.io/gitea/models/unittest"
  11. user_model "code.gitea.io/gitea/models/user"
  12. "code.gitea.io/gitea/modules/setting"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. func TestWebfinger(t *testing.T) {
  16. defer prepareTestEnv(t)()
  17. setting.Federation.Enabled = true
  18. defer func() {
  19. setting.Federation.Enabled = false
  20. }()
  21. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  22. appURL, _ := url.Parse(setting.AppURL)
  23. type webfingerLink struct {
  24. Rel string `json:"rel,omitempty"`
  25. Type string `json:"type,omitempty"`
  26. Href string `json:"href,omitempty"`
  27. Titles map[string]string `json:"titles,omitempty"`
  28. Properties map[string]interface{} `json:"properties,omitempty"`
  29. }
  30. type webfingerJRD struct {
  31. Subject string `json:"subject,omitempty"`
  32. Aliases []string `json:"aliases,omitempty"`
  33. Properties map[string]interface{} `json:"properties,omitempty"`
  34. Links []*webfingerLink `json:"links,omitempty"`
  35. }
  36. session := loginUser(t, "user1")
  37. req := NewRequest(t, "GET", fmt.Sprintf("/.well-known/webfinger?resource=acct:%s@%s", user.LowerName, appURL.Host))
  38. resp := MakeRequest(t, req, http.StatusOK)
  39. var jrd webfingerJRD
  40. DecodeJSON(t, resp, &jrd)
  41. assert.Equal(t, "acct:user2@"+appURL.Host, jrd.Subject)
  42. assert.ElementsMatch(t, []string{user.HTMLURL()}, jrd.Aliases)
  43. req = NewRequest(t, "GET", fmt.Sprintf("/.well-known/webfinger?resource=acct:%s@%s", user.LowerName, "unknown.host"))
  44. MakeRequest(t, req, http.StatusBadRequest)
  45. req = NewRequest(t, "GET", fmt.Sprintf("/.well-known/webfinger?resource=acct:%s@%s", "user31", appURL.Host))
  46. MakeRequest(t, req, http.StatusNotFound)
  47. req = NewRequest(t, "GET", fmt.Sprintf("/.well-known/webfinger?resource=acct:%s@%s", "user31", appURL.Host))
  48. session.MakeRequest(t, req, http.StatusOK)
  49. req = NewRequest(t, "GET", fmt.Sprintf("/.well-known/webfinger?resource=mailto:%s", user.Email))
  50. MakeRequest(t, req, http.StatusNotFound)
  51. }