mfa.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package aws
  2. import "time"
  3. type VirtualMFADevice struct {
  4. EnableDate time.Time
  5. SerialNumber string
  6. Base32StringSeed string
  7. QRCodePNG string
  8. User struct {
  9. UserName string
  10. Arn string
  11. UserId string
  12. CreateDate time.Time
  13. }
  14. }
  15. func (cli *SAwsClient) GetVirtualMFADevices() ([]VirtualMFADevice, error) {
  16. ret := []VirtualMFADevice{}
  17. for {
  18. params := map[string]string{}
  19. part := struct {
  20. Marker string `xml:"Marker"`
  21. VirtualMFADevices []VirtualMFADevice `xml:"VirtualMFADevices>member"`
  22. }{}
  23. err := cli.iamRequest("ListVirtualMFADevices", params, &part)
  24. if err != nil {
  25. return nil, err
  26. }
  27. ret = append(ret, part.VirtualMFADevices...)
  28. if len(part.VirtualMFADevices) == 0 || len(part.Marker) == 0 {
  29. break
  30. }
  31. params["Marker"] = part.Marker
  32. }
  33. return ret, nil
  34. }
  35. func (cli *SAwsClient) DeleteVirtualMFADevice(serialNumber, userName string) error {
  36. params := map[string]string{
  37. "SerialNumber": serialNumber,
  38. }
  39. if len(userName) > 0 {
  40. params["UserName"] = userName
  41. }
  42. return cli.iamRequest("DeactivateMFADevice", params, nil)
  43. }
  44. func (cli *SAwsClient) CreateVirtualMFADevice(name string) (*VirtualMFADevice, error) {
  45. params := map[string]string{
  46. "VirtualMFADeviceName": name,
  47. }
  48. ret := struct {
  49. VirtualMFADevice VirtualMFADevice `xml:"VirtualMFADevice"`
  50. }{}
  51. err := cli.iamRequest("CreateVirtualMFADevice", params, &ret)
  52. if err != nil {
  53. return nil, err
  54. }
  55. return &ret.VirtualMFADevice, nil
  56. }
  57. func (cli *SAwsClient) ResyncMFADevice(serialNumber, userName, code1, code2 string) error {
  58. params := map[string]string{
  59. "SerialNumber": serialNumber,
  60. "AuthenticationCode1": code1,
  61. "AuthenticationCode2": code2,
  62. "UserName": userName,
  63. }
  64. return cli.iamRequest("ResyncMFADevice", params, nil)
  65. }