models.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package httpd
  2. type apiResponse struct {
  3. Error string `json:"error"`
  4. Message string `json:"message"`
  5. HTTPStatus int `json:"status"`
  6. }
  7. type externalAuthRequest struct {
  8. Username string `json:"username"`
  9. Password string `json:"password"`
  10. PublicKey string `json:"public_key"`
  11. }
  12. // SFTPGoExtensionsFilter defines filters based on file extensions
  13. type SFTPGoExtensionsFilter struct {
  14. Path string `json:"path"`
  15. AllowedExtensions []string `json:"allowed_extensions,omitempty"`
  16. DeniedExtensions []string `json:"denied_extensions,omitempty"`
  17. }
  18. // SFTPGoUserFilters defines additional restrictions for an SFTPGo user
  19. type SFTPGoUserFilters struct {
  20. AllowedIP []string `json:"allowed_ip,omitempty"`
  21. DeniedIP []string `json:"denied_ip,omitempty"`
  22. DeniedLoginMethods []string `json:"denied_login_methods,omitempty"`
  23. FileExtensions []SFTPGoExtensionsFilter `json:"file_extensions,omitempty"`
  24. }
  25. // S3FsConfig defines the configuration for S3 based filesystem
  26. type S3FsConfig struct {
  27. Bucket string `json:"bucket,omitempty"`
  28. KeyPrefix string `json:"key_prefix,omitempty"`
  29. Region string `json:"region,omitempty"`
  30. AccessKey string `json:"access_key,omitempty"`
  31. AccessSecret string `json:"access_secret,omitempty"`
  32. Endpoint string `json:"endpoint,omitempty"`
  33. StorageClass string `json:"storage_class,omitempty"`
  34. UploadPartSize int64 `json:"upload_part_size,omitempty"`
  35. UploadConcurrency int `json:"upload_concurrency,omitempty"`
  36. }
  37. // GCSFsConfig defines the configuration for Google Cloud Storage based filesystem
  38. type GCSFsConfig struct {
  39. Bucket string `json:"bucket,omitempty"`
  40. KeyPrefix string `json:"key_prefix,omitempty"`
  41. Credentials string `json:"credentials,omitempty"`
  42. AutomaticCredentials int `json:"automatic_credentials,omitempty"`
  43. StorageClass string `json:"storage_class,omitempty"`
  44. }
  45. // SFTPGoFilesystem defines cloud storage filesystem details
  46. type SFTPGoFilesystem struct {
  47. // 0 local filesystem, 1 Amazon S3 compatible, 2 Google Cloud Storage
  48. Provider int `json:"provider"`
  49. S3Config S3FsConfig `json:"s3config,omitempty"`
  50. GCSConfig GCSFsConfig `json:"gcsconfig,omitempty"`
  51. }
  52. type virtualFolder struct {
  53. VirtualPath string `json:"virtual_path"`
  54. MappedPath string `json:"mapped_path"`
  55. }
  56. // SFTPGoUser defines an SFTPGo user
  57. type SFTPGoUser struct {
  58. // Database unique identifier
  59. ID int64 `json:"id"`
  60. // 1 enabled, 0 disabled (login is not allowed)
  61. Status int `json:"status"`
  62. // Username
  63. Username string `json:"username"`
  64. // Account expiration date as unix timestamp in milliseconds. An expired account cannot login.
  65. // 0 means no expiration
  66. ExpirationDate int64 `json:"expiration_date"`
  67. Password string `json:"password,omitempty"`
  68. PublicKeys []string `json:"public_keys,omitempty"`
  69. HomeDir string `json:"home_dir"`
  70. // Mapping between virtual paths and filesystem paths outside the home directory. Supported for local filesystem only
  71. VirtualFolders []virtualFolder `json:"virtual_folders,omitempty"`
  72. // If sftpgo runs as root system user then the created files and directories will be assigned to this system UID
  73. UID int `json:"uid"`
  74. // If sftpgo runs as root system user then the created files and directories will be assigned to this system GID
  75. GID int `json:"gid"`
  76. // Maximum concurrent sessions. 0 means unlimited
  77. MaxSessions int `json:"max_sessions"`
  78. // Maximum size allowed as bytes. 0 means unlimited
  79. QuotaSize int64 `json:"quota_size"`
  80. // Maximum number of files allowed. 0 means unlimited
  81. QuotaFiles int `json:"quota_files"`
  82. // List of the granted permissions
  83. Permissions map[string][]string `json:"permissions"`
  84. // Used quota as bytes
  85. UsedQuotaSize int64 `json:"used_quota_size"`
  86. // Used quota as number of files
  87. UsedQuotaFiles int `json:"used_quota_files"`
  88. // Last quota update as unix timestamp in milliseconds
  89. LastQuotaUpdate int64 `json:"last_quota_update"`
  90. // Maximum upload bandwidth as KB/s, 0 means unlimited
  91. UploadBandwidth int64 `json:"upload_bandwidth"`
  92. // Maximum download bandwidth as KB/s, 0 means unlimited
  93. DownloadBandwidth int64 `json:"download_bandwidth"`
  94. // Last login as unix timestamp in milliseconds
  95. LastLogin int64 `json:"last_login"`
  96. // Additional restrictions
  97. Filters SFTPGoUserFilters `json:"filters"`
  98. // Filesystem configuration details
  99. FsConfig SFTPGoFilesystem `json:"filesystem"`
  100. }