httpauth_test.go 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright (C) 2019 Nicola Murino
  2. //
  3. // This program is free software: you can redistribute it and/or modify
  4. // it under the terms of the GNU Affero General Public License as published
  5. // by the Free Software Foundation, version 3.
  6. //
  7. // This program is distributed in the hope that it will be useful,
  8. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. // GNU Affero General Public License for more details.
  11. //
  12. // You should have received a copy of the GNU Affero General Public License
  13. // along with this program. If not, see <https://www.gnu.org/licenses/>.
  14. package common
  15. import (
  16. "os"
  17. "path/filepath"
  18. "runtime"
  19. "testing"
  20. "github.com/stretchr/testify/require"
  21. )
  22. func TestBasicAuth(t *testing.T) {
  23. httpAuth, err := NewBasicAuthProvider("")
  24. require.NoError(t, err)
  25. require.False(t, httpAuth.IsEnabled())
  26. _, err = NewBasicAuthProvider("missing path")
  27. require.Error(t, err)
  28. authUserFile := filepath.Join(os.TempDir(), "http_users.txt")
  29. authUserData := []byte("test1:$2y$05$bcHSED7aO1cfLto6ZdDBOOKzlwftslVhtpIkRhAtSa4GuLmk5mola\n")
  30. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  31. require.NoError(t, err)
  32. httpAuth, err = NewBasicAuthProvider(authUserFile)
  33. require.NoError(t, err)
  34. require.True(t, httpAuth.IsEnabled())
  35. require.False(t, httpAuth.ValidateCredentials("test1", "wrong1"))
  36. require.False(t, httpAuth.ValidateCredentials("test2", "password2"))
  37. require.True(t, httpAuth.ValidateCredentials("test1", "password1"))
  38. authUserData = append(authUserData, []byte("test2:$1$OtSSTL8b$bmaCqEksI1e7rnZSjsIDR1\n")...)
  39. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  40. require.NoError(t, err)
  41. require.False(t, httpAuth.ValidateCredentials("test2", "wrong2"))
  42. require.True(t, httpAuth.ValidateCredentials("test2", "password2"))
  43. authUserData = append(authUserData, []byte("test2:$apr1$gLnIkRIf$Xr/6aJfmIrihP4b2N2tcs/\n")...)
  44. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  45. require.NoError(t, err)
  46. require.False(t, httpAuth.ValidateCredentials("test2", "wrong2"))
  47. require.True(t, httpAuth.ValidateCredentials("test2", "password2"))
  48. authUserData = append(authUserData, []byte("test3:$apr1$gLnIkRIf$Xr/6aJfmIrihP4b2N2tcs/\n")...)
  49. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  50. require.NoError(t, err)
  51. require.False(t, httpAuth.ValidateCredentials("test3", "password3"))
  52. authUserData = append(authUserData, []byte("test4:$invalid$gLnIkRIf$Xr/6$aJfmIr$ihP4b2N2tcs/\n")...)
  53. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  54. require.NoError(t, err)
  55. require.False(t, httpAuth.ValidateCredentials("test4", "password3"))
  56. if runtime.GOOS != "windows" {
  57. authUserData = append(authUserData, []byte("test5:$apr1$gLnIkRIf$Xr/6aJfmIrihP4b2N2tcs/\n")...)
  58. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  59. require.NoError(t, err)
  60. err = os.Chmod(authUserFile, 0001)
  61. require.NoError(t, err)
  62. require.False(t, httpAuth.ValidateCredentials("test5", "password2"))
  63. err = os.Chmod(authUserFile, os.ModePerm)
  64. require.NoError(t, err)
  65. }
  66. authUserData = append(authUserData, []byte("\"foo\"bar\"\r\n")...)
  67. err = os.WriteFile(authUserFile, authUserData, os.ModePerm)
  68. require.NoError(t, err)
  69. require.False(t, httpAuth.ValidateCredentials("test2", "password2"))
  70. err = os.Remove(authUserFile)
  71. require.NoError(t, err)
  72. }