open-index/open-npm huggingface dataset:
npm package: @schitzophrenic/auth-lib
Description: This library provides a standardised approach to simple username + password authentication.
Latest version: 21.0.3

# AuthLib

This library provides a standardised approach to simple username + password authentication.

## Dependency

To use this service there needs to be an authorization backend with the following endpoints:

1. (POST) {baseURL}/login  ({username: string, password: string } -> Principal)
2. (GET) {baseURL}/logout  -> void
3. (GET) {baseURL}/currentUser -> Principal

The Principal Responses shall fulfill this interface:

```
interface Principal {
  username: string,   // Alias of the user
  fullName: string,   // Full name of the user
  email: string,      // Email Address of the user
  appName: string,    // Name of your application
  authorities: Roles  // List containing roles
}
```

Notice: As roles the following values are supported:
```ADMIN, USER, TECHNICAL```

## Usage

To use the authentication, just add the feature "withPrincipal()" to you ngrx signal store.

This will add a check if a user is logged in to the onInit of your app on open a login dialog if the user is not logged in.
This store also provides methods for handling login, logout and getting a current user.

### Example
```
export const AppStore = signalStore(
  {providedIn: "root"},
  withPrincipal(),
  ...
);
```

In some other component or service, you can now read the principal as follows:

```
@Injectable({...})
export class MyService {
  private store = inject(AppStore);
  private myUser = this.store.principal();
  
  ...
  
  public logOut(): void {
    this.store.logout();
  }
  
  // Use this only if you do not want to use the provided login mask.
  public logIn(username: string, password: string): Observable<boolean> {
    return this.store.login(username, password);
  }
}
```


## Configuration

There are three different configuration points for this library:

1. You may call withPrincipal(false), if you no not wish to use the provided login dialog.
2. You may use the provided authorizationInterceptor to configure your http client to forget the principal and try to open the login dialog if you use it.
3. You may provide custom AuthorizationConfig in your main.ts as shown in the example below, to change that base url of your login service, add a frontend link to an endpoint where users may change their password and a backdropCssClass for the backdrop of the login dialog.

```
provideAuthenticationConfig(baseUrl: string, resetPasswordLink: string | undefined = undefined, backdropCssClass: string | undefined = undefined)
```

## Deactivation of Routes

If you do not want to have your store to load the current user, we provide a canActivate function ``principalDeactivatedGuard`` that can be added to routes to prevent them from calling the currentUser endpoint.