dcesecurity.go 818 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package dcesecurity
  2. import (
  3. "encoding/binary"
  4. "os"
  5. "github.com/golang-plus/uuid/internal"
  6. "github.com/golang-plus/uuid/internal/timebased"
  7. "github.com/golang-plus/errors"
  8. )
  9. // NewUUID Generate returns a new DCE security uuid.
  10. func NewUUID(domain Domain) ([]byte, error) {
  11. uuid, err := timebased.NewUUID()
  12. if err != nil {
  13. return nil, err
  14. }
  15. switch domain {
  16. case User:
  17. uid := os.Getuid()
  18. binary.BigEndian.PutUint32(uuid[0:], uint32(uid)) // network byte order
  19. case Group:
  20. gid := os.Getgid()
  21. binary.BigEndian.PutUint32(uuid[0:], uint32(gid)) // network byte order
  22. default:
  23. return nil, errors.New("domain is invalid")
  24. }
  25. // set version(v2)
  26. internal.SetVersion(uuid, internal.VersionDCESecurity)
  27. // set layout(RFC4122)
  28. internal.SetLayout(uuid, internal.LayoutRFC4122)
  29. return uuid, nil
  30. }