in modules/quanthub_core/src/PowerBIEmbedConfigs.php [156:231]
public function getPowerBiEmbedToken($token, $reportId, $datasetIds) {
$powerbiAPIURL = 'https://api.powerbi.com/v1.0/myorg/GenerateToken';
$powerbiUser = getenv('POWERBI_PUBLIC_USER');
$powerbiRole = getenv('POWERBI_PUBLIC_ROLE');
$entitledDatasets = [];
foreach ($datasetIds as $datasetId) {
$response = $this->getPowerBiDataset($token, $datasetId);
if ($response['isEffectiveIdentityRequired'] && $response['isEffectiveIdentityRolesRequired']) {
$entitledDatasets[] = $datasetId;
}
}
$datasets = [];
foreach ($datasetIds as $datasetId) {
$datasets[] = [
'id' => $datasetId,
'xmlaPermissions' => 'ReadOnly',
];
}
$payload = [
'accessLevel' => 'View',
'datasets' => $datasets,
'reports' => [['id' => $reportId]],
'targetWorkspaces' => [['id' => $this->getWorkspaceID()]],
];
if (count($entitledDatasets) > 0) {
$payload['identities'] = [
[
'username' => $powerbiUser,
'roles' => [$powerbiRole],
'datasets' => $entitledDatasets,
],
];
}
$payload_json = json_encode($payload);
try {
$request = $this->httpClient->request(
'POST',
$powerbiAPIURL,
[
'headers' => [
'Authorization' => 'Bearer ' . $token,
'Cache-Control' => 'no-cache',
'Content-Type' => 'application/json',
],
'connect_timeout' => 30,
'allow_redirects' => [
'max' => 10,
],
'body' => $payload_json,
]
);
}
catch (\Exception $e) {
$this->loggerFactory->error('getPowerBIEmbedToken: ' . $e->getMessage());
return NULL;
}
$tokenResponse = json_decode($request->getBody(), TRUE);
if (isset($tokenResponse['error'])) {
if (isset($tokenResponse['error']['message'])) {
$this->loggerFactory->error('error: ' . $tokenResponse['error']['message']);
}
else {
$this->loggerFactory->error('error: ' . $tokenResponse['error']);
}
return NULL;
}
return $tokenResponse;
}