NAME

WWW::Suffit::API - The Suffit API

VERSION

API Version 1.01

DESCRIPTION

This library provides server API methods and describe it

MEDIA TYPES

The API currently supports only JSON as an exchange format. Be sure to set both the Content-Type and Accept headers for every request as application/json.

All Date objects are returned in ISO 8601 format: YYYY-MM-DDTHH:mm:ss.SSSZ or in unixtime format (epoch), eg.: 1682759233

CHARACTER SET

API supports a subset of the UTF-8 specification. Specifically, any character that can be encoded in three bytes or less is supported. BMP characters and supplementary characters that must be encoded using four bytes aren't supported at this time.

HTTP METHODS

Where possible, the we strives to use appropriate HTTP methods for each action.

GET

Used for retrieving objects

POST

Used for creating objects or performing custom actions (such as user lifecycle operations). For POST requests with no body param, set the Content-Length header to zero.

PUT

Used for replacing objects or collections. For PUT requests with no body param, set the Content-Length header to zero.

PATCH

Used for partially updating objects

DELETE

Used for deleting objects

IP ADDRESS

The public IP address of your application is automatically used as the client IP address for your request. The API supports the standard X-Forwarded-For HTTP header to forward the originating client's IP address if your application is behind a proxy server or acting as a sign-in portal or gateway.

Note: The public IP address of your trusted web application must be a part of the allowlist in your org's network security settings as a trusted proxy to forward the user agent's original IP address with the X-Forwarded-For HTTP header.

ERRORS

All successful requests return a 200 status if there is content to return or a 204 status if there is no content to return.

All requests that result in an error return the appropriate 4xx or 5xx error code with a custom JSON error object:

{
  "code": "E0001",
  "error": "API validation failed",
  "status": false
}

or

{
  "code": "E0001",
  "message": "API validation failed",
  "status": false
}
code

A code that is associated with this error type

error

A natural language explanation of the error

message

A natural language explanation of the error (=error)

status

Any errors always return the status false

List of codes see "ERROR CODES" in WWW::Suffit::API

AUTHENTICATION

Suffit APIs support two authentication options: session and tokens.

The Suffit API requires the custom HTTP authentication scheme Token or Bearer for API token authentication. Requests must have a valid API token specified in the HTTP Authorization header with the Token/Bearer scheme or HTTP X-Token header.

For example:

X-Token: 00QCjAl4MlV-WPXM...0HmjFx-vbGua
Authorization: Token 00QCjAl4MlV-WPXM...0HmjFx-vbGua
Authorization: Bearer 00QCjAl4MlV-WPXM...0HmjFx-vbGua

API METHODS

List of API methods

GET /api

Gets general API information

# curl -v https://localhost:8695/api

> GET /api HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< Content-Length: 1507
< Server: WWW::Suffit/1.00
< Date: Sat, 29 Apr 2023 09:42:46 GMT
<
{
  "algorithms": [ ... ],
  "base_url": "https://localhost:8695",
  "code": "E0000",
  "csrf": "cf1b5f99a1c8480fb38a0f1e575d901d31dc0c90",
  "entities": { ... },
  "files": {},
  "generated": 1682761547,
  "message": "Session not exists! Please sign in or provide the token",
  "methods": [ ... ],
  "operators": [ ... ],
  "providers": [ ... ],
  "public_key": " ... ",
  "remote_addr": "127.0.0.1",
  "requestid": "7113e2fe",
  "route": "api",
  "status": true,
  "token": "",
  "user": {},
  "version": "1.00",
  "year": "2023"
}

GET /api/check

Checks the ready state of API server

# curl -v -H "Authorization: Bearer eyJh...s5aM" \
  https://localhost:8695/api/check

> GET /api/check HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...s5aM
>
< HTTP/1.1 200 OK
< Server: WWW::Suffit/1.00
< Date: Sat, 29 Apr 2023 10:41:10 GMT
< Content-Length: 104
< Content-Type: application/json;charset=UTF-8
<
{
  "base_url": "https://localhost:8695",
  "time": 1682764944,
  "remote_addr": "127.0.0.1",
  "requestid": "3a8cbe4f",
  "status": true,
  "version": "1.00"
}

