You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_admin_test.go 3.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright 2017 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. "testing"
  9. "github.com/stretchr/testify/assert"
  10. "code.gitea.io/gitea/models"
  11. api "code.gitea.io/sdk/gitea"
  12. )
  13. func TestAPIAdminCreateAndDeleteSSHKey(t *testing.T) {
  14. prepareTestEnv(t)
  15. // user1 is an admin user
  16. session := loginUser(t, "user1")
  17. keyOwner := models.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User)
  18. urlStr := fmt.Sprintf("/api/v1/admin/users/%s/keys", keyOwner.Name)
  19. req := NewRequestWithValues(t, "POST", urlStr, map[string]string{
  20. "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAu7tvIvX6ZHrRXuZNfkR3XLHSsuCK9Zn3X58lxBcQzuo5xZgB6vRwwm/QtJuF+zZPtY5hsQILBLmF+BZ5WpKZp1jBeSjH2G7lxet9kbcH+kIVj0tPFEoyKI9wvWqIwC4prx/WVk2wLTJjzBAhyNxfEq7C9CeiX9pQEbEqJfkKCQ== nocomment\n",
  21. "title": "test-key",
  22. })
  23. resp := session.MakeRequest(t, req, http.StatusCreated)
  24. var newPublicKey api.PublicKey
  25. DecodeJSON(t, resp, &newPublicKey)
  26. models.AssertExistsAndLoadBean(t, &models.PublicKey{
  27. ID: newPublicKey.ID,
  28. Name: newPublicKey.Title,
  29. Content: newPublicKey.Key,
  30. Fingerprint: newPublicKey.Fingerprint,
  31. OwnerID: keyOwner.ID,
  32. })
  33. req = NewRequestf(t, "DELETE", "/api/v1/admin/users/%s/keys/%d",
  34. keyOwner.Name, newPublicKey.ID)
  35. session.MakeRequest(t, req, http.StatusNoContent)
  36. models.AssertNotExistsBean(t, &models.PublicKey{ID: newPublicKey.ID})
  37. }
  38. func TestAPIAdminDeleteMissingSSHKey(t *testing.T) {
  39. prepareTestEnv(t)
  40. // user1 is an admin user
  41. session := loginUser(t, "user1")
  42. req := NewRequestf(t, "DELETE", "/api/v1/admin/users/user1/keys/%d", models.NonexistentID)
  43. session.MakeRequest(t, req, http.StatusNotFound)
  44. }
  45. func TestAPIAdminDeleteUnauthorizedKey(t *testing.T) {
  46. prepareTestEnv(t)
  47. adminUsername := "user1"
  48. normalUsername := "user2"
  49. session := loginUser(t, adminUsername)
  50. urlStr := fmt.Sprintf("/api/v1/admin/users/%s/keys", adminUsername)
  51. req := NewRequestWithValues(t, "POST", urlStr, map[string]string{
  52. "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAu7tvIvX6ZHrRXuZNfkR3XLHSsuCK9Zn3X58lxBcQzuo5xZgB6vRwwm/QtJuF+zZPtY5hsQILBLmF+BZ5WpKZp1jBeSjH2G7lxet9kbcH+kIVj0tPFEoyKI9wvWqIwC4prx/WVk2wLTJjzBAhyNxfEq7C9CeiX9pQEbEqJfkKCQ== nocomment\n",
  53. "title": "test-key",
  54. })
  55. resp := session.MakeRequest(t, req, http.StatusCreated)
  56. var newPublicKey api.PublicKey
  57. DecodeJSON(t, resp, &newPublicKey)
  58. session = loginUser(t, normalUsername)
  59. req = NewRequestf(t, "DELETE", "/api/v1/admin/users/%s/keys/%d",
  60. adminUsername, newPublicKey.ID)
  61. session.MakeRequest(t, req, http.StatusForbidden)
  62. }
  63. func TestAPISudoUser(t *testing.T) {
  64. prepareTestEnv(t)
  65. adminUsername := "user1"
  66. normalUsername := "user2"
  67. session := loginUser(t, adminUsername)
  68. urlStr := fmt.Sprintf("/api/v1/user?sudo=%s", normalUsername)
  69. req := NewRequest(t, "GET", urlStr)
  70. resp := session.MakeRequest(t, req, http.StatusOK)
  71. var user api.User
  72. DecodeJSON(t, resp, &user)
  73. assert.Equal(t, normalUsername, user.UserName)
  74. }
  75. func TestAPISudoUserForbidden(t *testing.T) {
  76. prepareTestEnv(t)
  77. adminUsername := "user1"
  78. normalUsername := "user2"
  79. session := loginUser(t, normalUsername)
  80. urlStr := fmt.Sprintf("/api/v1/user?sudo=%s", adminUsername)
  81. req := NewRequest(t, "GET", urlStr)
  82. session.MakeRequest(t, req, http.StatusForbidden)
  83. }