2. User Management

2.1. Users

GET /users/

HTTP GET/HEAD rest route. HEAD will be the same result except their will be no body.

Example request:

GET /rest/users/ HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1000
X-Total-Count: 1
X-API-Version: 1.0

{
   "results": [
        {
          "public_id": 1,
          "user_name": "admin",
          "active": true,
          "group_id": 1,
          "registration_time": "2020-01-01 00:00:00.000000",
          "authenticator": "LocalAuthenticationProvider",
          "email": null,
          "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
          "image": null,
          "first_name": null,
          "last_name": null
        }
  ],
  "count": 1,
  "total": 1,
  "parameters": {
    "limit": 10,
    "sort": "public_id",
    "order": 1,
    "page": 1,
    "filter": {},
    "optional": {}
  },
  "pager": {
    "page": 1,
    "page_size": 10,
    "total_pages": 1
  },
  "pagination": {
    "current": "http://datagerry.com/rest/users/",
    "first": "http://datagerry.com/rest/users/?page=1",
    "prev": "http://datagerry.com/rest/users/?page=1",
    "next": "http://datagerry.com/rest/users/?page=1",
    "last": "http://datagerry.com/rest/users/?page=1"
  },
  "response_type": "GET",
  "model": "User",
  "time": "2020-01-01 00:00:00.000000"
}
Query Parameters
  • sort – the sort field name. default is public_id

  • order – the sort order value for ascending or descending. default is 1 for ascending

  • page – the current view page. default is 1

  • limit – max number of results. default is 10

  • filter – a mongodb query filter. default is {} which means everything

Request Headers
Response Headers
Status Codes
GET /users/(int: public_id)

HTTP GET/HEAD rest route for a single resource by its ID.

Example request

GET /rest/users/1 HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "result": {
        "public_id": 1,
        "user_name": "admin",
        "active": true,
        "group_id": 1,
        "registration_time": "2020-01-01 00:00:00.000000",
        "authenticator": "LocalAuthenticationProvider",
        "email": null,
        "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
        "image": null,
        "first_name": null,
        "last_name": null
    },
    "response_type": "GET",
    "model": "User",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
POST /users/

HTTP POST route for inserting a new user.

Example request

POST /rest/users/ HTTP/1.1
Host: datagerry.com
Accept: application/json

{
    "user_name": "test",
    "active": true,
    "group_id": 2,
    "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
}

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
Location: http://datagerry.com/rest/users/2
X-API-Version: 1.0

{
  "result_id": 2,
  "raw": {
        "public_id": 2,
        "user_name": "test",
        "active": true,
        "group_id": 2,
        "registration_time": "2020-01-01 00:00:00.000000",
        "authenticator": "LocalAuthenticationProvider",
        "email": null,
        "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
        "image": null,
        "first_name": null,
        "last_name": null
    },
  "response_type": "INSERT",
  "model": "User",
  "time": "1970-01-01T00:00:00"
}
Request Headers
Response Headers
Status Codes
PUT /users/(int: public_id)

HTTP PUT/PATCH route for updating a existing user.

Example request

PUT /rest/users/1 HTTP/1.1
Host: datagerry.com
Accept: application/json

{
    "public_id": 1,
    "user_name": "admin",
    "active": false,
    "group_id": 1,
    "registration_time": "2020-01-01 00:00:00.000000",
    "authenticator": "LocalAuthenticationProvider",
    "email": null,
    "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
    "image": null,
    "first_name": null,
    "last_name": null
}

Example response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
Location: http://datagerry.com/rest/users/1
X-API-Version: 1.0

