diff --git a/client/src/app/instance/search/components/result/datatable-actions.component.html b/client/src/app/instance/search/components/result/datatable-actions.component.html index f0f888639fa2a7999bc3a511d93f5168aa64f902..38e119dfcc5fcf3f7a52e8252ea369de276b1cfe 100644 --- a/client/src/app/instance/search/components/result/datatable-actions.component.html +++ b/client/src/app/instance/search/components/result/datatable-actions.component.html @@ -4,35 +4,29 @@ </button> <ul id="dropdown-basic" *dropdownMenu class="dropdown-menu" role="menu" aria-labelledby="button-basic"> <li *ngIf="getConfigDownloadResultFormat('download_csv')" role="menuitem"> - <a class="dropdown-item" [href]="getUrl('csv')" (click)="click($event, getUrl('csv'), 'csv')"> + <a class="dropdown-item" (click)="downloadResult('csv')"> <span class="fas fa-file-csv"></span> Download CSV </a> </li> <li *ngIf="getConfigDownloadResultFormat('download_ascii')" role="menuitem"> - <a class="dropdown-item" [href]="getUrl('ascii')" (click)="click($event, getUrl('ascii'), 'txt')"> + <a class="dropdown-item" (click)="downloadResult('ascii')"> <span class="fas fa-file"></span> Download ASCII </a> </li> <li *ngIf="getConfigDownloadResultFormat('download_vo')" role="menuitem"> - <a class="dropdown-item" [href]="getUrl('votable')" (click)="click($event, getUrl('votable'), 'xml')"> + <a class="dropdown-item" (click)="downloadResult('votable')"> <span class="fas fa-file"></span> VOtable </a> </li> <li *ngIf="getConfigDownloadResultFormat('download_vo')" role="menuitem" [class.disabled]="!sampRegistered"> - <a class="dropdown-item" [class.disabled]="!sampRegistered" (click)="broadcastVotable()"> + <a class="dropdown-item" [class.disabled]="!sampRegistered" (click)="broadcast.emit()"> <span class="fas fa-broadcast-tower"></span> Broadcast VOtable </a> </li> <li *ngIf="getConfigDownloadResultFormat('download_archive')" role="menuitem"> - <a class="dropdown-item" [href]="createFilesArchiveUrl()" (click)="createFilesArchive($event, createFilesArchiveUrl())"> + <a class="dropdown-item" (click)="downloadArchive()"> <span class="fas fa-archive"></span> Download files archive </a> </li> </ul> -</div> - -<div *ngIf="archiveInProgress"> - <span class="fas fa-circle-notch fa-spin fa-3x"></span> - <span class="sr-only">Loading...</span> - Please wait archive is under construction... </div> \ No newline at end of file diff --git a/client/src/app/instance/search/components/result/datatable-actions.component.ts b/client/src/app/instance/search/components/result/datatable-actions.component.ts index cdb4287662b91488e51c949fbd3f2c4d60dbebf2..73f55fd897f3a3f896422fe82f8efbe1e17a6d06 100644 --- a/client/src/app/instance/search/components/result/datatable-actions.component.ts +++ b/client/src/app/instance/search/components/result/datatable-actions.component.ts @@ -1,13 +1,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { interval, Subscription} from 'rxjs'; - -import { ToastrService } from 'ngx-toastr'; import { Dataset, Attribute } from 'src/app/metamodel/models'; -import { Criterion, ConeSearch, criterionToString } from 'src/app/instance/store/models'; -import { getHost } from 'src/app/shared/utils'; -import { AppConfigService } from 'src/app/app-config.service'; +import { Criterion, ConeSearch } from 'src/app/instance/store/models'; @Component({ selector: 'app-datatable-actions', @@ -24,14 +18,8 @@ export class DatatableActionsComponent { @Input() dataLength: number; @Input() sampRegistered: boolean; @Output() broadcast: EventEmitter<string> = new EventEmitter(); - @Output() startsDownloadingFile: EventEmitter<{url: string, filename: string}> = new EventEmitter(); - - archiveName = ''; - archiveId =''; - archiveInProgress = false; - archiveIsAvailableSubscription: Subscription - - constructor(private appConfig: AppConfigService, private http: HttpClient, private toastr: ToastrService) { } + @Output() startTaskCreateResult: EventEmitter<{ format: string, selectedData: boolean }> = new EventEmitter(); + @Output() startTaskCreateArchive: EventEmitter<{ selectedData: boolean }> = new EventEmitter(); /** * Checks if the download format is allowed by Anis Admin configuration. @@ -49,102 +37,21 @@ export class DatatableActionsComponent { return this.datasetList.find(d => d.name === this.datasetSelected); } - /** - * Returns URL to download file for the given format. - * - * @param {string} format - The file format to download. - * - * @return string - */ - getUrl(format: string): string { - let query: string = `${getHost(this.appConfig.apiUrl)}/search/${this.datasetSelected}?a=${this.outputList.join(';')}`; - if (this.criteriaList.length > 0) { - query += `&c=${this.criteriaList.map(criterion => criterionToString(criterion)).join(';')};${this.getCriterionSelectedData()}`; - } else { - query += `&c=${this.getCriterionSelectedData()}`; - } - if (this.coneSearch) { - query += `&cs=${this.coneSearch.ra}:${this.coneSearch.dec}:${this.coneSearch.radius}`; - } - query += `&f=${format}`; - return query; - } - getCriterionSelectedData() { const attributeId = this.attributeList.find(a => a.search_flag === 'ID'); return `${attributeId.id}::in::${this.selectedData.join('|')}`; } - /** - * Allows to download file. - */ - click(event, href, extension): void { - event.preventDefault(); - - const url = href; - const filename = `${this.datasetSelected}.${extension}`; - - this.startsDownloadingFile.emit({ url, filename }); - } - - /** - * Returns URL to download archive. - * - * @return boolean - */ - createFilesArchiveUrl(): string { - let query: string = `${getHost(this.appConfig.apiUrl)}/start-task-create-archive/${this.datasetSelected}?a=${this.outputList.join(';')}`; - if (this.criteriaList.length > 0) { - query += `&c=${this.criteriaList.map(criterion => criterionToString(criterion)).join(';')}`; - } else { - query += `&c=${this.getCriterionSelectedData()}`; - } - if (this.coneSearch) { - query += `&cs=${this.coneSearch.ra}:${this.coneSearch.dec}:${this.coneSearch.radius}`; - } - return query; - } - - getArchiveUrl() { - return `${getHost(this.appConfig.apiUrl)}/download-archive/${this.datasetSelected}/${this.archiveId}`; - } - - testArchiveIsAvailable() { - const url = `${getHost(this.appConfig.apiUrl)}/is-archive-available/${this.archiveId}`; - this.http.get<{"archive_is_available": boolean}>(url).subscribe(data => { - console.log(data); - if (data.archive_is_available) { - this.archiveInProgress = false; - this.archiveIsAvailableSubscription.unsubscribe(); - this.startsDownloadingFile.emit({ url: this.getArchiveUrl(), filename: this.archiveName }) - } + downloadResult(format: string) { + this.startTaskCreateResult.emit({ + format, + selectedData: true }); } - /** - * Starts the creation of the files archive - */ - createFilesArchive(event, href): void { - event.preventDefault(); - - this.http.get<{"archive_name": string, "archive_id": string}>(href).subscribe(data => { - this.archiveInProgress = true; - this.archiveName = data.archive_name; - this.archiveId = data.archive_id; - this.archiveIsAvailableSubscription = interval(1000).subscribe(() => this.testArchiveIsAvailable()); + downloadArchive() { + this.startTaskCreateArchive.emit({ + selectedData: true }); } - - /** - * Emits event to action to broadcast data. - * - * @fires EventEmitter<string> - */ - broadcastVotable(): void { - this.broadcast.emit(this.getUrl('votable')); - } - - ngOnDestroy() { - this.archiveIsAvailableSubscription.unsubscribe(); - } } diff --git a/client/src/app/instance/search/components/result/datatable-tab.component.html b/client/src/app/instance/search/components/result/datatable-tab.component.html index 0feb30644af3bbca7cd805b7e905d71fdc39e5d3..3a9773c09cb7445b215159963028ddaeece775f7 100644 --- a/client/src/app/instance/search/components/result/datatable-tab.component.html +++ b/client/src/app/instance/search/components/result/datatable-tab.component.html @@ -19,7 +19,8 @@ [dataLength]="dataLength" [sampRegistered]="sampRegistered" (broadcast)="broadcast.emit($event)" - (downloadingFile)="downloadingFile.emit($event)"> + (startTaskCreateResult)="startTaskCreateResult.emit($event)" + (startTaskCreateArchive)="startTaskCreateArchive.emit($event)"> </app-datatable-actions> <app-datatable [dataset]="datasetList | datasetByName:datasetSelected" @@ -35,7 +36,7 @@ (retrieveData)="retrieveData.emit($event)" (addSelectedData)="addSelectedData.emit($event)" (deleteSelectedData)="deleteSelectedData.emit($event)" - (downloadingFile)="downloadingFile.emit($event)"> + (downloadFile)="downloadFile.emit($event)"> </app-datatable> </accordion-group> </accordion> diff --git a/client/src/app/instance/search/components/result/datatable-tab.component.ts b/client/src/app/instance/search/components/result/datatable-tab.component.ts index af78907ccd84e1af2f6087595c27a392b51cd1f9..2f4e3475b628d1e746d03f88ec93c27d5eef1cd5 100644 --- a/client/src/app/instance/search/components/result/datatable-tab.component.ts +++ b/client/src/app/instance/search/components/result/datatable-tab.component.ts @@ -40,5 +40,7 @@ export class DatatableTabComponent { @Output() addSelectedData: EventEmitter<number | string> = new EventEmitter(); @Output() deleteSelectedData: EventEmitter<number | string> = new EventEmitter(); @Output() broadcast: EventEmitter<string> = new EventEmitter(); - @Output() downloadingFile: EventEmitter<{url: string, fileId: string, datasetName: string, filename: string}> = new EventEmitter(); + @Output() startTaskCreateResult: EventEmitter<{ format: string, selectedData: boolean }> = new EventEmitter(); + @Output() startTaskCreateArchive: EventEmitter<{ selectedData: boolean }> = new EventEmitter(); + @Output() downloadFile: EventEmitter<{url: string, fileId: string, datasetName: string, filename: string}> = new EventEmitter(); } diff --git a/client/src/app/instance/search/components/result/datatable.component.html b/client/src/app/instance/search/components/result/datatable.component.html index c1df3527a73a29b2a302829d7d66fdba6ded7a56..0647cae6aa7c479d26a4a022839dca28464509f0 100644 --- a/client/src/app/instance/search/components/result/datatable.component.html +++ b/client/src/app/instance/search/components/result/datatable.component.html @@ -63,7 +63,7 @@ [datasetName]="dataset.name" [datasetPublic]="dataset.public" [config]="getRendererConfig(attribute)" - (downloadingFile)="downloadingFile.emit($event)"> + (downloadFile)="downloadFile.emit($event)"> </app-download-renderer> </div> <div *ngSwitchCase="'image'"> diff --git a/client/src/app/instance/search/components/result/datatable.component.ts b/client/src/app/instance/search/components/result/datatable.component.ts index 35be1904daad07e281252e7492d04ddaffdcf162..0718b70e9c2ef8024bd9fb4b35a568f53532852e 100644 --- a/client/src/app/instance/search/components/result/datatable.component.ts +++ b/client/src/app/instance/search/components/result/datatable.component.ts @@ -44,7 +44,7 @@ export class DatatableComponent implements OnInit { @Output() retrieveData: EventEmitter<Pagination> = new EventEmitter(); @Output() addSelectedData: EventEmitter<number | string> = new EventEmitter(); @Output() deleteSelectedData: EventEmitter<number | string> = new EventEmitter(); - @Output() downloadingFile: EventEmitter<{url: string, fileId: string, datasetName: string, filename: string}> = new EventEmitter(); + @Output() downloadFile: EventEmitter<{url: string, fileId: string, datasetName: string, filename: string}> = new EventEmitter(); public page = 1; public nbItems = 10; diff --git a/client/src/app/instance/search/components/result/download.component.html b/client/src/app/instance/search/components/result/download.component.html index 408855a5a241d81483c041168db44fcc0a497782..f1318353ed76200e18875c282c5b85f03c04019b 100644 --- a/client/src/app/instance/search/components/result/download.component.html +++ b/client/src/app/instance/search/components/result/download.component.html @@ -41,7 +41,7 @@ <p>Download archive files just here:</p> </div> <div class="col"> - <a (click)="startTaskCreateArchive.emit()" class="btn btn-outline-primary" title="Download an archive with all files"> + <a (click)="downloadArchive()" class="btn btn-outline-primary" title="Download an archive with all files"> <span class="fas fa-archive"></span> Files archive </a> </div> diff --git a/client/src/app/instance/search/components/result/download.component.ts b/client/src/app/instance/search/components/result/download.component.ts index d6c2323bdd6cab5df0bc31b11aaa9576cd0678ef..e9e03f9256c88c0f53ee73a4c59b695d97e9a491 100644 --- a/client/src/app/instance/search/components/result/download.component.ts +++ b/client/src/app/instance/search/components/result/download.component.ts @@ -30,7 +30,7 @@ export class DownloadComponent { @Input() sampRegistered: boolean; @Output() broadcast: EventEmitter<string> = new EventEmitter(); @Output() startTaskCreateResult: EventEmitter<{ format: string, selectedData: boolean }> = new EventEmitter(); - @Output() startTaskCreateArchive: EventEmitter<{}> = new EventEmitter(); + @Output() startTaskCreateArchive: EventEmitter<{ selectedData: boolean }> = new EventEmitter(); /** * Checks if download tab has to be display. @@ -70,4 +70,10 @@ export class DownloadComponent { selectedData: false }); } + + downloadArchive() { + this.startTaskCreateArchive.emit({ + selectedData: false + }); + } } diff --git a/client/src/app/instance/search/components/result/renderer/download-renderer.component.ts b/client/src/app/instance/search/components/result/renderer/download-renderer.component.ts index b7eb941fb56bc17ca645ec40db37bbcaf28aa846..9cdb554f3312fcc61eb373a1068e359ac3f00adf 100644 --- a/client/src/app/instance/search/components/result/renderer/download-renderer.component.ts +++ b/client/src/app/instance/search/components/result/renderer/download-renderer.component.ts @@ -27,7 +27,7 @@ export class DownloadRendererComponent { @Input() datasetName: string; @Input() datasetPublic: boolean; @Input() config: DownloadRendererConfig; - @Output() downloadingFile: EventEmitter<{url: string, fileId: string, datasetName: string, filename: string}> = new EventEmitter(); + @Output() downloadFile: EventEmitter<{url: string, fileId: string, datasetName: string, filename: string}> = new EventEmitter(); constructor(private appConfig: AppConfigService) { } @@ -62,7 +62,7 @@ export class DownloadRendererComponent { const k = Math.floor(Math.random() * 1000000); const m = String.fromCharCode(n) + k; - this.downloadingFile.emit({ + this.downloadFile.emit({ url, fileId: m, datasetName: this.datasetName, diff --git a/client/src/app/instance/search/containers/result.component.html b/client/src/app/instance/search/containers/result.component.html index f0f8c4f9371770acc7bf60f0b9b291c62c5d064b..d06e9f7f5d38fe71eb6878a08d112f32a7426ef1 100644 --- a/client/src/app/instance/search/containers/result.component.html +++ b/client/src/app/instance/search/containers/result.component.html @@ -39,7 +39,7 @@ [sampRegistered]="sampRegistered | async" (broadcast)="broadcastVotable($event)" (startTaskCreateResult)="startTaskCreateResult($event)" - (startTaskCreateArchive)="startTaskCreateArchive()"> + (startTaskCreateArchive)="startTaskCreateArchive($event)"> </app-download> <app-reminder [datasetSelected]="datasetSelected | async" @@ -84,7 +84,9 @@ (addSelectedData)="addSearchData($event)" (deleteSelectedData)="deleteSearchData($event)" (broadcast)="broadcastVotable($event)" - (downloadingFile)="downloadingFile($event)"> + (startTaskCreateResult)="startTaskCreateResult($event)" + (startTaskCreateArchive)="startTaskCreateArchive($event)" + (downloadFile)="downloadFile($event)"> </app-datatable-tab> </ng-container> </div> diff --git a/client/src/app/instance/search/containers/result.component.ts b/client/src/app/instance/search/containers/result.component.ts index dcc9146cd4a73774250c4ed2bf5c62a45f0ec2b3..cc058ea450f4445bd295363a7fe2b2a25dee5f34 100644 --- a/client/src/app/instance/search/containers/result.component.ts +++ b/client/src/app/instance/search/containers/result.component.ts @@ -129,7 +129,7 @@ export class ResultComponent extends AbstractSearchComponent { * * @param {url: string, fileId: string, datasetName: string, filename: string} download - Info about file to download */ - downloadingFile(download: {url: string, fileId: string, datasetName: string, filename: string}): void { + downloadFile(download: {url: string, fileId: string, datasetName: string, filename: string}): void { this.store.dispatch(downloadFileActions.downloadFile(download)); } @@ -146,8 +146,8 @@ export class ResultComponent extends AbstractSearchComponent { * Dispatches action to starts task create archive and download * */ - startTaskCreateArchive() { - this.store.dispatch(downloadFileActions.startTaskCreateArchive()); + startTaskCreateArchive(event: { selectedData: boolean }) { + this.store.dispatch(downloadFileActions.startTaskCreateArchive(event)); } /** diff --git a/client/src/app/instance/store/actions/download-file.actions.ts b/client/src/app/instance/store/actions/download-file.actions.ts index e1c428e5318a10ad8823fec87347629680263fe4..8368ed9207b145ecd1970f5d63569c06afd35270 100644 --- a/client/src/app/instance/store/actions/download-file.actions.ts +++ b/client/src/app/instance/store/actions/download-file.actions.ts @@ -15,7 +15,7 @@ export const startTaskCreateResultFail = createAction('[File] Start Task Create export const isResultAvailable = createAction('[File] Is Result Available', props<{ fileId: string, datasetName: string, filename: string }>()); export const isResultAvailableFail = createAction('[File] Is Result Available Fail'); -export const startTaskCreateArchive = createAction('[File] Start Task Create Archive'); +export const startTaskCreateArchive = createAction('[File] Start Task Create Archive', props<{ selectedData: boolean }>()); export const startTaskCreateArchiveSuccess = createAction('[File] Start Task Create Archive Success', props<{ fileId: string, datasetName: string, filename: string }>()); export const startTaskCreateArchiveFail = createAction('[File] Start Task Create Archive Fail'); export const isArchiveAvailable = createAction('[File] Is Archive Available', props<{ fileId: string, datasetName: string, filename: string }>()); diff --git a/client/src/app/instance/store/effects/download-file.effects.ts b/client/src/app/instance/store/effects/download-file.effects.ts index 6a37522175e8d52ededa6233fe9a08121740ab0c..90a6a107ff8ffc128cef419a1809a9739a4d3040 100644 --- a/client/src/app/instance/store/effects/download-file.effects.ts +++ b/client/src/app/instance/store/effects/download-file.effects.ts @@ -127,14 +127,22 @@ export class DownloadFileEffects { ofType(downloadFileActions.startTaskCreateArchive), concatLatestFrom(() => [ this.store.select(searchSelector.selectCurrentDataset), + this.store.select(attributeSelector.selectAllAttributes), this.store.select(searchSelector.selectCriteriaListByRoute), this.store.select(coneSearchSelector.selectConeSearchByRoute), - this.store.select(searchSelector.selectOutputListByRoute) + this.store.select(searchSelector.selectOutputListByRoute), + this.store.select(searchSelector.selectSelectedData) ]), - mergeMap(([action, currentDataset, criteriaList, coneSearch, outputList]) => { + mergeMap(([action, currentDataset, attributeList, criteriaList, coneSearch, outputList, selectedData]) => { + const attributeId = attributeList.find(a => a.search_flag === 'ID'); let query: string = `${currentDataset}?a=${outputList}`; if (criteriaList) { query += `&c=${criteriaList}`; + if (selectedData && action.selectedData) { + query += `;${attributeId.id}::in::${selectedData.join('|')}`; + } + } else if (selectedData && action.selectedData) { + query += `&c=${attributeId.id}::in::${selectedData.join('|')}`; } if (coneSearch) { query += `&cs=${coneSearch}`; diff --git a/docker-compose.yml b/docker-compose.yml index 463a5f3c4884b73bbc4071b189d108caa672c1c7..85f5477cc0a5ddba4af4dca83a591f39b0a77b2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,7 @@ services: SSO_AUTH_URL: "http://localhost:8180/auth" SSO_REALM: "anis" SSO_CLIENT_ID: "anis-client" - TOKEN_ENABLED: 0 + TOKEN_ENABLED: 1 TOKEN_JWKS_URL: "http://keycloak:8180/auth/realms/anis/protocol/openid-connect/certs" TOKEN_ADMIN_ROLES: anis_admin,superuser RMQ_HOST: rmq diff --git a/server/src/Action/AbstractAction.php b/server/src/Action/AbstractAction.php index 894633a79f047e80993c76798eaed7fd30dc81a0..97d759652de9587d40658990d75d8678c91766cf 100644 --- a/server/src/Action/AbstractAction.php +++ b/server/src/Action/AbstractAction.php @@ -82,7 +82,7 @@ abstract class AbstractAction } } - private function isAdmin(array $adminRoles, $roles) + protected function isAdmin(array $adminRoles, $roles) { $admin = false; for ($i = 0; $i < count($adminRoles); $i++) { diff --git a/server/src/Action/DatasetListByInstanceAction.php b/server/src/Action/DatasetListByInstanceAction.php index 127477909c668ea636c056f05ea4a085809695b8..efa9f06a45fd57b7bc3bcd167d2630bd5cfe8625 100644 --- a/server/src/Action/DatasetListByInstanceAction.php +++ b/server/src/Action/DatasetListByInstanceAction.php @@ -81,8 +81,9 @@ final class DatasetListByInstanceAction extends AbstractAction // If user is not connected return public datasets $qb->andWhere($qb->expr()->eq('d.public', 'true')); } else { + $adminRoles = explode(',', $this->settings['admin_roles']); $roles = $token->realm_access->roles; - if (!in_array($this->settings['admin_roles'], $roles)) { + if (!$this->isAdmin($adminRoles, $roles)) { // If user is not an admin return public datasets // And returns datasets from user's groups $qb->andWhere($qb->expr()->eq('d.public', 'true')); diff --git a/server/src/Action/StartTaskCreateArchiveAction.php b/server/src/Action/StartTaskCreateArchiveAction.php index 898183d400cd1a63c400a7fc0a76ead00a46a5c2..5be35c2ac910e725a22e0285d871c2dc0b56893c 100644 --- a/server/src/Action/StartTaskCreateArchiveAction.php +++ b/server/src/Action/StartTaskCreateArchiveAction.php @@ -92,12 +92,14 @@ final class StartTaskCreateArchiveAction extends AbstractAction } // If dataset is private and authorization enabled + $token = ''; if (!$dataset->getPublic() && boolval($this->settings['enabled'])) { $this->verifyDatasetAuthorization( $request, $dataset->getName(), explode(',', $this->settings['admin_roles']) ); + $token = $request->getHeader('Authorization')[0]; } $queryParams = $request->getQueryParams(); @@ -121,7 +123,8 @@ final class StartTaskCreateArchiveAction extends AbstractAction 'archive_id' => $archiveId, 'dataset_name' => $datasetName, 'query' => $request->getUri()->getQuery(), - 'param_a' => $queryParams['a'] + 'param_a' => $queryParams['a'], + 'token' => $token ))); $channel->basic_publish($msg, '', 'archive'); diff --git a/server/src/Action/StartTaskCreateResultAction.php b/server/src/Action/StartTaskCreateResultAction.php index bc9426ea543f312fa878f1614a1a0a79ed625bdc..0067b5771f087be9c6792b0e20c0de6be7fed3ad 100644 --- a/server/src/Action/StartTaskCreateResultAction.php +++ b/server/src/Action/StartTaskCreateResultAction.php @@ -92,12 +92,14 @@ final class StartTaskCreateResultAction extends AbstractAction } // If dataset is private and authorization enabled + $token = ''; if (!$dataset->getPublic() && boolval($this->settings['enabled'])) { $this->verifyDatasetAuthorization( $request, $dataset->getName(), explode(',', $this->settings['admin_roles']) ); + $token = $request->getHeader('Authorization')[0]; } $queryParams = $request->getQueryParams(); @@ -128,10 +130,12 @@ final class StartTaskCreateResultAction extends AbstractAction // Publish message in the archive queue $channel = $this->rmq->channel(); $channel->queue_declare('archive', false, false, false, false); + $msg = new AMQPMessage(json_encode(array( 'file_id' => $fileId, 'dataset_name' => $datasetName, - 'query' => $request->getUri()->getQuery() + 'query' => $request->getUri()->getQuery(), + 'token' => $token ))); $channel->basic_publish($msg, '', 'result'); diff --git a/tasks/src/anis_tasks/archive.py b/tasks/src/anis_tasks/archive.py index d439f79e0e108ad01cfe592bd00883b49d9e52d4..2e93e38974915857c1a2037c2814f2bf269cccc9 100644 --- a/tasks/src/anis_tasks/archive.py +++ b/tasks/src/anis_tasks/archive.py @@ -17,7 +17,7 @@ def archive_handler(ch, method, properties, body): attributes_selected = get_attributes_selected(attributes, message["param_a"]) # Retrieve data - data = utils.search_data(message["dataset_name"], message["query"]) + data = utils.search_data(message["dataset_name"], message["query"], message["token"]) # create a ZipFile object data_path = utils.get_data_path() diff --git a/tasks/src/anis_tasks/result.py b/tasks/src/anis_tasks/result.py index 965b4339a467b44dc900c25ed4fe4574c8b76f95..27ac73dfe913594e8aea32f5feb13ccc532c7a70 100644 --- a/tasks/src/anis_tasks/result.py +++ b/tasks/src/anis_tasks/result.py @@ -11,7 +11,8 @@ def result_handler(ch, method, properties, body): message = json.loads(body) # Retrieve data - data = utils.search_data(message["dataset_name"], message["query"]) + logging.info(message["token"]) + data = utils.search_data(message["dataset_name"], message["query"], message["token"]) # create a File object data_path = utils.get_data_path() diff --git a/tasks/src/anis_tasks/utils.py b/tasks/src/anis_tasks/utils.py index 689f4517620a1c630fe6bf0539bdd7c349df02ed..ae43a76b3cce6464f101e372e553cd505916312d 100644 --- a/tasks/src/anis_tasks/utils.py +++ b/tasks/src/anis_tasks/utils.py @@ -80,10 +80,15 @@ def get_attributes(dname): return r.json() -def search_data(dname, query): +def search_data(dname, query, token): server_url = os.environ["SERVER_URL"] - r = requests.get(server_url + "/search/" + dname + "?" + query) + headers = {} + + if (token): + headers = { "Authorization": token } + + r = requests.get(server_url + "/search/" + dname + "?" + query, headers=headers) if (r.status_code == 404): raise DatasetNotFound(dname)