diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index ab572b8..c50c4e7 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -15,6 +15,7 @@ import { StorageProvider } from '../providers/storage/storage';
import { AddItemPage } from '../pages/add-item/add-item';
import { SensorDetailPage } from '../pages/sensor-detail/sensor-detail';
import { MySenseBoxPage } from '../pages/my-sense-box/my-sense-box';
+import { LoginProvider } from '../providers/LoginProvider/LoginProvider';
// For AoT compilation (production builds) we need to have a factory for the loader of translation files.
// @TODO: we possibly could optimize this by using a static loader in combination with webpack:
@@ -58,6 +59,7 @@ export function createTranslateLoader(http: HttpClient) {
{provide: ErrorHandler, useClass: IonicErrorHandler},
LoggingProvider,
StorageProvider,
+ LoginProvider
]
})
export class AppModule {}
diff --git a/src/pages/login/login.html b/src/pages/login/login.html
index 0271575..e9c8ade 100644
--- a/src/pages/login/login.html
+++ b/src/pages/login/login.html
@@ -14,33 +14,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/login/login.ts b/src/pages/login/login.ts
index c5ace4a..a89e124 100644
--- a/src/pages/login/login.ts
+++ b/src/pages/login/login.ts
@@ -1,6 +1,7 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import {MySenseBoxPage} from "../my-sense-box/my-sense-box"
+import { LoginProvider } from "../../providers/LoginProvider/LoginProvider"
/**
* Generated class for the LoginPage page.
*
@@ -13,17 +14,28 @@ import {MySenseBoxPage} from "../my-sense-box/my-sense-box"
selector: 'page-login',
templateUrl: 'login.html',
})
-export class LoginPage {
+export class LoginPage {
userName: string;
password: string;
+ private token:string
+ private user:ArrayBuffer=undefined;
public loading=false;
- constructor(public navCtrl: NavController, public navParams: NavParams) {
+ constructor(
+ public navCtrl: NavController,
+ public navParams: NavParams,
+ private loginProvider: LoginProvider
+ ) {
}
- submitLogin(){
- this.loading = true;
- // make api call to login with the credentials
- this.navCtrl.push(MySenseBoxPage)
+ private async submitLogin(form){
+ try {
+ this.token = await this.loginProvider.login("e_thie10@uni-muenster.de","Qxpxtexb1")
+ this.user = await this.loginProvider.getUser(this.token);
+ }
+ catch(err){
+ console.log(err.message)
+ }
+ this.navCtrl.push(MySenseBoxPage,this.user);
}
ionViewDidLoad() {
diff --git a/src/pages/my-sense-box/my-sense-box.ts b/src/pages/my-sense-box/my-sense-box.ts
index 4e9516d..0157a7f 100644
--- a/src/pages/my-sense-box/my-sense-box.ts
+++ b/src/pages/my-sense-box/my-sense-box.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
-
+import {LoginProvider} from "../../providers/LoginProvider/LoginProvider";
/**
* Generated class for the MySenseBoxPage page.
*
@@ -14,12 +14,16 @@ import { IonicPage, NavController, NavParams } from 'ionic-angular';
templateUrl: 'my-sense-box.html',
})
export class MySenseBoxPage {
-
- constructor(public navCtrl: NavController, public navParams: NavParams) {
+ token:string;
+ private user: ArrayBuffer=undefined;
+ constructor(public navCtrl: NavController,
+ public navParams: NavParams,
+ private loginProvider: LoginProvider
+ ) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad MySenseBoxPage');
- }
+ console.log(this.navParams) }
}
diff --git a/src/providers/LoginProvider/LoginProvider.ts b/src/providers/LoginProvider/LoginProvider.ts
new file mode 100644
index 0000000..881ef62
--- /dev/null
+++ b/src/providers/LoginProvider/LoginProvider.ts
@@ -0,0 +1,57 @@
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { timeout } from 'rxjs/operators'
+const URL_login = 'https://api.opensensemap.org/users/sign-in';
+const URL_user = 'https://api.opensensemap.org/users/me/boxes';
+
+// const URL = "http://compiler.snsbx.nroo.de"
+
+@Injectable()
+export class LoginProvider {
+
+ constructor(public http: HttpClient) { }
+
+ async login(username:string,password:string): Promise {
+ const headers = new HttpHeaders({'Content-Type': 'application/json'} );
+ // send compilation request, returning a job ID
+ return this.http.post(`${URL_login}?email=`+username+`&password=`+password, { headers })
+ .pipe(timeout(30000))
+ .toPromise()
+ .catch(err => {
+ let msg = err.message
+ if (err.name === 'TimeoutError')
+ msg = 'unable to contact api. are you online?'
+
+ try {
+ // attempt to extract the compilation error message and clean it up
+ console.error(err)
+ msg = JSON.parse(err.error.message)
+ if (msg.process) {
+ msg = `compilation error: ${msg.process.substr(msg.process.indexOf(' '))}`
+ msg = msg.substr(0, msg.indexOf('^'))
+ }
+ } catch (err2) {
+ console.error(err2)
+ }
+ throw Error(msg)
+ })
+ // download the resulting sketch binary
+ .then((response: any) => {
+ return response.token;
+ });
+ };
+
+ async getUser(token:string):Promise{
+ const headers = new HttpHeaders({'Authorization':"Bearer "+token})
+ return this.http.get(URL_user,{headers})
+ .pipe(timeout(30000))
+ .toPromise()
+ .catch(err=>{
+ let msg = err.message;
+ console.log(msg);
+ })
+ .then((response:any)=>{
+ return response;
+ })
+ }
+}