[MNT-21789] ADW - Disable ACS Thumbnail Generation cause ADF Upload Service to fail any file upload with 501 error (#6114)

* Disable ACS Thumbnail Generation cause ADF Upload Service to fail any file upload with 501 error

* * fixed config
This commit is contained in:
dhrn
2020-09-10 23:21:50 +05:30
committed by GitHub
parent 14f08f2178
commit e765239cbf
7 changed files with 89 additions and 26 deletions

View File

@@ -18,13 +18,13 @@
import { Component, Input, OnChanges, OnInit, ViewChild, OnDestroy } from '@angular/core';
import { ProcessInstance, ProcessService ,
ProcessAttachmentListComponent, ProcessUploadService } from '@alfresco/adf-process-services';
import { UploadService, AlfrescoApiService, AppConfigService } from '@alfresco/adf-core';
import { UploadService, AlfrescoApiService, AppConfigService, DiscoveryApiService } from '@alfresco/adf-core';
import { PreviewService } from '../../services/preview.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService) {
return new ProcessUploadService(api, config);
export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService) {
return new ProcessUploadService(api, config, discoveryApiService);
}
@Component({
@@ -35,7 +35,7 @@ export function processUploadServiceFactory(api: AlfrescoApiService, config: App
{
provide: UploadService,
useFactory: (processUploadServiceFactory),
deps: [AlfrescoApiService, AppConfigService]
deps: [AlfrescoApiService, AppConfigService, DiscoveryApiService]
}
]
})

View File

@@ -22,13 +22,13 @@ import {
TaskUploadService,
TaskDetailsModel
} from '@alfresco/adf-process-services';
import { UploadService, AlfrescoApiService, AppConfigService } from '@alfresco/adf-core';
import { UploadService, AlfrescoApiService, AppConfigService, DiscoveryApiService } from '@alfresco/adf-core';
import { PreviewService } from '../../services/preview.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
export function taskUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService) {
return new TaskUploadService(api, config);
export function taskUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService) {
return new TaskUploadService(api, config, discoveryApiService);
}
@Component({
@@ -39,7 +39,7 @@ export function taskUploadServiceFactory(api: AlfrescoApiService, config: AppCon
{
provide: UploadService,
useFactory: (taskUploadServiceFactory),
deps: [AlfrescoApiService, AppConfigService]
deps: [AlfrescoApiService, AppConfigService, DiscoveryApiService]
}
]
})

View File

