Appendix: Ktra Web APIs
Ktra Web APIs
are extra web APIs that are not specified in the specification but required to manage users.
Login/Password users API
Since all APIs send passwords in cleartext, it is highly recommended that you connect the registry from your local network only OR use an HTTPS connection.
Create a new user
- Specification
Endpoint | /ktra/api/v1/new_user/{user_name} |
Method | POST |
Body | { "password": "PASSWORD" } |
- Response
{
"token": "TOKEN"
}
Login
- Specification
Endpoint | /ktra/api/v1/login/{user_name} |
Method | POST |
Body | { "password": "PASSWORD" } |
- Response
{
"token": "NEW TOKEN"
}
Change password
- Specification
Endpoint | /ktra/api/v1/change_password/{user_name} |
Method | POST |
Body | { "old_password": "OLD PASSWORD", "new_password": "NEW PASSWORD" } |
- Response
{
"token": "NEW TOKEN"
}
Crates.io Mirroring
Note:
This API can be available when crates-io-mirroring feature is enabled.
- Specification
Endpoint | /ktra/api/v1/mirror/{crate_name}/{version}/download |
Method | GET |
Body | - |
- Response
Binary file.
OpenId API
When using the OpenId feature, you do not have any of the insecure user management endpoints active, and instead you get one endpoint to see your existing token/create a new one, and one endpoint to revoke your old token replacing it with a new one.
As the token end up being sent in cleartext still, it is still recommended to be either inside a small, trusted VPN or use HTTPS, or both.
For both endpoints, you will go through an OpenId authentication flow, so unless you already have an opened session, you must call this endpoint interactively.
See existing token, creating it for first time users
This is the same endpoint as the one being exposed for the cargo login
flow
- Specification
Endpoint | /me |
Method | GET |
- Response
If the user already had a token:
{
"username": "issuer:user_identity",
"existing_token": "SOME TOKEN"
}
If the user never had a token:
{
"username": "issuer:user_identity",
"new_token": "SOME TOKEN",
"revoked_token": null
}
Force token replacement
- Specification
Endpoint | /replace_token |
Method | GET |
- Response
{
"username": "issuer:user_identity",
"new_token": "SOME TOKEN",
"revoked_token": "A NOW INVALID TOKEN"
}