socket.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package service
  2. import (
  3. "net/http"
  4. "strconv"
  5. "strings"
  6. model2 "github.com/IceWhaleTech/CasaOS/service/model"
  7. "github.com/mileusna/useragent"
  8. )
  9. type Name struct {
  10. Model string `json:"model"`
  11. OS string `json:"os"`
  12. Browser string `json:"browser"`
  13. DeviceName string `json:"deviceName"`
  14. DisplayName string `json:"displayName"`
  15. }
  16. func GetPeerId(request *http.Request, id string) string {
  17. cookiePree, err := request.Cookie("peerid")
  18. if err != nil {
  19. return id
  20. }
  21. if len(cookiePree.Value) > 0 {
  22. return cookiePree.Value
  23. }
  24. return id
  25. }
  26. func GetIP(request *http.Request) string {
  27. ip := ""
  28. if len(request.Header.Get("x-forwarded-for")) > 0 {
  29. ip = strings.Split(request.Header.Get("x-forwarded-for"), ",")[0]
  30. } else {
  31. ip = request.RemoteAddr
  32. }
  33. if ip == "::1" || ip == "::ffff:127.0.0.1" {
  34. ip = "127.0.0.1"
  35. }
  36. return ip
  37. }
  38. func GetName(request *http.Request) Name {
  39. us := useragent.Parse(request.Header.Get("user-agent"))
  40. device := ""
  41. if len(us.Device) > 0 {
  42. device += us.Device
  43. } else {
  44. device += us.Name
  45. }
  46. display := ""
  47. if len(us.Device) > 0 {
  48. display = us.Device + " " + us.Name
  49. } else {
  50. display = us.OS + " " + us.Name
  51. }
  52. model := "desktop"
  53. if us.Mobile {
  54. model = "mobile"
  55. }
  56. if us.Tablet {
  57. model = "tablet"
  58. }
  59. peer := MyService.Peer().GetPeerByName(display)
  60. if len(peer.ID) > 0 {
  61. for i := 0; true; i++ {
  62. peer = MyService.Peer().GetPeerByName(display + "_" + strconv.Itoa(i+1))
  63. if len(peer.ID) == 0 {
  64. display = display + "_" + strconv.Itoa(i+1)
  65. break
  66. }
  67. }
  68. }
  69. return Name{
  70. Model: model,
  71. OS: us.OS,
  72. Browser: us.Name,
  73. DeviceName: device,
  74. DisplayName: display,
  75. }
  76. }
  77. func GetNameByDB(m model2.PeerDriveDBModel) Name {
  78. device := ""
  79. if len(m.DeviceName) > 0 {
  80. device += m.DeviceName
  81. } else {
  82. device += m.Browser
  83. }
  84. return Name{
  85. Model: m.Model,
  86. OS: m.OS,
  87. Browser: m.Browser,
  88. DeviceName: device,
  89. DisplayName: m.DisplayName,
  90. }
  91. }