openvidu-server dashboard: port fixed to 443 removed

pull/457/head
pabloFuente 2020-04-28 17:39:48 +02:00
parent 0fce47082f
commit a144d27b7b
3 changed files with 75 additions and 78 deletions

View File

@ -15,6 +15,7 @@ import { OpenViduVideoComponent } from './components/layouts/ov-video.component'
import { SessionDetailsComponent } from './components/session-details/session-details.component'; import { SessionDetailsComponent } from './components/session-details/session-details.component';
import { InfoService } from './services/info.service'; import { InfoService } from './services/info.service';
import { RestService } from './services/rest.service'; import { RestService } from './services/rest.service';
import { HttpClientModule } from '@angular/common/http';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -31,6 +32,7 @@ import { RestService } from './services/rest.service';
imports: [ imports: [
BrowserModule, BrowserModule,
FormsModule, FormsModule,
HttpClientModule,
routing, routing,
AppMaterialModule, AppMaterialModule,
FlexLayoutModule FlexLayoutModule

View File

@ -103,20 +103,19 @@ export class DashboardComponent implements OnInit, OnDestroy {
dialogRef = this.dialog.open(CredentialsDialogComponent); dialogRef = this.dialog.open(CredentialsDialogComponent);
dialogRef.componentInstance.myReference = dialogRef; dialogRef.componentInstance.myReference = dialogRef;
dialogRef.afterClosed().subscribe(secret => { dialogRef.afterClosed().subscribe(async secret => {
if (secret) { if (secret) {
this.restService.getOpenViduToken(secret) try {
.then((token => { const token = await this.restService.getToken(secret);
this.connectToSession(token); this.connectToSession(token);
})) } catch (error) {
.catch(error => { if (error.status === 401) { // User unauthorized error. OpenVidu security is active
if (error === 401) { // User unauthorized error. OpenVidu security is active
this.testVideo(); this.testVideo();
} else { } else {
console.error(error); console.error(error.error);
this.msgChain.push('Error connecting to session: ' + error); this.msgChain.push('Error connecting to session: [' + error.status + '] ' + error.message);
}
} }
});
} }
}); });
} }

View File

@ -1,86 +1,82 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { HttpHeaders, HttpClient } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';
@Injectable() @Injectable()
export class RestService { export class RestService {
private openviduPublicUrl: string; private openviduPublicUrl: string;
constructor(private httpClient: HttpClient) { }
getOpenViduPublicUrl(): Promise<string> { getOpenViduPublicUrl(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!!this.openviduPublicUrl) { if (!!this.openviduPublicUrl) {
resolve(this.openviduPublicUrl); resolve(this.openviduPublicUrl);
} else { } else {
const url = location.protocol + '//' + location.hostname + ((!!location.port) ? (':' + location.port) : '') + this.httpClient.get(location.protocol + '//' + location.hostname + ((!!location.port) ? (':' + location.port) : '') +
'/config/openvidu-publicurl'; '/config/openvidu-publicurl', { responseType: 'text' }).pipe(
const http = new XMLHttpRequest(); catchError(error => {
reject(error);
http.onreadystatechange = () => { return throwError(error);
if (http.readyState === 4) { })
if (http.status === 200) { )
this.openviduPublicUrl = http.responseText; .subscribe(response => {
resolve(http.responseText); this.openviduPublicUrl = response;
} else { resolve(response);
reject('Error getting OpenVidu publicurl'); });
}
};
}
http.open('GET', url, true);
http.send();
} }
}); });
} }
getOpenViduToken(secret: string): Promise<string> { async getToken(secret: string): Promise<string> {
if (!this.openviduPublicUrl) { const sessionId: string = await this.createSession(secret);
this.getOpenViduPublicUrl().then(() => { return await this.createToken(sessionId, secret);
return this.getOpenViduToken(secret); }
});
} else { createSession(secret: String): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const url1 = 'https://OPENVIDUAPP:' + secret + '@' + this.openviduPublicUrl.split('://')[1] + 'api/sessions'; const body = JSON.stringify({});
const http1 = new XMLHttpRequest(); const options = {
const data1 = {}; headers: new HttpHeaders({
data1['mediaMode'] = 'ROUTED'; 'Authorization': 'Basic ' + btoa('OPENVIDUAPP:' + secret),
data1['recordingMode'] = 'MANUAL'; 'Content-Type': 'application/json'
data1['RECORDING_LAYOUT'] = 'BEST_FIT'; })
const json1 = JSON.stringify(data1);
http1.onreadystatechange = () => {
if (http1.status === 401) {
reject(401);
} else if (http1.readyState === 4) {
if (http1.status === 200) {
const sessionId = JSON.parse(http1.responseText).id;
const url2 = this.openviduPublicUrl + 'api/tokens';
const http2 = new XMLHttpRequest();
const data2 = {};
data2['session'] = sessionId;
const json2 = JSON.stringify(data2);
http2.onreadystatechange = () => {
if (http2.readyState === 4) {
if (http2.status === 200) {
resolve(JSON.parse(http2.responseText).id);
} else {
reject(http2.status);
}
}; };
} this.httpClient.post(this.openviduPublicUrl + 'api/sessions', body, options)
http2.open('POST', url2, true); .pipe(
http2.setRequestHeader('Content-type', 'application/json'); catchError(error => {
http2.setRequestHeader('Authorization', 'Basic ' + btoa('OPENVIDUAPP:' + secret)); reject(error);
http2.send(json2); return throwError(error);
} else { })
reject(http1.status); )
} .subscribe(response => {
}; resolve(response['id']);
} });
http1.open('POST', url1, true);
http1.setRequestHeader('Content-type', 'application/json');
http1.send(json1);
}); });
} }
createToken(session, secret): Promise<string> {
return new Promise((resolve, reject) => {
const body = JSON.stringify({ session });
const options = {
headers: new HttpHeaders({
'Authorization': 'Basic ' + btoa('OPENVIDUAPP:' + secret),
'Content-Type': 'application/json'
})
};
this.httpClient.post(this.openviduPublicUrl + 'api/tokens', body, options)
.pipe(
catchError(error => {
reject(error);
return throwError(error);
})
)
.subscribe(response => {
resolve(response['token']);
});
});
} }
} }