Merge pull request 'feat/superset' (#76) from feat/superset into development
continuous-integration/drone/tag Build is passing
Details
continuous-integration/drone/tag Build is passing
Details
Reviewed-on: #76feat/superset 20.1.49-alpha.1
commit
7e7d40ea1a
|
@ -39,4 +39,8 @@ EXPORT_LIMIT_PARTITION=200
|
|||
ASSETS="https://asset.sky.eigen.co.id/"
|
||||
|
||||
GOOGLE_CALENDAR_KEY="AIzaSyCSg4P3uC9Z7kD1P4f3rf1BbBaz4Q-M55o"
|
||||
GOOGLE_CALENDAR_ID="326464ac296874c7121825f5ef2e2799baa90b51da240f0045aae22beec10bd5@group.calendar.google.com"
|
||||
GOOGLE_CALENDAR_ID="326464ac296874c7121825f5ef2e2799baa90b51da240f0045aae22beec10bd5@group.calendar.google.com"
|
||||
|
||||
SUPERSET_URL=https://dashboard.weplayground.eigen.co.id
|
||||
SUPERSET_ADMIN_USERNAME=admin
|
||||
SUPERSET_ADMIN_PASSWORD=admin
|
|
@ -36,4 +36,8 @@ EXPORT_LIMIT_PARTITION=200
|
|||
ASSETS="https://asset.sky.eigen.co.id/"
|
||||
|
||||
GOOGLE_CALENDAR_KEY="AIzaSyCSg4P3uC9Z7kD1P4f3rf1BbBaz4Q-M55o"
|
||||
GOOGLE_CALENDAR_ID="326464ac296874c7121825f5ef2e2799baa90b51da240f0045aae22beec10bd5@group.calendar.google.com"
|
||||
GOOGLE_CALENDAR_ID="326464ac296874c7121825f5ef2e2799baa90b51da240f0045aae22beec10bd5@group.calendar.google.com"
|
||||
|
||||
SUPERSET_URL=https://dashboard.weplayground.eigen.co.id
|
||||
SUPERSET_ADMIN_USERNAME=admin
|
||||
SUPERSET_ADMIN_PASSWORD=admin
|
|
@ -1,14 +1,16 @@
|
|||
import { Controller, Get, Param } from '@nestjs/common';
|
||||
import { ApiTags } from '@nestjs/swagger';
|
||||
import { Public } from 'src/core/guards';
|
||||
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
||||
import { ExcludePrivilege, Public } from 'src/core/guards';
|
||||
import { SupersetService } from './superset.service';
|
||||
|
||||
@ApiTags(`Superset`)
|
||||
@Controller(`v1/superset`)
|
||||
@Public(false)
|
||||
@ApiBearerAuth('JWT')
|
||||
export class SupersetController {
|
||||
constructor(private service: SupersetService) {}
|
||||
@Get('token/:id')
|
||||
@Public(true)
|
||||
@ExcludePrivilege()
|
||||
async getGuestToken(@Param('id') id: string) {
|
||||
return this.service.getGuestToken(id);
|
||||
}
|
||||
|
|
|
@ -1,20 +1,30 @@
|
|||
import { HttpService } from '@nestjs/axios';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
|
||||
@Injectable()
|
||||
export class SupersetService {
|
||||
private SUPERSET_URL = 'https://dashboard.weplayground.eigen.co.id';
|
||||
private readonly logger = new Logger(SupersetService.name);
|
||||
private supersetURL = process.env.SUPERSET_URL + '/api';
|
||||
private adminUsername = process.env.SUPERSET_ADMIN_USERNAME;
|
||||
private adminPassword = process.env.SUPERSET_ADMIN_PASSWORD;
|
||||
|
||||
constructor(private readonly httpService: HttpService) {}
|
||||
|
||||
async getLoginToken() {
|
||||
const data = {
|
||||
username: 'admin',
|
||||
password: 'admin',
|
||||
username: this.adminUsername,
|
||||
password: this.adminPassword,
|
||||
provider: 'db',
|
||||
refresh: true,
|
||||
};
|
||||
|
||||
const response = await firstValueFrom(
|
||||
this.httpService.post(`${this.SUPERSET_URL}/api/v1/security/login`, data),
|
||||
this.httpService.request({
|
||||
method: 'POST',
|
||||
url: `${this.supersetURL}/v1/security/login`,
|
||||
data: data,
|
||||
}),
|
||||
);
|
||||
|
||||
return response.data.access_token;
|
||||
|
@ -22,9 +32,10 @@ export class SupersetService {
|
|||
|
||||
async getCSRFToken() {
|
||||
const loginToken = await this.getLoginToken();
|
||||
|
||||
const response = await firstValueFrom(
|
||||
this.httpService.get(`${this.SUPERSET_URL}/api/v1/security/csrf_token/`, {
|
||||
this.httpService.request({
|
||||
method: 'GET',
|
||||
url: `${this.supersetURL}/v1/security/csrf_token/`,
|
||||
headers: { Authorization: `Bearer ${loginToken}` },
|
||||
}),
|
||||
);
|
||||
|
@ -34,6 +45,7 @@ export class SupersetService {
|
|||
|
||||
async getGuestToken(uuid: string) {
|
||||
const { loginToken, csrfToken } = await this.getCSRFToken();
|
||||
|
||||
const data = {
|
||||
resources: [{ type: 'dashboard', id: uuid }],
|
||||
rls: [],
|
||||
|
@ -44,16 +56,21 @@ export class SupersetService {
|
|||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${loginToken}`,
|
||||
'X-CSRFToken': `${csrfToken}`,
|
||||
Referer: `${this.SUPERSET_URL}/api/v1/security/guest_token/`,
|
||||
Referer: `${this.supersetURL}/v1/security/guest_token/`,
|
||||
};
|
||||
|
||||
const response = await firstValueFrom(
|
||||
this.httpService.post(
|
||||
`${this.SUPERSET_URL}/api/v1/security/guest_token/`,
|
||||
data,
|
||||
{ headers, xsrfHeaderName: 'X-CSRFToken' },
|
||||
),
|
||||
);
|
||||
this.httpService.request({
|
||||
method: 'POST',
|
||||
url: `${this.supersetURL}/v1/security/guest_token/`,
|
||||
data: data,
|
||||
headers: headers,
|
||||
}),
|
||||
).catch((err) => {
|
||||
this.logger.verbose({ loginToken, csrfToken });
|
||||
this.logger.error(err.response.data);
|
||||
throw err;
|
||||
});
|
||||
|
||||
return response.data.token;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue