# Login

## Function

This API is used for login functionality. The client uses digest authentication to login; when the login is successful, in the http header, two fields are returned, Set-cookie and X-csrftoken;such as:

    Set-Cookie: session=54f47bdcec65156e41b51d945bdcb4b6a9c77fae237b1c40d74c08db4a5eeb8f;HttpOnly;path=/
    X-csrftoken: 93e2a23d518767b646ffd9a58b24b48665923ed797dbbb6b1e9760ebb9335b14

After the client login, when accessing static files, you need to bring cookie in the http header;such as:

       Cookie: session=54f47bdcec65156e41b51d945bdcb4b6a9c77fae237b1c40d74c08db4a5eeb8f；

When accessing the API, you also need to include the X-csrftoken field in the http header;such as:

       X-csrftoken: 93e2a23d518767b646ffd9a58b24b48665923ed797dbbb6b1e9760ebb9335b14.

After successful login, the server maintains the session response, which is 5 minutes by default and can be configured. When the client accesses the server with a session, the server refreshes the session expiration time. The digest authentication algorithm currently uses rfc2617, and will be modified to rfc7616 in the future, and is compatible with rfc2617 See Table 2 for the return of successful login (NVR, DVR, IPC are not implemented temporarily)

## Request Message

### Parameter Description

##### Table 1

Parameter | Range | Type | Description
--- | --- | --- | ---
oem_type |  | int | Login isolation flag, corresponding to the value passed by the customer:114(B09)、144(B14)、148(B25)、298(B07)、221(B07)、309(B52-1)、310(B52)、313(B52-1\B52)

Sample:

    POST /API/Web/Login HTTP/1.1

    {
        "version": "1.0",
        "data": {
            "oem_type": 114
        }
    }

## Response Message

### Parameter Description (NVR, DVR, IPC are not implemented temporarily)

##### Table 2(login success)

Parameter | Range | Type | Description
--- | --- | --- | ---
last_login_time | Max_length:64 | string | Last successful login time (time stamp).
last_login_ip | Max_length: 64 | string | IP address of the last successful login.
fail_login_count |  | int | The number of failed logins since the last successful login.
pwd_remain_time |  | int | The number of days remaining on the password (IPC defaults to 90 days).

##### Table 3(login failed)

Parameter | Range | Type | Description
--- | --- | --- | ---
block_remain_time |  | int | Indicates the time when there are too many login errors and the system will be locked.

Please refer to error-code for login failure error code.

> Tips:

> The response message of the Range request may not contain all the fields in the above table, and the fields not included indicate that the device does not support this parameter configuration.

Sample:

    HTTP/1.1 200 OK
    Content-Type: application/json

    {
        "result": "success",
        "data": {
        }
    }

## Error Code

##### Table 4

error_code | COMMENT
--- | ---
no_permission | No remote login permission
login_failed_or_block | locked after five or more failed logins
black_ip | This IP is set as blacklist
verify_failed | Wrong username or password within five times - login failed
device_reboot | The system is rebooting

See Response Messages Body and Common error_code for more information.