@@ -16,21 +16,34 @@
*/
import { Injectable } from '@angular/core';
import { from, throwError, Observable } from 'rxjs';
import { from, merge, Observable, BehaviorSubject, throwError } from 'rxjs';
import { BpmProductVersionModel, EcmProductVersionModel } from '../models/product-version.model';
import { AlfrescoApiService } from './alfresco-api.service';
import { map, catchError } from 'rxjs/operators';
import {
SystemPropertiesRepresentation,
Activiti
} from '@alfresco/js-api';
import { catchError, filter, map, switchMap } from 'rxjs/operators';
import { Activiti, SystemPropertiesRepresentation } from '@alfresco/js-api';
import { AuthenticationService } from './authentication.service';
@Injectable({
providedIn: 'root'
})
export class DiscoveryApiService {
constructor(private apiService: AlfrescoApiService) { }
/**
* Gets product information for Content Services.
*/
ecmProductInfo$ = new BehaviorSubject<EcmProductVersionModel>(null);
constructor(
private apiService: AlfrescoApiService,
private authenticationService: AuthenticationService) {
merge(this.apiService.alfrescoApiInitialized, this.authenticationService.onLogin)
.pipe(
filter(() => this.apiService.getInstance()?.isEcmLoggedIn()),
switchMap(() => this.getEcmProductInfo())
)
.subscribe((info) => this.ecmProductInfo$.next(info));
}
/**
* Gets product information for Content Services.

View File

@@ -27,18 +27,30 @@ import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
import { AssocChildBody, AssociationBody } from '@alfresco/js-api';
import { TranslateModule } from '@ngx-translate/core';
import { DiscoveryApiService } from './discovery-api.service';
import { BehaviorSubject } from 'rxjs';
import { EcmProductVersionModel } from '../models';
declare let jasmine: any;
describe('UploadService', () => {
let service: UploadService;
let alfrescoApiService: AlfrescoApiService;
const mockProductInfo = new BehaviorSubject<EcmProductVersionModel>(null);
setupTestBed({
imports: [
TranslateModule.forRoot(),
CoreTestingModule,
AppConfigModule
],
providers: [
{
provide: DiscoveryApiService,
useValue: {
ecmProductInfo$: mockProductInfo
}
}
]
});
@@ -67,6 +79,7 @@ describe('UploadService', () => {
service.queue = [];
service.activeTask = null;
jasmine.Ajax.install();
mockProductInfo.next({ status: { isThumbnailGenerationEnabled: true } } as EcmProductVersionModel);
});
afterEach(() => {
@@ -425,4 +438,28 @@ describe('UploadService', () => {
expect(service.fileUploadCancelled.next).toHaveBeenCalled();
}));
it('Should not pass rendition if it is disabled', () => {
mockProductInfo.next({ status: { isThumbnailGenerationEnabled: false } } as EcmProductVersionModel);
const uploadFileSpy = spyOn(alfrescoApiService.getInstance().upload, 'uploadFile').and.callThrough();
const emitter = new EventEmitter();
const filesFake = new FileModel(<File> { name: 'fake-name', size: 10 }, {
newVersion: true
});
service.addToQueue(filesFake);
service.uploadFilesInTheQueue(emitter);
expect(uploadFileSpy).toHaveBeenCalledWith({
name: 'fake-name',
size: 10
}, undefined, undefined, { newVersion: true }, {
include: ['allowableOperations'],
overwrite: true,
majorVersion: undefined,
comment: undefined,
name: 'fake-name'
});
});
});

View File

@@ -27,6 +27,8 @@ import {
} from '../events/file.event';
import { FileModel, FileUploadProgress, FileUploadStatus } from '../models/file.model';
import { AlfrescoApiService } from './alfresco-api.service';
import { DiscoveryApiService } from './discovery-api.service';
import { filter } from 'rxjs/operators';
const MIN_CANCELLABLE_FILE_SIZE = 1000000;
const MAX_CANCELLABLE_FILE_PERCENTAGE = 50;
@@ -44,6 +46,7 @@ export class UploadService {
private matchingOptions: any = null;
private folderMatchingOptions: any = null;
private abortedFile: string;
private isThumbnailGenerationEnabled: boolean;
activeTask: Promise<any> = null;
queue: FileModel[] = [];
@@ -73,8 +76,15 @@ export class UploadService {
>();
fileDeleted: Subject<string> = new Subject<string>();
constructor(protected apiService: AlfrescoApiService, private appConfigService: AppConfigService) {
constructor(
protected apiService: AlfrescoApiService,
private appConfigService: AppConfigService,
private discoveryApiService: DiscoveryApiService) {
this.discoveryApiService.ecmProductInfo$.pipe(filter(info => !!info))
.subscribe(({ status }) => {
this.isThumbnailGenerationEnabled = status.isThumbnailGenerationEnabled;
});
}
/**
@@ -220,10 +230,13 @@ export class UploadService {
*/
getUploadPromise(file: FileModel): any {
const opts: any = {
renditions: 'doclib',
include: ['allowableOperations']
};
if (this.isThumbnailGenerationEnabled) {
opts.renditions = 'doclib';
}
if (file.options.newVersion === true) {
opts.overwrite = true;
opts.majorVersion = file.options.majorVersion;

View File

@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { AlfrescoApiService, AppConfigService, UploadService } from '@alfresco/adf-core';
import { AlfrescoApiService, AppConfigService, DiscoveryApiService, UploadService } from '@alfresco/adf-core';
import { Injectable } from '@angular/core';
import { throwError } from 'rxjs';
@@ -24,8 +24,8 @@ import { throwError } from 'rxjs';
})
export class ProcessUploadService extends UploadService {
constructor(apiService: AlfrescoApiService, appConfigService: AppConfigService) {
super(apiService, appConfigService);
constructor(protected apiService: AlfrescoApiService, appConfigService: AppConfigService, discoveryApiService: DiscoveryApiService) {
super(apiService, appConfigService, discoveryApiService);
}
getUploadPromise(file: any): any {

View File

@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { AlfrescoApiService, AppConfigService, UploadService } from '@alfresco/adf-core';
import { AlfrescoApiService, AppConfigService, DiscoveryApiService, UploadService } from '@alfresco/adf-core';
import { Injectable } from '@angular/core';
import { throwError } from 'rxjs';
@@ -24,8 +24,8 @@ import { throwError } from 'rxjs';
})
export class TaskUploadService extends UploadService {
constructor(apiService: AlfrescoApiService, appConfigService: AppConfigService) {
super(apiService, appConfigService);
constructor(protected apiService: AlfrescoApiService, appConfigService: AppConfigService, discoveryApiService: DiscoveryApiService) {
super(apiService, appConfigService, discoveryApiService);
}
getUploadPromise(file: any): any {