diff --git a/go.mod b/go.mod index a20ff79d..c3771aa5 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/aws/aws-sdk-go v1.35.19 github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect github.com/eikenb/pipeat v0.0.0-20200430215831-470df5986b6d - github.com/fclairamb/ftpserverlib v0.8.1-0.20201007044523-7c6c9f869560 + github.com/fclairamb/ftpserverlib v0.9.0 github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-chi/chi v4.1.2+incompatible github.com/go-chi/render v1.0.1 @@ -26,7 +26,7 @@ require ( github.com/mitchellh/mapstructure v1.3.3 // indirect github.com/otiai10/copy v1.2.0 github.com/pelletier/go-toml v1.8.1 // indirect - github.com/pires/go-proxyproto v0.3.0 + github.com/pires/go-proxyproto v0.3.1 github.com/pkg/sftp v1.12.1-0.20201002132022-fcaa492add82 github.com/prometheus/client_golang v1.8.0 github.com/rs/cors v1.7.1-0.20200626170627-8b4a00bd362b @@ -42,10 +42,10 @@ require ( go.etcd.io/bbolt v1.3.5 go.uber.org/automaxprocs v1.3.0 golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 - golang.org/x/net v0.0.0-20201029221708-28c70e62bb1d + golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 golang.org/x/sys v0.0.0-20201029080932-201ba4db2418 golang.org/x/text v0.3.4 // indirect - golang.org/x/tools v0.0.0-20201030174515-8da1a626af69 // indirect + golang.org/x/tools v0.0.0-20201031021630-582c62ec74d0 // indirect google.golang.org/api v0.34.0 google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3 // indirect @@ -57,5 +57,5 @@ require ( replace ( github.com/jlaffaye/ftp => github.com/drakkan/ftp v0.0.0-20200730125632-b21eac28818c golang.org/x/crypto => github.com/drakkan/crypto v0.0.0-20201017144935-4e8324213ac3 - golang.org/x/net => github.com/drakkan/net v0.0.0-20201030182451-5fdd610a97c6 + golang.org/x/net => github.com/drakkan/net v0.0.0-20201101072345-49fbbaa64b66 ) diff --git a/go.sum b/go.sum index 852bb2c5..459658c2 100644 --- a/go.sum +++ b/go.sum @@ -119,8 +119,8 @@ github.com/drakkan/crypto v0.0.0-20201017144935-4e8324213ac3 h1:zMCXHTGF8QJ7GWQ2 github.com/drakkan/crypto v0.0.0-20201017144935-4e8324213ac3/go.mod h1:v3bhWOXGYda7H5d2s5t9XA6th3fxW3s0MQxU1R96G/w= github.com/drakkan/ftp v0.0.0-20200730125632-b21eac28818c h1:QSXIWohSNn0negBVSKEjKTpdpGEsW7weVW8QNzviLHY= github.com/drakkan/ftp v0.0.0-20200730125632-b21eac28818c/go.mod h1:2lmrmq866uF2tnje75wQHzmPXhmSWUt7Gyx2vgK1RCU= -github.com/drakkan/net v0.0.0-20201030182451-5fdd610a97c6 h1:fjOkkszqlkEO81L1kJgtQ1Hc4rxuLc3cVhIP5arbVeo= -github.com/drakkan/net v0.0.0-20201030182451-5fdd610a97c6/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +github.com/drakkan/net v0.0.0-20201101072345-49fbbaa64b66 h1:Y92YgfaycEmjy9L6CY633pCrxGtAlV3wh5n4vS7U+os= +github.com/drakkan/net v0.0.0-20201101072345-49fbbaa64b66/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -134,8 +134,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fclairamb/ftpserverlib v0.8.1-0.20201007044523-7c6c9f869560 h1:rBqKb2pMRScNXenAhRo3HCS3DBfBW/fNQnYGidNXMtI= -github.com/fclairamb/ftpserverlib v0.8.1-0.20201007044523-7c6c9f869560/go.mod h1:sMPjxPuoVwwoV87gdPkyTb0dVofmCKpVZCQ3rMVokjc= +github.com/fclairamb/ftpserverlib v0.9.0 h1:RW20tmYTY06WQdY5l9+iK7ES7Xi/ICgnG/sTXhSwsCY= +github.com/fclairamb/ftpserverlib v0.9.0/go.mod h1:sMPjxPuoVwwoV87gdPkyTb0dVofmCKpVZCQ3rMVokjc= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -378,8 +378,8 @@ github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrap github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pires/go-proxyproto v0.3.0 h1:++BY4zWOpWha50IDjdnp7+NRTLuOHqMQC5PkgS7I4u4= -github.com/pires/go-proxyproto v0.3.0/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= +github.com/pires/go-proxyproto v0.3.1 h1:eWb52zeDUbSUDBV+8aVCfOy0pnEG6DrDW3cJ/WKdQsk= +github.com/pires/go-proxyproto v0.3.1/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -675,7 +675,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20200915173823-2db8f0ff891c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201017001424-6003fad69a88/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201030174515-8da1a626af69/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201031021630-582c62ec74d0/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/httpd/schema/openapi.yaml b/httpd/schema/openapi.yaml index 54495de3..4a10d279 100644 --- a/httpd/schema/openapi.yaml +++ b/httpd/schema/openapi.yaml @@ -2,17 +2,33 @@ openapi: 3.0.3 info: title: SFTPGo description: 'SFTPGo REST API' - version: 2.0.1 + version: 2.0.2 servers: -- url: /api/v1 + - url: /api/v1 security: -- BasicAuth: [] + - BasicAuth: [] paths: + /healthz: + get: + servers: + - url : / + tags: + - healthcheck + summary: health check + description: Health endpoint to check if the application is still running and responding to requests + responses: + 200: + description: successful operation + content: + text/plain: + schema: + type: string + example: ok /version: get: tags: - - version + - version summary: Get version details operationId: get_version responses: @@ -33,7 +49,7 @@ paths: /providerstatus: get: tags: - - providerstatus + - providerstatus summary: Get data provider status operationId: get_provider_status responses: @@ -56,7 +72,7 @@ paths: /connection: get: tags: - - connections + - connections summary: Get the active users and info about their uploads/downloads operationId: get_connections responses: @@ -79,16 +95,16 @@ paths: /connection/{connectionID}: delete: tags: - - connections + - connections summary: Terminate an active connection operationId: close_connection parameters: - - name: connectionID - in: path - description: ID of the connection to close - required: true - schema: - type: string + - name: connectionID + in: path + description: ID of the connection to close + required: true + schema: + type: string responses: 200: description: successful operation @@ -111,7 +127,7 @@ paths: /quota_scan: get: tags: - - quota + - quota summary: Get the active quota scans for users home directories operationId: get_quota_scans responses: @@ -133,7 +149,7 @@ paths: $ref: '#/components/responses/DefaultResponse' post: tags: - - quota + - quota summary: start a new user quota scan description: A quota scan update the number of files and their total size for the specified user operationId: start_quota_scan @@ -169,7 +185,7 @@ paths: /quota_update: put: tags: - - quota + - quota summary: update the user used quota limits description: Set the current used quota limits for the given user operationId: quota_update @@ -219,7 +235,7 @@ paths: /folder_quota_update: put: tags: - - quota + - quota summary: update the folder used quota limits description: Set the current used quota limits for the given folder operationId: folder_quota_update @@ -269,7 +285,7 @@ paths: /folder_quota_scan: get: tags: - - quota + - quota summary: Get the active quota scans for folders operationId: get_folders_quota_scans responses: @@ -291,7 +307,7 @@ paths: $ref: '#/components/responses/DefaultResponse' post: tags: - - quota + - quota summary: start a new folder quota scan description: A quota scan update the number of files and their total size for the specified folder operationId: start_folder_quota_scan @@ -327,7 +343,7 @@ paths: /folder: get: tags: - - folders + - folders summary: Returns an array with one or more folders operationId: get_folders parameters: @@ -384,7 +400,7 @@ paths: $ref: '#/components/responses/DefaultResponse' post: tags: - - folders + - folders summary: Adds a new folder operationId: add_folder description: a new folder with the specified mapped_path will be added. To update the used quota parameters a quota scan is needed @@ -413,16 +429,16 @@ paths: $ref: '#/components/responses/DefaultResponse' delete: tags: - - folders + - folders summary: Delete an existing folder operationId: delete_folder parameters: - - name: folder_path - in: query - description: path to the folder to delete - required: true - schema: - type: string + - name: folder_path + in: query + description: path to the folder to delete + required: true + schema: + type: string responses: 200: description: successful operation @@ -447,7 +463,7 @@ paths: /user: get: tags: - - users + - users summary: Returns an array with one or more users description: For security reasons hashed passwords are omitted in the response operationId: get_users @@ -505,7 +521,7 @@ paths: $ref: '#/components/responses/DefaultResponse' post: tags: - - users + - users summary: Adds a new user operationId: add_user requestBody: @@ -534,18 +550,18 @@ paths: /user/{userID}: get: tags: - - users + - users summary: Find user by ID description: For security reasons the hashed password is omitted in the response operationId: get_user_by_id parameters: - - name: userID - in: path - description: ID of the user to retrieve - required: true - schema: - type: integer - format: int32 + - name: userID + in: path + description: ID of the user to retrieve + required: true + schema: + type: integer + format: int32 responses: 200: description: successful operation @@ -567,28 +583,28 @@ paths: $ref: '#/components/responses/DefaultResponse' put: tags: - - users + - users summary: Update an existing user operationId: update_user parameters: - - name: userID - in: path - description: ID of the user to update - required: true - schema: - type: integer - format: int32 - - in: query - name: disconnect - schema: - type: integer - enum: - - 0 - - 1 - description: > - Disconnect: - * `0` The user will not be disconnected and it will continue to use the old configuration until connected. This is the default - * `1` The user will be disconnected after a successful update. It must login again and so it will be forced to use the new configuration + - name: userID + in: path + description: ID of the user to update + required: true + schema: + type: integer + format: int32 + - in: query + name: disconnect + schema: + type: integer + enum: + - 0 + - 1 + description: > + Disconnect: + * `0` The user will not be disconnected and it will continue to use the old configuration until connected. This is the default + * `1` The user will be disconnected after a successful update. It must login again and so it will be forced to use the new configuration requestBody: required: true content: @@ -618,17 +634,17 @@ paths: $ref: '#/components/responses/DefaultResponse' delete: tags: - - users + - users summary: Delete an existing user operationId: delete_user parameters: - - name: userID - in: path - description: ID of the user to delete - required: true - schema: - type: integer - format: int32 + - name: userID + in: path + description: ID of the user to delete + required: true + schema: + type: integer + format: int32 responses: 200: description: successful operation @@ -653,7 +669,7 @@ paths: /dumpdata: get: tags: - - maintenance + - maintenance summary: Backup SFTPGo data serializing them as JSON description: The backup is saved to a local file to avoid to expose users hashed passwords over the network. The output of dumpdata can be used as input for loaddata operationId: dumpdata @@ -697,7 +713,7 @@ paths: /loaddata: get: tags: - - maintenance + - maintenance summary: Restore SFTPGo data from a JSON backup description: Users and folders will be restored one by one and the restore is stopped if a user/folder cannot be added or updated, so it could happen a partial restore operationId: loaddata