{
    "result": {
        "public_id": 1,
        "user_name": "admin",
        "active": false,
        "group_id": 1,
        "registration_time": "2020-01-01 00:00:00.000000",
        "authenticator": "LocalAuthenticationProvider",
        "email": null,
        "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
        "image": null,
        "first_name": null,
        "last_name": null
    },
    "response_type": "UPDATE",
    "model": "User",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
DELETE /users/(int: public_id)

HTTP DELETE route for deleting a existing user.

Example request

DELETE /rest/users/1 HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "deleted_entry": {
        "public_id": 1,
        "user_name": "admin",
        "active": false,
        "group_id": 1,
        "registration_time": "2020-01-01 00:00:00.000000",
        "authenticator": "LocalAuthenticationProvider",
        "email": null,
        "password": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
        "image": null,
        "first_name": null,
        "last_name": null
    },
  "response_type": "DELETE",
  "model": "User",
  "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes

2.2. Groups

GET /groups/

HTTP GET/HEAD rest route. HEAD will be the same result except their will be no body.

Example request:

GET /rest/groups/ HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1000
X-Total-Count: 1
X-API-Version: 1.0

{
   "results": [
        {
            "public_id": 1,
            "name": "admin",
            "label": "Administrator",
            "rights": [
                {
                    "level": 0,
                    "name": "base.*",
                    "label": "base.*",
                    "description": "Base application right",
                    "is_master": true
                }
            ]
        }
  ],
  "count": 1,
  "total": 1,
  "parameters": {
    "limit": 10,
    "sort": "public_id",
    "order": 1,
    "page": 1,
    "filter": {},
    "optional": {}
  },
  "pager": {
    "page": 1,
    "page_size": 10,
    "total_pages": 1
  },
  "pagination": {
    "current": "http://datagerry.com/rest/groups/",
    "first": "http://datagerry.com/rest/groups/?page=1",
    "prev": "http://datagerry.com/rest/groups/?page=1",
    "next": "http://datagerry.com/rest/groups/?page=1",
    "last": "http://datagerry.com/rest/groups/?page=1"
  },
  "response_type": "GET",
  "model": "Group",
  "time": "2020-01-01 00:00:00.000000"
}
Query Parameters
  • sort – the sort field name. default is public_id

  • order – the sort order value for ascending or descending. default is 1 for ascending

  • page – the current view page. default is 1

  • limit – max number of results. default is 10

  • filter – a mongodb query filter. default is {} which means everything

Request Headers
Response Headers
Status Codes
GET /groups/(int: public_id)

HTTP GET/HEAD rest route for a single resource by its ID.

Example request

GET /rest/groups/1 HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "result": {
        "public_id": 1,
        "name": "admin",
        "label": "Administrator",
        "rights": [
            {
                "level": 0,
                "name": "base.*",
                "label": "base.*",
                "description": "Base application right",
                "is_master": true
            }
        ]
    },
    "response_type": "GET",
    "model": "Group",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
POST /groups/

HTTP POST route for inserting a new group.

Example request

POST /rest/groups/ HTTP/1.1
Host: datagerry.com
Accept: application/json

{
    "name": "test",
    "label": "test",
    "rights": [
        "base.framework.object.*"
    ]
}

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
Location: http://datagerry.com/rest/groups/3
X-API-Version: 1.0

{
    "result_id": 3,
    "raw": {
        "public_id": 3,
        "name": "test",
        "label": "test",
        "rights": [
            {
                "level": 10,
                "name": "base.framework.object.*",
                "label": "object.*",
                "description": "Manage objects from framework",
                "is_master": true
            }
        ]
    },
    "response_type": "INSERT",
    "model": "Group",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
PUT /groups/(int: public_id)

HTTP PUT/PATCH route for updating a existing user.

Example request

PUT /rest/groups/3 HTTP/1.1
Host: datagerry.com
Accept: application/json

{
    "public_id": 3,
    "name": "test",
    "label": "Test",
    "rights": [
        "base.framework.object.*"
    ]
}

Example response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
Location: http://datagerry.com/rest/groups/3
X-API-Version: 1.0

{
    "result": {
        "public_id": 3,
        "name": "test",
        "label": "Test",
        "rights": [
            "base.framework.object.*"
        ]
    },
    "response_type": "UPDATE",
    "model": "Group",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
DELETE /groups/(int: public_id)

HTTP DELETE route for deleting a existing user.

Note

Group with PublicID 1 (Admin) & 2 (User) can not be deleted!

Example request

DELETE /rest/groups/3 HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "deleted_entry":  {
        "public_id": 3,
        "name": "test",
        "label": "Test",
        "rights": [
            {
                "level": 10,
                "name": "base.framework.object.*",
                "label": "object.*",
                "description": "Manage objects from framework",
                "is_master": true
            }
        ]
    },
    "response_type": "DELETE",
    "model": "Group",
    "time": "2020-01-01 00:00:00.000000"
}
Query Parameters
  • action – Parameter of GroupDeleteMode. MOVE will push all users in this group to passed group_id and DELETE will delete all users in this group.

  • group_id – The PublicID of the group which the MOVE action will be use.

Request Headers
Response Headers
Status Codes

2.3. Rights

Note

The right routes are static.

GET /rights/

HTTP GET/HEAD rest route. HEAD will be the same result except their will be no body.

Example request:

GET /rest/rights/ HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response:

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "results": [{
         "level": 0,
         "name": "base.*",
         "label": "base.*",
         "description": "Base application right",
         "is_master": true
    }],

    "count": 1,
    "total": 62,
    "parameters": {
        "limit": 1,
        "sort": "name",
        "order": 1,
        "page": 1,
        "filter": {},
        "optional": {
            "view": "list"
        }
   },
   "pager":{
        "page": 1,
        "page_size": 1,
        "total_pages": 62
   },
   "pagination": {
        "current": "http://datagerry.com/rest/rights/",
        "first": "http://datagerry.com/rest/rights/?page=1",
        "prev": "http://datagerry.com/rest/rights/?page=1",
        "next": "http://datagerry.com/rest/rights/?page=2",
        "last": "http://datagerry.com/rest/rights/?page=62"
   },
   "response_type": "GET",
   "model": "Right",
   "time": "2020-01-01 00:00:00.000000"
}
Query Parameters
  • sort – the sort field name. default is name.

  • order – the sort order value for ascending or descending. default is 1 for ascending

  • page – the current view page. default is 1

  • limit – max number of results. default is 10

  • filter – a mongodb query filter. default is {} which means everything

  • optionalview parameter. Default is list.

Request Headers
Response Headers
Status Codes
GET /rights/(str: name)

HTTP GET/HEAD rest route for a single resource by its name.

Example request

GET /rest/rights/base.* HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "result": {
        "level": 0,
        "name": "base.*",
        "label": "base.*",
        "description": "Base application right",
        "is_master": true
    },
    "response_type": "GET",
    "model": "Right",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
GET /rights/levels

HTTP GET/HEAD rest route for a all security levels.

Example request

GET /rest/rights/levels HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
  "result": {
    "CRITICAL": 100,
    "DANGER": 80,
    "SECURE": 50,
    "PROTECTED": 30,
    "PERMISSION": 10,
    "NOTSET": 0
  },
  "response_type": "GET",
  "model": "Security-Level",
  "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
  • 200 OK – Everything is fine.

2.4. Settings

GET /users/(int: user_id)/settings/

HTTP GET/HEAD rest route. HEAD will be the same result except their will be no body.

Example request:

GET /rest/users/1/settings/ HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1000
X-Total-Count: 1
X-API-Version: 1.0

{
  "results": [
    {
      "identifier": "test",
      "user_id": 1,
      "payload": {},
      "setting_type": "GLOBAL"
    }
  ],
  "response_type": "GET",
  "model": "UserSetting",
  "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
GET /users/(int: public_id)/settings/(str: identifier)

HTTP GET/HEAD rest route for a single resource by the UserID and the setting identifier.

Example request

GET /rest/users/1/settings/test HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
  "results": [
    {
      "identifier": "test",
      "user_id": 1,
      "payload": {},
      "setting_type": "GLOBAL"
    }
  ],
  "response_type": "GET",
  "model": "UserSetting",
  "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
POST /users/(int: public_id)/settings/

HTTP POST route for inserting a new setting.

Example request

POST /rest/users/1/settings/ HTTP/1.1
Host: datagerry.com
Accept: application/json

{
    "identifier" : "test",
    "user_id" : 1,
    "payload" : {},
    "setting_type" : "GLOBAL"
}

Example response

HTTP/1.1 201 CREATED
Content-Type: application/json
Content-Length: 100
Location: http://datagerry.com/rest/users/1/settings/test
X-API-Version: 1.0

{
  "result_id": "test",
  "raw": {
    "identifier": "test",
    "user_id": 1,
    "payload": {},
    "setting_type": "GLOBAL"
  },
  "response_type": "INSERT",
  "model": "UserSetting",
  "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
PUT /users/(int: public_id)/settings/(str: identifier)

HTTP PUT/PATCH route for updating a setting.

Example request

PUT /rest/users/1/settings/test HTTP/1.1
Host: datagerry.com
Accept: application/json

{
    "identifier" : "test",
    "user_id" : 1,
    "payload" : {},
    "setting_type" : "GLOBAL"
}

Example response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
Location: http://datagerry.com/rest/users/1/settings/test
X-API-Version: 1.0

{
    "result": {
        "identifier": "test",
        "user_id": 1,
        "payload": {},
        "setting_type": "GLOBAL"
    },
    "response_type": "UPDATE",
    "model": "UserSetting",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
DELETE /users/(int: public_id)/settings/(str: identifier)

HTTP DELETE route for deleting a existing setting.

Example request

DELETE /rest/users/1/settings/test HTTP/1.1
Host: datagerry.com
Accept: application/json

Example response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 100
X-API-Version: 1.0

{
    "deleted_entry": {
        "identifier": "test",
        "user_id": 1,
        "payload": {},
        "setting_type": "APPLICATION"
    },
    "response_type": "DELETE",
    "model": "UserSetting",
    "time": "2020-01-01 00:00:00.000000"
}
Request Headers
Response Headers
Status Codes
1. Setup a development system — DATAGERRY bugfix-NET-980_user-management-registered-date-display-f020cfb5e2820ab9f2f43ac40229f06a3a1bc4f2 documentation

1. Setup a development system

To set up a development environment DATAGERRY does not need any special tools. Only the generation of a productive binary is generated by additional software (more about this later). However, it is recommended to set up third-party programs for data storage and process management independently of the development environment.

1.1. Install Python

DataGerry is written in Python 3.6+. This is also the only dependency which is absolutely necessary to start the program. Python 2 is not supported. Older versions than Python 3.6 may run, but are not officially supported. The installation of Python 3 is different depending on the operating system. Please see at the official documentation for details: Download Python | Python.org

Note

We are using Python 3.6.x or higher, which is not compatible with Python 2.x.

1.2. Clone repository

Clone the git repository from our official mirror:

git clone https://github.com/NETHINKS/DATAGERRY

1.2.1. Install requirements

We recommend generating an isolated python environment like Virtualenv To install the python requirements run:

pip install -r requirements.txt

1.3. Setting up third party dependencies

1.3.1. MongoDB

MongoDB is a document-oriented NoSQL database. It is used to store content and the program uses necessary data. See the official installation guide for details: Install MongoDB Community Edition

1.3.2. RabbitMQ

RabbitMQ is an open source message broker software that implements the Advanced Message Queuing Protocol (AMQP). See the official installation guide for details: Downloading and Installing RabbitMQ

1.4. Modify configuration file

Default file is etc/cmdb.conf. The default configuration should look like this:

[Database]
host = 127.0.0.1
port = 27017
database_name = cmdb
;username = username
;password = password

[WebServer]
host = 0.0.0.0
port = 4000

[MessageQueueing]
host = 127.0.0.1
port = 5672
username = guest
password = guest
exchange = datagerry.eventbus
connection_attempts = 2
retry_delay = 6
use_tls = False

1.4.1. Database config

Configuration section for the MongoDB database.

Database config section table

Database

Description

Default value

Optional

host

IP address

127.0.0.1

port

connection port

27017

database_name

database name

cmdb

connection_timeout

timeout in ms for connection try

2000

username

authentication username

only required if the MongoDB database uses a authentication method

password

authentication password

only required if the MongoDB database uses a authentication method

1.4.2. Webserver config

Configuration section for the web(rest)-server.

Webserver config section table

Webserver

Description

Default value

Optional

host

webserver host address

0.0.0.0

if you want that the rest server is only reachable over the local machine use “127.0.0.1” or “localhost”

port

connection port

4000

1.4.3. Message queueing config

Configuration section for the message queueing server.

message queueing config section table

MessageQueueing

Description

Default value

Optional

host

RabbitMQ host adress

127.0.0.1

port

connection port

5672

username

authentication username

guest

password

authentication username

guest

exchange

used bus

datagerry.eventbus

DONT CHANGE THIS!

connection_attempts

2

retry_delay

time between connection retries

6

use_tls

using tls encryption

false

1.5. Starting the backend and frontend

For a development environment, the frontend must be started independently of the backend, since these systems are only connected during the compile process. If only one development of the backend is desired, the frontend can be ignored. This will then display only one placeholder page.

1.5.1. Starting DATAGERRY

To start DATAGERRY you can use the following command.

./datagerry -s -d

Note

For development it is recommended to start the system in debug mode.

1.5.1.1. Generate clean database

To generate an empty database, start the CMDB with the --setup parameter. This starts a startup routine. During the startup, the database structure is created and a query to the admin user is started. In addition, the asymmetric key pair is generated and stored in the database`.

Note

Datagerry is terminated after successful setup, no matter which parameter is used to start it.

Warning

If an already existing database is specified in the configuration, this database will be deleted!

1.5.1.2. Insert test data (optional)

Optionally DATAGERRY can be filled with fictitious test data.

./datagerry --test

1.5.2. Starting angular frontend

This frontend was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.3.8.

1.5.2.1. Installation

Run npm install

1.5.2.2. Development server

Run ng serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

1.5.2.3. Build

Run ng build to build the project. The build artifacts will be stored in the dist/ directory. Use the –prod flag for a production build.