GET /api/file

Gets file list (manifest)

# curl -v -H "Authorization: Bearer eyJh...s5aM" \
  https://localhost:8695/api/file

> GET /api/file HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...s5aM
>
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< Content-Length: 1947
< Date: Sat, 29 Apr 2023 10:55:35 GMT
< Server: WWW::Suffit/1.00
<
{
  "documentroot": "/home/test/public",
  "manifest": [
    {
      "absf": "/test/README.md",
      "directory": "test",
      "filename": "README.md",
      "id": 9962792,
      "pid": 9962787,
      "mdate": 1666333440,
      "path": "test/README.md",
      "perms": 436,
      "size": 333,
      "type": "file"
    }
  ],
  "status": true
}

GET /api/file/FILEPATH

Download file from server

# curl -v -H "Authorization: Bearer eyJh...GBew" \
  https://localhost:8695/foo/bar/test.txt

> GET /foo/bar/test.txt HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...GBew
>
< HTTP/1.1 200 OK
< Content-Type: text/plain;charset=UTF-8
< Server: WWW::Suffit/1.00
< Last-Modified: Fri, 19 May 2023 09:22:10 GMT
< ETag: "df6c2ef1b599717f3f419da4b0ea0dbd"
< Content-Length: 1234
< Accept-Ranges: bytes
< Date: Fri, 19 May 2023 09:24:58 GMT
<
...content of the file...

PUT /api/file/FILEPATH

Upload file to server

# curl -v -H "Authorization: Bearer eyJh...GBew" \
  -X PUT -F size=1234 \
  -F md5=ef20b7ac555ab6e04b71c13018602f70 -F fileraw=@test.txt.tmp \
  https://localhost:8695/api/file/foo/bar/test.txt

> PUT /api/file/foo/bar/test.txt HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...GBew
> Content-Length: 1662
> Content-Type: multipart/form-data; boundary=------99d4d614cf7b933a
> Expect: 100-continue
>
< HTTP/1.1 200 OK
< Date: Fri, 19 May 2023 09:36:41 GMT
< Content-Length: 180
< Server: WWW::Suffit/1.00
< Content-Type: application/json;charset=UTF-8
<
{
  "code": "E0000",
  "file": "\/home\/foo\/tmp\/public\/foo\/bar\/test.txt",
  "md5":  "ef20b7ac555ab6e04b71c13018602f70",
  "size": "1234",
  "status": true,
  "uploaded": "2023-05-19T09:36:41Z"
}

DELETE /api/file/FILEPATH

Remove file from server

# curl -v -X DELETE -H "Authorization: Bearer eyJh...GBew" \
  https://localhost:8695/api/file/foo/bar/test.txt

> DELETE /api/file/foo/bar/test.txt HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...GBew
>
< HTTP/1.1 200 OK
< Server: WWW::Suffit/1.00
< Content-Type: application/json;charset=UTF-8
< Date: Fri, 19 May 2023 10:12:05 GMT
< Content-Length: 30
<
{
  "code": "E0000",
  "status": true
}

GET /api/status

Returns status information of the Suffit API server

# curl -v -H "Authorization: Bearer eyJh...s5aM" \
  https://localhost:8695/api/status

> GET /api/status HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...s5aM
>
< HTTP/1.1 200 OK
< Server: WWW::Suffit/1.00
< Date: Sat, 29 Apr 2023 10:49:14 GMT
< Content-Length: 394
< Content-Type: application/json;charset=UTF-8
<
{
  "base_url": "https://localhost:8695",
  "dsn": "*see monm config file*",
  "elapsed": 0.000275,
  "mbutiny_collectors": [],
  "mbutiny_error": "App::MBUtiny not installed",
  "mbutiny_loaded": 0,
  "mbutiny_status": "UNKNOWN",
  "monm_dsn": "dbi:SQLite:dbname=/var/lib/monm/monm.db",
  "monm_error": "Can't connect to database: unable to open database file",
  "monm_loaded": 1,
  "monm_status": "FAILED",
  "status": true,
  "time": 1682765546
}

