-import { Injectable } from '@angular/core';
-import { Headers, Http, Response, URLSearchParams } from '@angular/http';
-import { Router } from '@angular/router';
-import { Observable } from 'rxjs/Observable';
-import { Subject } from 'rxjs/Subject';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/mergeMap';
-import 'rxjs/add/observable/throw';
-
-import { NotificationsService } from 'angular2-notifications';
-
-import { AuthStatus } from './auth-status.model';
-import { AuthUser } from './auth-user.model';
-// Do not use the barrel (dependency loop)
-import { RestExtractor } from '../../shared/rest';
+import { Observable, ReplaySubject, Subject, throwError as observableThrowError } from 'rxjs'
+import { catchError, map, mergeMap, tap } from 'rxjs/operators'
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { Router } from '@angular/router'
+import { NotificationsService } from 'angular2-notifications'
+import { OAuthClientLocal, User as UserServerModel, UserRefreshToken } from '../../../../../shared'
+import { User } from '../../../../../shared/models/users'
+import { UserLogin } from '../../../../../shared/models/users/user-login.model'
+import { environment } from '../../../environments/environment'
+import { RestExtractor } from '../../shared/rest'
+import { AuthStatus } from './auth-status.model'
+import { AuthUser } from './auth-user.model'
+import { objectToUrlEncoded } from '@app/shared/misc/utils'
+
+interface UserLoginWithUsername extends UserLogin {
+ access_token: string
+ refresh_token: string
+ token_type: string
+ username: string
+}
+
+type UserLoginWithUserInformation = UserLoginWithUsername & User