feat: setup superset BE
parent
79adf156db
commit
dc97d5e14a
|
@ -39,4 +39,6 @@ EXPORT_LIMIT_PARTITION=200
|
||||||
ASSETS="https://asset.sky.eigen.co.id/"
|
ASSETS="https://asset.sky.eigen.co.id/"
|
||||||
|
|
||||||
GOOGLE_CALENDAR_KEY="AIzaSyCSg4P3uC9Z7kD1P4f3rf1BbBaz4Q-M55o"
|
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
|
|
@ -36,4 +36,6 @@ EXPORT_LIMIT_PARTITION=200
|
||||||
ASSETS="https://asset.sky.eigen.co.id/"
|
ASSETS="https://asset.sky.eigen.co.id/"
|
||||||
|
|
||||||
GOOGLE_CALENDAR_KEY="AIzaSyCSg4P3uC9Z7kD1P4f3rf1BbBaz4Q-M55o"
|
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
|
|
@ -1,14 +1,16 @@
|
||||||
import { Controller, Get, Param } from '@nestjs/common';
|
import { Controller, Get, Param } from '@nestjs/common';
|
||||||
import { ApiTags } from '@nestjs/swagger';
|
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
||||||
import { Public } from 'src/core/guards';
|
import { ExcludePrivilege, Public } from 'src/core/guards';
|
||||||
import { SupersetService } from './superset.service';
|
import { SupersetService } from './superset.service';
|
||||||
|
|
||||||
@ApiTags(`Superset`)
|
@ApiTags(`Superset`)
|
||||||
@Controller(`v1/superset`)
|
@Controller(`v1/superset`)
|
||||||
|
@Public(false)
|
||||||
|
@ApiBearerAuth('JWT')
|
||||||
export class SupersetController {
|
export class SupersetController {
|
||||||
constructor(private service: SupersetService) {}
|
constructor(private service: SupersetService) {}
|
||||||
@Get('token/:id')
|
@Get('token/:id')
|
||||||
@Public(true)
|
@ExcludePrivilege()
|
||||||
async getGuestToken(@Param('id') id: string) {
|
async getGuestToken(@Param('id') id: string) {
|
||||||
return this.service.getGuestToken(id);
|
return this.service.getGuestToken(id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,10 @@ import { firstValueFrom } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SupersetService {
|
export class SupersetService {
|
||||||
private SUPERSET_URL = 'https://dashboard.weplayground.eigen.co.id';
|
private SUPERSET_URL = process.env.SUPERSET_URL + '/api';
|
||||||
|
|
||||||
constructor(private readonly httpService: HttpService) {}
|
constructor(private readonly httpService: HttpService) {}
|
||||||
|
|
||||||
async getLoginToken() {
|
async getLoginToken() {
|
||||||
const data = {
|
const data = {
|
||||||
username: 'admin',
|
username: 'admin',
|
||||||
|
@ -13,8 +15,13 @@ export class SupersetService {
|
||||||
provider: 'db',
|
provider: 'db',
|
||||||
refresh: true,
|
refresh: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
const response = await firstValueFrom(
|
const response = await firstValueFrom(
|
||||||
this.httpService.post(`${this.SUPERSET_URL}/api/v1/security/login`, data),
|
this.httpService.request({
|
||||||
|
method: 'POST',
|
||||||
|
url: `${this.SUPERSET_URL}/v1/security/login`,
|
||||||
|
data: data,
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
return response.data.access_token;
|
return response.data.access_token;
|
||||||
|
@ -22,9 +29,10 @@ export class SupersetService {
|
||||||
|
|
||||||
async getCSRFToken() {
|
async getCSRFToken() {
|
||||||
const loginToken = await this.getLoginToken();
|
const loginToken = await this.getLoginToken();
|
||||||
|
|
||||||
const response = await firstValueFrom(
|
const response = await firstValueFrom(
|
||||||
this.httpService.get(`${this.SUPERSET_URL}/api/v1/security/csrf_token/`, {
|
this.httpService.request({
|
||||||
|
method: 'GET',
|
||||||
|
url: `${this.SUPERSET_URL}/v1/security/csrf_token/`,
|
||||||
headers: { Authorization: `Bearer ${loginToken}` },
|
headers: { Authorization: `Bearer ${loginToken}` },
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
@ -34,6 +42,7 @@ export class SupersetService {
|
||||||
|
|
||||||
async getGuestToken(uuid: string) {
|
async getGuestToken(uuid: string) {
|
||||||
const { loginToken, csrfToken } = await this.getCSRFToken();
|
const { loginToken, csrfToken } = await this.getCSRFToken();
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
resources: [{ type: 'dashboard', id: uuid }],
|
resources: [{ type: 'dashboard', id: uuid }],
|
||||||
rls: [],
|
rls: [],
|
||||||
|
@ -44,15 +53,16 @@ export class SupersetService {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
Authorization: `Bearer ${loginToken}`,
|
Authorization: `Bearer ${loginToken}`,
|
||||||
'X-CSRFToken': `${csrfToken}`,
|
'X-CSRFToken': `${csrfToken}`,
|
||||||
Referer: `${this.SUPERSET_URL}/api/v1/security/guest_token/`,
|
Referer: `${this.SUPERSET_URL}/v1/security/guest_token/`,
|
||||||
};
|
};
|
||||||
|
|
||||||
const response = await firstValueFrom(
|
const response = await firstValueFrom(
|
||||||
this.httpService.post(
|
this.httpService.request({
|
||||||
`${this.SUPERSET_URL}/api/v1/security/guest_token/`,
|
method: 'POST',
|
||||||
data,
|
url: `${this.SUPERSET_URL}/v1/security/guest_token/`,
|
||||||
{ headers, xsrfHeaderName: 'X-CSRFToken' },
|
data: data,
|
||||||
),
|
headers: headers,
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
return response.data.token;
|
return response.data.token;
|
||||||
|
|
Loading…
Reference in New Issue