POST /api/v1/authn

Authentication user

# curl -v -H "Authorization: Bearer eyJh...Ggns" \
  -X POST -d '{
    "username": "bob",
    "password": "123",
    "encrypted": false
  }' \
  https://localhost:8695/api/v1/authn

> POST /api/v1/authn HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...Ggns
> Content-Length: 90
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 401 Unauthorized
< Content-Type: application/json;charset=UTF-8
< Content-Length: 70
< Date: Tue, 16 May 2023 15:17:23 GMT
< Server: WWW::Suffit/1.00
<
{
  "code": "E1311",
  "message": "Wrong username or password",
  "status": false
}

# curl -v -H "Authorization: Bearer eyJh...Ggns" \
  -X POST -d '{
    "username": "bob",
    "password": "bob",
    "encrypted": false
  }' \
  https://localhost:8695/api/v1/authn

> POST /api/v1/authn HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...Ggns
> Content-Length: 90
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 200 OK
< Server: WWW::Suffit/1.00
< Date: Tue, 16 May 2023 15:18:54 GMT
< Content-Type: application/json;charset=UTF-8
< Content-Length: 30
<
{
  "code": "E0000",
  "status": true
}

POST /api/v1/authz

Authorization and check access grants

# curl -v -H "Authorization: Bearer eyJh...Ggns" \
  -X POST -d '{
    "username": "bob",
    "method": "HEAD",
    "url": "https://metacpan.org/release/SRI/Mojolicious-9.32/source/lib/Mojo/URL.pm",
    "headers": {
        "Accept": "text/html,text/plain",
        "Connection": "keep-alive",
        "Host": "localhost:8695"
    }
  }' \
  https://localhost:8695/api/v1/authz

> POST /api/v1/authz HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...Ggns
> Content-Length: 311
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 200 OK
< Date: Tue, 16 May 2023 16:54:55 GMT
< Content-Type: application/json;charset=UTF-8
< Server: WWW::Suffit/1.00
< Content-Length: 30
<
{
  "code": "E0000",
  "status": true
}

# curl -v -H "Authorization: Bearer eyJh...Ggns" \
  -X POST -d '{
    "username": "bob",
    "method": "GET",
    "url": "https://localhost:8695/api/check"
  }' \
  https://localhost:8695/api/v1/authz

> POST /api/v1/authz HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...Ggns
> Content-Length: 115
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 403 Forbidden
< Server: WWW::Suffit/1.00
< Content-Length: 79
< Content-Type: application/json;charset=UTF-8
< Date: Tue, 16 May 2023 17:33:23 GMT
<
{
  "code": "E1205",
  "message": "Access denied by realm restrictions",
  "status": false
}

# curl -v -H "Authorization: Bearer eyJh...Ggns" \
  -X POST -d '{
    "username": "bob",
    "method": "HEAD",
    "url": "https://metacpan.org/release/SRI/Mojolicious-9.32/source/lib/Mojo/URL.pm",
    "headers": {
        "Accept": "text/html,text/plain",
        "Connection": "keep-alive",
        "Host": "localhost:8695"
    },
    "verbose": true
  }' \
  https://localhost:8695/api/v1/authz

> POST /api/v1/authz HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...Ggns
> Content-Length: 336
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 200 OK
< Date: Tue, 16 May 2023 18:05:52 GMT
< Content-Type: application/json;charset=UTF-8
< Server: WWW::Suffit/1.00
< Content-Length: 198
<
{
  "code": "E0000",
  "email": "bob@example.com",
  "email_md5": "4b9bb80620f03eb3719e0a061c14283d",
  "expires": 1684260497,
  "groups": [],
  "name": "Bob Bob",
  "role": "Test user",
  "status": true,
  "uid": 13,
  "username": "bob"
}

GET /api/v1/publicKey

Get RSA public key of user (the token issuer)

# curl -v -H "Authorization: Bearer eyJh...Ggns" \
  https://localhost:8695/api/v1/publicKey

> GET /api/v1/publicKey HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: */*
> Authorization: Bearer eyJh...Ggns
>
< HTTP/1.1 200 OK
< Date: Fri, 01 Sep 2023 16:59:51 GMT
< Server: WWW::Suffit/1.03
< Content-Length: 303
< Content-Type: application/json;charset=UTF-8
<
{
  "code": "E0000",
  "public_key": "-----BEGIN RSA PUBLIC KEY----- ...",
  "status": true
}

POST /authorize

This method performs authentication and authorization on the Suffit API server, then returns the access token

# curl -v -X POST \
  -H "Accept: application/json" \
  -d '{
    "username": "test",
    "password": "test",
    "encrypted": false
  }' \
  https://localhost:8695/authorize

# curl -v -X POST \
  -H "Accept: application/json" \
  -F username=test -F password=test \
  https://localhost:8695/authorize

> POST /authorize HTTP/1.1
> Host: localhost:8695
> User-Agent: curl/7.68.0
> Accept: application/json
> Content-Length: 248
> Content-Type: multipart/form-data; boundary=-----6a21ca7cea8dc981
>
< HTTP/1.1 200 OK
< Date: Thu, 11 May 2023 14:30:34 GMT
< Content-Type: application/json;charset=UTF-8
< Content-Length: 635
< Server: WWW::Suffit/1.00
<
{
  "clientid": "f459f12619c961122450ae5883e44a60",
  "code": "E0000",
  "datetime": "2023-12-17T07:47:56Z",
  "elapsed": 0.313583,
  "encrypted": false,
  "expires": "2023-12-18T07:47:56Z",
  "jti": "kB...hO",
  "message": "The user is successfully authorized",
  "referer": "",
  "status": true,
  "token": "ey...1o",
  "type": "access",
  "user": {
    "algorithm": "SHA256",
    "attributes": "",
    "comment": "Test user for internal testing only",
    "created": 1678741533,
    "email": "test@localhost",
    "email_md5": "163e50783979333ebae6fd63b2d96d16",
    "expires": 1702799576,
    "flags": 31,
    "groups": [
      "user"
    ],
    "name": "Test User",
    "not_after": 0,
    "not_before": 1695334721,
    "public_key": "-----BEGIN RSA PUBLIC KEY-----...",
    "role": "Test user",
    "uid": 3,
    "username": "test"
  }
}

ERROR CODES

E0xxx -- General errors

E01xx, E02xx, E03xx, E04xx and E05xx are reserved as HTTP errors

E0000   Ok (general)
E0100   Continue
E0200   OK (HTTP)
E0300   Multiple Choices
E0400   Bad Request
E0500   Internal Server Error
E1xxx -- API errors

Auth: E10xx

E1000   [Auth::is_authorized_api] Access denied. No token/session exists
E1001   [Auth::is_authorized_api] Access denied. JWT error
E1002   [Auth::is_authorized_api] Access denied. The token has been revoked
E1003   [Auth::is_authorized_api] Access denied. Session is not authorized
E1004   [Auth::is_authorized_api] Access denied by realm restrictions
E1005   [Auth::is_authorized_api] The database is not initialized
E1010   [Auth::_authen]         No username specified
E1011   [Auth::_authen]         No password specified
E1012   [Auth::_authen]         Wrong username or password
E1020   [Auth::_authz]          No username
E1021   [Auth::_authz]          Access denied (authz)
E1022   [Auth::_authz]          Access denied (access)
E1030   [Login::logged_in]      User is not authenticated
E1031   [Login::logged_in]      Access denied
E1032   [Login::logged_in]      The database is not initialized
E1040   [Login::login]          Access denied
E1041   [Login::login]          Can't JWT generate
E1042   [Login::login]          Wrong username or password, please try again
E1043   [Login::login]          Can't token store to database
E1050   [Login::token]          Token for user is frozen
E1060   [Auth::authorize]       Incorrect username or password
E1061   [Auth::authorize]       Access denied
E1062   [Auth::authorize]       Can't JWT generate
E1063   [Auth::authorize]       Can't token store to database
E1064   [Auth::authorize]       RSA decode error

API: E11xx

E1100   [API::api]              The stored token not found. Please logout and login again
E1110   [API::file_*]           No file path specified
E1111   [API::file_*]           Incorrect file path
E1112   [API::file_*]           File not found
E1113   [API::file_*]           Can't upload file
E1114   [API::file_*]           Can't upload file: file is lost
E1115   [API::file_*]           File size mismatch
E1116   [API::file_*]           File md5 checksum mismatch

API::V1: E12xx

E1200   [V1::authn]             No RSA public key found
E1201   [V1::authn]             No RSA private key found
E1202   [V1::authn]             RSA decrypt error
E1203   [V1::authn]             Incorrect username or password
E1204   [V1::authn]             Access denied (authz)
E1205   [V1::authn]             Access denied by realm restrictions (access)

AuthDB: E13xx

E1300   [AuthDB::load]          Can't load file. File not found
E1301   [AuthDB::load]          Can't load data from file
E1302   [AuthDB::load]          File did not return a JSON object
E1303   [AuthDB::save]          Can't serialize data to JSON
E1304   [AuthDB::save]          Can't save data to file
E1305   [AuthDB::authen]        No username specified
E1306   [AuthDB::authen]        The username is too long (1-256 chars required)
E1307   [AuthDB::authen]        No password specified
E1308   [AuthDB::authen]        The password is too long (1-256 chars required)
E1309   [AuthDB::authen]        Account is hold on 5 min
E1310   [AuthDB::authen]        Incorrect digest algorithm
E1311   [AuthDB::authen]        Wrong username or password
E1312   [AuthDB::authz]         No username specified
E1313   [AuthDB::authz]         The username is too long (1-256 chars required)
E1314   [AuthDB::authz]         User is disabled
E1315   [AuthDB::user_set]      Incorrect digest algorithm
E1316   [AuthDB::user_set]      User already exists
E1317   [AuthDB::user_passwd]   No user found
E1318   [AuthDB::user_passwd]   Incorrect digest algorithm
E1319   [AuthDB::user_passwd]   No password specified
E1320   [AuthDB::user_edit]     No user found
E1321   [AuthDB::user_genkeys]  No user found
E1322   [AuthDB::group_set]     Group already exists
E1323   [AuthDB::realm_set]     Realm already exists
E1324   [AuthDB::route_set]     Route already exists
E1325   [AuthDB::meta]          No key specified
E1330   [User::is_valid]        User not found
E1331   [User::is_valid]        Incorrect username stored
E1332   [User::is_valid]        Incorrect password stored
E1333   [User::is_valid]        The user data is expired
E1334   [Group::is_valid]       The user data is expired
E1335   [Group::is_valid]       Incorrect groupname stored
E1336   [Group::is_valid]       The group data is expired
E1337   [Realm::is_valid]       Incorrect realmname
E1338   [Realm::is_valid]       The realm data is expired
E1339   [AuthDB::authz]         External requests is blocked
E1340   [AuthDB::authz]         Internal requests is blocked

API::Profile: E14xx

E1400   [Profile::token_get]    Incorrect username
E1401   [Profile::token_set]    Incorrect username
E1402   [Profile::token_set]    Can't JWT generate
E1403   [Profile::token_set]    Can't set token
E1404   [Profile::token_set]    Can't get token
E1405   [Profile::token_del]    Incorrect jti
E1406   [Profile::token_del]    Incorrect username
E1407   [Profile::token_del]    Can't delete token
E1408   [Profile::genkeys]      Incorrect username
E1409   [Profile::genkeys]      Can't generate RSA keys
E1410   [Profile::genkeys]      Can't set RSA keys
E1411   [Profile::passwd]       Incorrect username
E1412   [Profile::passwd]       Incorrect current password
E1413   [Profile::passwd]       Incorrect new password
E1414   [Profile::passwd]       Incorrect current password
E1415   [Profile::passwd]       Can't set password
E1416   [Profile::user_set]     Incorrect username
E1417   [Profile::user_set]     Can't set user (edit)

API::Admin: E15xx

E1500   [Admin::user_del]       Incorrect username
E1501   [Admin::user_del]       Can't get user data
E1502   [Admin::user_del]       User not found
E1503   [Admin::user_del]       Can't user delete
E1504   [Admin::user_get]       Incorrect username
E1505   [Admin::user_get]       Can't get user data
E1506   [Admin::user_get]       No user found
E1507   [Admin::user_get]       Can't get user list
E1508   [Admin::user_set]       Incorrect username
E1509   [Admin::user_set]       Incorrect email
E1510   [Admin::user_set]       Incorrect full name
E1511   [Admin::user_set]       Incorrect password
E1512   [Admin::user_set]       Incorrect algorithm
E1513   [Admin::user_set]       Incorrect role
E1514   [Admin::user_set]       Incorrect flags
E1515   [Admin::user_set]       Can't generate RSA keys
E1516   [Admin::user_set]       Can't set user data
E1517   [Admin::user_set]       Can't get user data
E1518   [Admin::user_set]       Can't get data from AuthDB by username
E1519   [Admin::user_groups]    Incorrect username
E1520   [Admin::user_groups]    Can't get groups list
E1521   [Admin::user_passwd]    Incorrect username
E1522   [Admin::user_passwd]    Incorrect password
E1523   [Admin::user_passwd]    Can't set password
E1524   [Admin::user_search]    Incorrect search text
E1525   [Admin::user_search]    Can't find users
E1526   [Admin::group_enroll]   Incorrect groupname
E1527   [Admin::group_enroll]   Incorrect username
E1528   [Admin::group_enroll]   Can't group enroll
E1529   [Admin::group_del]      Incorrect groupname
E1530   [Admin::group_del]      Can't get group data
E1531   [Admin::group_del]      Group not found
E1532   [Admin::group_del]      Can't group delete
E1533   [Admin::group_get]      Incorrect groupname
E1534   [Admin::group_get]      Can't get group data
E1535   [Admin::group_get]      Group not found
E1536   [Admin::group_get]      Can't get group list
E1537   [Admin::group_set]      Incorrect groupname
E1538   [Admin::group_set]      Can't set group data
E1539   [Admin::group_set]      Can't get group data
E1540   [Admin::group_set]      Can't get data from AuthDB by groupname
E1541   [Admin::group_members]  Incorrect groupname
E1542   [Admin::group_members]  Can't get group members
E1543   [Admin::realm_del]      Incorrect realmname
E1544   [Admin::realm_del]      Can't get realm data
E1545   [Admin::realm_del]      Realm not found
E1546   [Admin::realm_del]      Can't realm delete
E1547   [Admin::realm_get]      Incorrect realmname
E1548   [Admin::realm_get]      Can't get realm data
E1549   [Admin::realm_get]      No realm found
E1550   [Admin::realm_get]      Can't get realm list
E1551   [Admin::realm_set]      Incorrect realmname
E1552   [Admin::realm_set]      Incorrect type of requirements list. Array expected
E1553   [Admin::realm_set]      Incorrect type of routes list. Array expected
E1554   [Admin::realm_set]      Can't set realm data
E1555   [Admin::realm_set]      Can't get realm data
E1556   [Admin::realm_set]      Can't get data from AuthDB by realmname
E1557   [Admin::requirement_get] Incorrect realmname
E1558   [Admin::requirement_get] Can't get requirements
E1559   [Admin::route_get]      Incorrect routename
E1560   [Admin::route_get]      Can't get route data
E1561   [Admin::route_get]      No route found
E1562   [Admin::route_get]      Can't get route list
E1563   [Admin::route_set]      Incorrect routename
E1564   [Admin::route_set]      Incorrect URL
E1565   [Admin::route_set]      Incorrect realmname
E1566   [Admin::route_set]      Can't set route data
E1567   [Admin::route_set]      Can't get route data
E1568   [Admin::route_set]      Can't get data from AuthDB by routename
E1569   [Admin::route_search]   Incorrect search text
E1570   [Admin::route_search]   No routee found
E1571   [Admin::route_sysadd]   Can't route set
E1572   [Admin::route_del]      Incorrect routename
E1573   [Admin::route_del]      Can't get route data
E1574   [Admin::route_del]      Route not found
E1575   [Admin::route_del]      Can't route delete
E1576   [Admin::settings]       Incorrect input parameter
E1577   [Admin::settings]       Can't save settings parameter
E2xxx -- Database errors
E2000   [Model::new]            The database is not initialized
E2001   [Model::init]           Can't connect to database
E2002   [Model::init]           Can't init database. Ping failed
E2003   [Model::reconnect]      Can't reconnect to database
E2004   [Model::reconnect]      Can't reinit database. Ping failed
E2010   [Model::user_add]       Can't insert new record (DML_USER_ADD)
E2011   [Model::user_get]       No username specified
E2012   [Model::user_get]       Can't get record (DML_USER_GET)
E2013   [Model::user_set]       No username specified
E2014   [Model::user_set]       Can't update record (DML_USER_SET)
E2015   [Model::user_passwd]    No username specified
E2016   [Model::user_passwd]    Can't update record (DML_PASSWD)
E2017   [Model::user_del]       No username specified
E2018   [Model::user_del]       Can't delete record (DML_USER_DEL)
E2019   [Model::user_getall]    Can't get records (DML_USER_GETALL)
E2020   [Model::user_search]    Can't get records (DML_USER_SEARCH)
E2021   [Model::user_groups]    No username specified
E2022   [Model::user_groups]    Can't get records (DML_USER_GROUPS)
E2023   [Model::user_edit]      No id of user specified
E2024   [Model::user_edit]      Can't update record (DML_USER_EDIT)
E2025   [Model::user_setkeys]   No id of user specified
E2026   [Model::user_setkeys]   Can't update record (DML_USER_SETKEYS)
E2027   [Model::user_tokens]    No username specified
E2028   [Model::user_tokens]    Can't get records (DML_TOKEN_GET_BY_USERNAME)
E2030   [Model::group_add]      Can't insert new record (DML_GROUP_ADD)
E2031   [Model::group_get]      No groupname specified
E2032   [Model::group_get]      Can't get record (DML_GROUP_GET)
E2033   [Model::group_set]      No groupname specified
E2034   [Model::group_set]      Can't update record (DML_GROUP_SET)
E2035   [Model::group_del]      No groupname specified
E2036   [Model::group_del]      Can't delete record (DML_GROUP_DEL)
E2037   [Model::group_getall]   Can't get records (DML_GROUP_GETALL)
E2038   [Model::group_members]  No groupname specified
E2039   [Model::group_members]  Can't get records (DML_GROUP_MEMBERS)
E2040   [Model::realm_add]      Can't insert new record (DML_REALM_ADD)
E2041   [Model::realm_get]      No realmname specified
E2042   [Model::realm_get]      Can't get record (DML_REALM_GET)
E2043   [Model::realm_set]      No realmname specified
E2044   [Model::realm_set]      Can't update record (DML_REALM_SET)
E2045   [Model::realm_del]      No realmname specified
E2046   [Model::realm_del]      Can't delete record (DML_REALM_DEL)
E2047   [Model::realm_getall]   Can't get records (DML_REALM_GETALL)
E2048   [Model::realm_requirements] No realmname specified
E2049   [Model::realm_requirements] Can't get record(s) (DML_REQUIREMENT_GET_BY_REALM)
E2050   [Model::realm_requirement_del] No realmname specified
E2051   [Model::realm_requirement_del] Can't delete record (DML_REQUIREMENT_DEL_BY_REALM)
E2052   [Model::requirement_add] Can't insert new record (DML_REQUIREMENT_ADD)
E2053   [Model::realm_routes]   No realmname specified
E2054   [Model::realm_routes]   Can't get record(s) (DML_ROUTE_GET_BY_REALM)
E2060   [Model::route_add]      Can't insert new record (DML_ROUTE_ADD)
E2061   [Model::route_get]      No routename specified
E2062   [Model::route_get]      Can't get record(s) (DML_ROUTE_GET_BY_ROUTE)
E2063   [Model::route_set]      No id specified
E2064   [Model::route_set]      Can't update record (DML_ROUTE_SET)
E2065   [Model::route_del]      No routename specified
E2066   [Model::route_del]      Can't delete record (DML_ROUTE_DEL_BY_ROUTE)
E2067   [Model::route_getall]   Can't get records (DML_ROUTE_GET*)
E2068   [Model::route_search]   Can't get records (DML_ROUTE_SEARCH)
E2069   [Model::route_release]  No realmname specified
E2070   [Model::route_release]  Can't update record (DML_ROUTE_RELEASE_BY_REALM)
E2071   [Model::route_assign]   No realmname specified
E2072   [Model::route_assign]   No routename specified
E2073   [Model::route_assign]   Can't update record (DML_ROUTE_ASSIGN_BY_ROUTE)
E2080   [Model::grpusr_add]     Can't insert new record (DML_GRPUSR_ADD)
E2081   [Model::grpusr_get]     No any conditions specified
E2082   [Model::grpusr_get]     Can't get record(s) (DML_GRPUSR_GET_BY_*)
E2083   [Model::grpusr_del]     No any conditions specified
E2084   [Model::grpusr_del]     Can't delete record (DML_GRPUSR_DEL_BY_*)
E2090   [Model::meta_set]       No key specified
E2091   [Model::meta_set]       Can't insert or update record (DML_META_*)
E2092   [Model::meta_get]       Can't get record (DML_META_GET)
E2093   [Model::meta_get]       Can't get table (DML_META_GETALL)
E2094   [Model::meta_del]       No key specified
E2095   [Model::meta_del]       Can't delete record (DML_META_DEL)
E2100   [Model::token_get]      No token's id specified
E2101   [Model::token_get]      Can't get record (DML_TOKEN_GET)
E2102   [Model::token_get_cond] No any conditions specified
E2103   [Model::token_get_cond] Can't get record (DML_TOKEN_GET_BY_USERNAME_AND_*)
E2104   [Model::token_getall]   Can't get records (DML_TOKEN_GET_*)
E2105   [Model::token_add]      Can't insert new record (DML_TOKEN_ADD)
E2106   [Model::token_set]      No token's id specified
E2107   [Model::token_set]      Can't update record (DML_TOKEN_SET)
E2108   [Model::token_del]      Can't delete expired tokens (DML_TOKEN_DEL_EXPIRED)
E2109   [Model::token_del]      Can't delete record (DML_TOKEN_DEL)
E2110   [Model::stat_get]       No address specified
E2111   [Model::stat_get]       No username specified
E2112   [Model::stat_get]       Can't get record (DML_STAT_GET)
E2113   [Model::stat_set]       No address specified
E2114   [Model::stat_set]       No username specified
E2115   [Model::stat_set]       Can't insert or update record (DML_STAT_*)
E7xxx -- Application errors

Auth: E70xx

Errors that reserved for user applications

AUTHOR

Serż Minus (Sergey Lepenkov) https://www.serzik.com <abalama@cpan.org>

COPYRIGHT

Copyright (C) 1998-2023 D&D Corporation. All Rights Reserved

LICENSE

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See LICENSE file and https://dev.perl.org/licenses/