The titan User Service
The titan User Service can be reached via a REST API that serves under the port number HOST:9000.
Building/ running
To run the service simply use go run ./cmd/user
or to create an exe go build ./cmd/user
It features the following command line arguments:
Name | Options (default) | Purpose |
---|---|---|
port | (8085) | Port on which the User Service serves |
log-level | info/debug/warning/error | Log level |
(info) | ||
log-to-kafka | (false) | Flag: use kafka hook for logging |
kafka | (10.14.0.23:9092) | host:port of kafka broker |
service-topic | (titan.servicelogs) | kafka topic for logs |
config-file | (internal/app/user/config.yaml) | Configuration file |
smtp-user | Auth for SMTP server | |
smtp-password | Auth for SMTP server | |
smtp-address | SMTP address for establish connection | |
smtp-port | SMTP port | |
email-from | (no-reply@industrial-devops.org) | default from-email when sending an email |
smtp-enable | (false) | For development env we do not want to send email. In production need to set this to true |
api-base-path | (https://titan.industrial-devops.org/apis/) | Path where EndpointProvider serves configurable APIs |
The default configuration file contains the following items:
Name | Type | Doc (default value) | Constraints |
---|---|---|---|
database | string | URL of the Database (127.0.0.1:27017) | |
allowed-origins | list | List of allowed origins for CORS request | [not null] |
user-manager | string | URL of the User Service (http://127.0.0.1:9000) | |
service-ids | list of strings | no default set, add id of EndpointProvider, Flowmanager | |
service-id | string | no default set, set id | |
flowmanager | string | host:port of FlowManager (localhost:9002) | |
use-tls | boolean | Send email with StartTLS. default is True |
Generally, all settings listed above can be done also via environment variables, whereby the variables are composed of a prefix (TITAN_UM) and the argument using snake case:
TITAN_UM_ARGUMENT
, e.g. TITAN_UM_LOG_LEVEL
Usage
Generally, all queries to the User Service are formulated by sending a json object with the fields :
{
"username": "UserName",
"email": "Email",
"password": "Password"
}
UserWithPassword
structure of a user object with password
Items:
Name | Type | Doc | Constraints |
---|---|---|---|
Username | string | user name | [not null] |
string | [not null] | ||
Password | string | password | [not null] |
IsAdmin | boolean | flag: admin rights | |
IsAllowedToUpload | boolean | flag: package upload rights |
User
structure of a user object
Items:
Name | Type | Doc | Constraints |
---|---|---|---|
Username | string | username | [not null] |
string | [not null] | ||
IsAdmin | boolean | flag: admin rights | |
IsAllowedToUpload | boolean | flag: package upload rights |
ChangePassword
structure of a change password request body
Items:
Name | Type | Doc | Constraints |
---|---|---|---|
User | UserWithPassword | UserWithPassword | [not null] |
OldPassword | string | old_password | [not null] |
APIS
Signup
To sign up, need the JSON object UserWithPassword, IsAdmin, IsAllowedToSignup will be ignored
API functions
/userservice/signup
Type: POST or PUT
Response
If successful, the response header will contain a token and User object.
Signup with invitation link
To sign up, need the JSON object UserWithPassword
API functions
/userservice/signup?id=<token>
Type: POST or PUT
Response
If successful, the response header will contain a token and User object.
Login
To Login, need the JSON object UserWithPassword
API functions
/userservice/login
Type: POST or PUT
Response
If successful, the response header will contain a token.
Logout
To Logout a user
API functions
/userservice/logout
Type: GET
Response
If successful, the response header will contain a expired cookie that has empty token.
Authentication
To authentication a user need to send the cookie that contain a token
API functions
/userservice/authentication
Type: GET
Response
If successful, the response StatusOk in HTTP and list of Users
IsAdmin
To authorize a user need to send the cookie that contain a token
API functions
/userservice/isadmin
Type: GET
Response
If successful, the response StatusOk in HTTP and 'true' in body
Get Users
To get all users as Type User. You need admin role for this end point
API functions
/userservice/users
Type: GET
Response
If successful, the response StatusOk in HTTP and list of Users
Delete user
Users can only delete themselfs, despite admins, who are also allowed to delete users.
API functions
/userservice/users/<id string>
Type: DELETE
Request data
UserWithPassword objects password as JSON need to send in body.
Response
If successful, the response StatusOk in HTTP
Update user
Users can only update themselves
API functions
/userservice/users/<id string>
Type: PUT
Request data
UserWithPassword objects in body as JSON type.
Response
If successful, the response StatusOk in HTTP
Change Passwords
Admin can use this API to change the other user passwords. User can change password for his own account.
ChangePassword as JSON need to send in body.
API functions
/userservice/changepassword
Type: PUT
Response
If successful, the response StatusOk.
Get platform configuration
API functions
/userservice/platformConfig
Type: GET
Response
If successful, the response StatusOk in HTTP and the Platform configuration as a json object .
Update platform configuration
API functions
/userservice/platformConfig
Type: PUT
Send an updated platform configuration as a json object.
Response
If successful, the response StatusOk in HTTP and the platform configuration as a json object .
Generate Invitation Link to Signup
API functions
/userservice/invite?email=<email>
Type: POST
Response
If successful, the response StatusOk in HTTP and the invitation as a json object .
Set administrator rights for a user
This endpoint provides the facility to set or unset a user adminstrator rights.
This endpoint is only accessibly by a user that is already an Admin in the system.
API functions
/userservice/users/{id:string}/rights/admin
Type: PUT (make admin)
/userservice/users/{id:string}/rights/admin
Type: DELETE (remove admin rights)
Request data
No data needs to be sent
Response
If successful, the response StatusOk in HTTP
Allow user to upload brick packages
Using this endpoint, admins can allow a user to upload brick packages.
API functions
/userservice/users/{id:string}/rights/upload
Type: PUT (allow to upload)
/userservice/users/{id:string}/rights/upload
Type: DELETE (remove upload rights)
Request data
No data needs to be sent.
Response
If successful, the response StatusOk in HTTP
Get User
To get a specific user as a subset of Type User.
API functions
/userservice/users/<id string>
Type: GET
Response
If successful, the response StatusOk in HTTP a user object containing the ID and username of the user
Example:
{
id: "443bafdf-f98c-11ea-a835-98fa9b446af4"
username: "this_is_a_username"
}
Get user information from an email address
To get a specific user as a subset of Type User.
API functions
/userservice/user/email/<email>
Type: GET
Response
If successful, the response StatusOk in HTTP a user object containing the ID, email, and username of the user. Only titan services can access this endpoint.
Example:
{
id: "443bafdf-f98c-11ea-a835-98fa9b446af4"
username: "this_is_a_username"
email: "some Email adress"
}
Send email to a user
Send an email to a registered user.
API functions
/userservice/user/<id: string>/email
Type: POST
Request
Send email with subject, sections. Example:
{
subject: "notification from titan platform"
sections: ["Be notified about smth",
"Click on a button "]
}
Response
If successful, the response StatusOk is sent.
Send message to all users
Send a particular message to all registered users.
API functions
/userservice/user/<id: string>/sendtoall
Type: PUT
Request
Send email with subject, message. Example:
{
subject: "notification from titan platform"
message: "#Any Markdown Text"
}
Response
If successful, the response StatusOk is sent.
Signup Request
Before signing up we need to verify the email address. This request sends the appropriate email to the user.
API functions
/userservice/signupRequest?email=<email string>
Type: POST
Response
If successful the response will contain a Status: Ok in the HTTP header and a success message in the body. If unsuccessful the response will contain a Status: InternalServerError in the HTTP header.
Example for a successful response in the body:
verification_email_sent
Signup Link Verification
Verify the signup link and get the email address for continue the signup process
API functions
/userservice/signupRequest?token=<token string>
Type: GET
Response
If successful, the response is Status: Ok in HTTP header and the email address that user want to signup with in the body. If unsuccessful the response will contain a Status: InternalServerError in the HTTP header.
Example for a successful response in the body:
user@domain.com
Request Reset Password
For resetting user account password, generate a link with token and send it to user email address
API functions
/userservice/resetpassword?email=<email string>
Type: GET
Response
If successful, the response Status: Ok in HTTP
Reset Password
After validating a reset password link, read the new password from the request body and save it to the user service DB.
JSON need to send in body.
{
"password": "new password"
}
API functions
/userservice/resetpassword?id=<id string>
Type: POST
Response
If successful, the response Status: Ok in HTTP
Get User with service key
To get a specific user as a subset of Type User.
API functions
/userservice/user/<id string>
Type: GET
Response
If successful, the response StatusOk in HTTP and User object
API functions
/userservice/users/changeEmail/<token>
Type: POST
Response
If successful, the response is Status: Ok in HTTP header. If unsuccessful the response will contain a Status: InternalServerError in the HTTP header.