user_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package dbdata
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "github.com/xlzd/gotp"
  6. )
  7. func TestCheckUser(t *testing.T) {
  8. ast := assert.New(t)
  9. preIpData()
  10. defer closeIpdata()
  11. group := "group1"
  12. // 添加一个组
  13. dns := []ValData{{Val: "114.114.114.114"}}
  14. route := []ValData{{Val: "192.168.1.1/24"}}
  15. g := Group{Name: group, Status: 1, ClientDns: dns, RouteInclude: route}
  16. err := SetGroup(&g)
  17. ast.Nil(err)
  18. // 判断 IpMask
  19. ast.Equal(g.RouteInclude[0].IpMask, "192.168.1.1/255.255.255.0")
  20. // 添加一个用户
  21. u := User{Username: "aaa", Groups: []string{group}, Status: 1}
  22. err = SetUser(&u)
  23. ast.Nil(err)
  24. // 验证 PinCode + OtpSecret
  25. totp := gotp.NewDefaultTOTP(u.OtpSecret)
  26. secret := totp.Now()
  27. err = CheckUser("aaa", u.PinCode+secret, group)
  28. ast.Nil(err)
  29. // 单独验证密码
  30. u.DisableOtp = true
  31. _ = SetUser(&u)
  32. err = CheckUser("aaa", u.PinCode, group)
  33. ast.Nil(err)
  34. // 添加一个radius组
  35. group2 := "group2"
  36. authData := map[string]interface{}{
  37. "type": "radius",
  38. "radius": map[string]string{
  39. "addr": "192.168.1.12:1044",
  40. "secret": "43214132",
  41. },
  42. }
  43. g2 := Group{Name: group2, Status: 1, ClientDns: dns, RouteInclude: route, Auth: authData}
  44. err = SetGroup(&g2)
  45. ast.Nil(err)
  46. err = CheckUser("aaa", "bbbbbbb", group2)
  47. if ast.NotNil(err) {
  48. ast.Equal("aaa Radius服务器连接异常, 请检测服务器和端口", err.Error())
  49. }
  50. // 添加用户策略
  51. dns2 := []ValData{{Val: "8.8.8.8"}}
  52. route2 := []ValData{{Val: "192.168.2.1/24"}}
  53. p1 := Policy{Username: "aaa", Status: 1, ClientDns: dns2, RouteInclude: route2}
  54. err = SetPolicy(&p1)
  55. ast.Nil(err)
  56. err = CheckUser("aaa", u.PinCode, group)
  57. ast.Nil(err)
  58. // 添加一个ldap组
  59. group3 := "group3"
  60. authData = map[string]interface{}{
  61. "type": "ldap",
  62. "ldap": map[string]interface{}{
  63. "addr": "192.168.8.12:389",
  64. "tls": true,
  65. "bind_name": "[email protected]",
  66. "bind_pwd": "afdbfdsafds",
  67. "base_dn": "dc=abc,dc=com",
  68. "object_class": "person",
  69. "search_attr": "sAMAccountName",
  70. "member_of": "cn=vpn,cn=user,dc=abc,dc=com",
  71. },
  72. }
  73. g3 := Group{Name: group3, Status: 1, ClientDns: dns, RouteInclude: route, Auth: authData}
  74. err = SetGroup(&g3)
  75. ast.Nil(err)
  76. err = CheckUser("aaa", "bbbbbbb", group3)
  77. if ast.NotNil(err) {
  78. ast.Equal("aaa LDAP服务器连接异常, 请检测服务器和端口", err.Error())
  79. }
  80. }