# Haventec Authenticate JS

Haventec Authenticate Javascript SDK

Enables JavaScript interfacing to the Haventec Authenticate platform. 
Includes registration/logging in facilities to log in to a specific Haventec Application; 
Configuration of device, user, groups, roles, and general configuration for that application

Most of the functions return a standard Promise with specific JSON-format data.

Authentication functions:
```
    register(username: string, pin: string, applicationUUID: string, token: string): Promise<{}>;
    login(username: string, pin: string): Promise<{}>;
    forgotpin(username: string, pin: string): Promise<{}>;
    reprovision(username: string, pin: string, requestId: string, token: string): Promise<{}>;
    tenantCreate(tenantName: string, username: string, email: string, pin: string): Promise<{}>;
    sessionValid(): boolean;
```

User functions:
```
    listUsers(page: number, size: number): Promise<{}>;
    getUser(username: string): Promise<{}>;
    changeUserLockStatus(username: string): Promise<{}>;
    deleteUser(username: string): Promise<{}>;
    preprovision(username: string, deviceName: string, groupName: string): Promise<{}>;
```

Group/Role functions:
```
    getUserGroups(username: string): Promise<{}>;
    updateUserGroups(username: string, groupNames: Array<string>): Promise<{}>;
    listGroups(page: number, size: number): Promise<{}>;
    getGroup(name: string): Promise<{}>;
    updateGroup(name: string, description: string): Promise<{}>;
    deleteGroup(name: string): Promise<{}>;
    getGroupRoles(name: string): Promise<{}>;
    updateGroupRoles(name: string, roleNames: Array<string>): Promise<{}>;
    listRoles(page: number, size: number): Promise<{}>;
    getRole(name: string): Promise<{}>;
    updateRole(name: string, description: string): Promise<{}>;
    deleteRole(name: string): Promise<{}>;
```

Device functions:
```
    listDevices(page: number, size: number): Promise<{}>;
    getDevice(udid: string): Promise<{}>;
    updateDevice(udid: string, deviceName: string, failedAttempts: number): Promise<{}>;
    changeDeviceLockStatus(udid: string): Promise<{}>;
    deleteDevice(udid: string): Promise<{}>;
```
    
Application functions:
```
    listApplications(page: number, size: number): Promise<{}>;
    getApplication(name: string): Promise<{}>;
    updateApplication(name: string, description: string, uuid: string, apiKey: string): Promise<{}>;
```

System configuration functions:
```
    listCategories(): Promise<{}>;
    getPropertiesForCategory(categoryname: string): Promise<{}>;
    updatePropertyForCategory(categoryname: string, propertyname: string, propertyvalue: string): Promise<{}>;
    deletePropertyForCategory(categoryname: string, propertyname: string): Promise<{}>;
    deleteCategory(name: string): Promise<{}>;
```
Invoke the above methods on an instance of the HaventecAuthenticate object


## Installation

```shell
npm install haventec/authenticate-js
```

JavaScript:
```
var HaventecAuthenticate = require('@haventec/authenticate-js');

var haventecAuthenticate = new HaventecAuthenticate('http://haventec-authenticate-domain.com');

haventecAuthenticate.getUser('myusername').then(function(response) {
  var user = response.users.content[0];
}).catch(function(error) {
  handleError(error);
});
```
TypeScript:
```
import {HaventecAuthenticate} from "@haventec/authenticate-js/ts";
```
## Contributors

 - John Kelaita
 - Justin Crosbie

## Development

### Getting Started

#### Prerequisites

Install the Git hooks

```
./scripts/git/install-git-hooks.sh
```


## License

This code is available under the MIT license. A copy of the license can be found in the LICENSE file included with the distribution.
