storj/satellite/admin
Stefan Benten 2f648fd981 satellite: make limits be nullable
Currently we have no way to actually set one
of the following limits to 0 (meaning not usable):

- maxBuckets
- usageLimit
- bandwidthLimit

With having the field nullable,
NULL corresponds to the global default,
0 now actually 0 and
a set value determines a custom limit.

Change-Id: I92bb77529dcbd0881ae8368921be9d246eb0919e
2020-09-21 19:34:19 +00:00
..
common.go satellite/admin: change returned data to be json encoded 2020-08-05 15:33:39 +02:00
coupon_test.go satellite/admin: add check project usage endpoint and fix some leftover http.Error handling 2020-08-13 13:48:34 +00:00
coupon.go satellite/admin: change returned data to be json encoded 2020-08-05 15:33:39 +02:00
project_test.go satellite: make limits be nullable 2020-09-21 19:34:19 +00:00
project.go satellite: make limits be nullable 2020-09-21 19:34:19 +00:00
README.md satellite/admin: add get handler for projects 2020-09-06 01:40:11 +02:00
server_test.go satellite/admin: add check project usage endpoint and fix some leftover http.Error handling 2020-08-13 13:48:34 +00:00
server.go satellite/admin: use correct period end time to get results 2020-09-09 09:01:42 +00:00
user_test.go satellite/admin: add check project usage endpoint and fix some leftover http.Error handling 2020-08-13 13:48:34 +00:00
user.go satellite/{payments,admin}: add deletion of user creditcards on account deletion 2020-08-27 10:18:19 +00:00

satellite/admin

Satellite Admin package provides API endpoints for administrative tasks.

Requires setting Authorization header for requests.

POST /api/user

Adds a new user.

An example of a required request body:

{
    "email": "alice@mail.test",
    "fullName": "Alice Test",
    "password": "password"
}

A successful response body:

{
    "id":           "12345678-1234-1234-1234-123456789abc",
    "email":        "alice@mail.test",
    "fullName":     "Alice Test",
    "shortName":    "",
    "passwordHash": ""
}

PUT /api/user/{user-email}

Updates the details of existing user found by its email.

A successful response body:

{
    "email": "alice+2@mail.test",
    "shortName": "Al",
    "passwordHash": "1234abcd"
}

GET /api/user/{user-email}

This endpoint returns information about user and their projects.

A successful response body:

{
    "user":{
        "id": "12345678-1234-1234-1234-123456789abc",
        "fullName": "Alice Bob",
        "email":"alice@example.test"
    },
    "projects":[
        {
            "id": "abcabcab-1234-abcd-abcd-abecdefedcab",
            "name": "Project",
            "description": "Project to store data.",
            "ownerId": "12345678-1234-1234-1234-123456789abc"
        }
    ],
    "coupons": [
        {
            "id":          "2fcdbb8f-8d4d-4e6d-b6a7-8aaa1eba4c89",
            "userId":      "12345678-1234-1234-1234-123456789abc",
            "duration":    2,
            "amount":      3000,
            "description": "promotional coupon (valid for 2 billing cycles)",
            "type":        0,
            "status":      0,
            "created":     "2020-05-19T00:34:13.265761+02:00"
        }
    ]
}

DELETE /api/user/{user-email}

Deletes the user.

POST /api/coupon

Adds a coupon for specific user.

An example of a required request body:

{
    "userId":      "12345678-1234-1234-1234-123456789abc",
    "duration":    2,
    "amount":      3000,
    "description": "promotional coupon (valid for 2 billing cycles)"
}

A successful response body:

{
    "id": "2fcdbb8f-8d4d-4e6d-b6a7-8aaa1eba4c89"
}

GET /api/coupon/{coupon-id}

Gets a coupon with the specified id.

A successful response body:

{
    "id":          "2fcdbb8f-8d4d-4e6d-b6a7-8aaa1eba4c89",
    "userId":      "12345678-1234-1234-1234-123456789abc",
    "duration":    2,
    "amount":      3000,
    "description": "promotional coupon (valid for 2 billing cycles)",
    "type":        0,
    "status":      0,
    "created":     "2020-05-19T00:34:13.265761+02:00"
}

DELETE /api/coupon/{coupon-id}

Deletes the specified coupon.

GET /api/project/{project-id}/usage

This endpoint returns whether the project has outstanding usage or not.

A project with not usage returns status code 200 and {"result":"no project usage exist"}.

GET /api/project/{project-id}/limit

This endpoint returns information about project limits.

A successful response body:

{
  "usage": {
    "amount": "1.0 TB",
    "bytes": 1000000000000
  },
  "bandwidth": {
    "amount": "1.0 TB",
    "bytes": 1000000000000
  },
  "rate": {
    "rps": 0
  }
}

POST /api/project/{project-id}/limit?usage={value}

Updates usage limit for a project.

POST /api/project/{project-id}/limit?bandwidth={value}

Updates bandwidth limit for a project.

POST /api/project/{project-id}/limit?rate={value}

Updates rate limit for a project.

POST /api/project/{project-id}/limit?buckets={value}

Updates bucket limit for a project.

GET /api/project/{project-id}

Gets the common information about a project.

PUT /api/project/{project-id}

Updates project name or description.

{
    "projectName": "My new Project Name",
    "description": "My new awesome description!"
}

DELETE /api/project/{project-id}

Deletes the project.

POST /api/project

Adds a project for specific user.

An example of a required request body:

{
    "ownerId": "ca7aa0fb-442a-4d4e-aa36-a49abddae837",
    "projectName": "My Second Project"
}

A successful response body:

{
    "projectId": "ca7aa0fb-442a-4d4e-aa36-a49abddae837"
}