8
0
Эх сурвалжийг харах

Merge pull request #8 from ckeditor/t/7

Other: Aligned code to the new CloudeServices API and use `ckeditor5-cloudservices` package. Closes #7.

Feature: The plugin will now automatically refresh token when it will expire.

BREAKING CHANGE: Easy Image plugin do not use `cloudeservices.token` config anymore. The proper config now is `cloudeservices.tokenUrl`with the URL to the token server.
Piotr Jasiun 8 жил өмнө
parent
commit
b044151e74

+ 2 - 1
packages/ckeditor5-easy-image/package.json

@@ -7,7 +7,8 @@
     "ckeditor5-feature"
     "ckeditor5-feature"
   ],
   ],
   "dependencies": {
   "dependencies": {
-    "@ckeditor/ckeditor-cloudservices-core": "^0.1.0",
+    "@ckeditor/ckeditor-cloudservices-core": "^0.2.0",
+    "@ckeditor/ckeditor5-cloudservices": "ckeditor/ckeditor5-cloudservices",
     "@ckeditor/ckeditor5-core": "^1.0.0-alpha.1",
     "@ckeditor/ckeditor5-core": "^1.0.0-alpha.1",
     "@ckeditor/ckeditor5-image": "^1.0.0-alpha.1",
     "@ckeditor/ckeditor5-image": "^1.0.0-alpha.1",
     "@ckeditor/ckeditor5-upload": "^1.0.0-alpha.1"
     "@ckeditor/ckeditor5-upload": "^1.0.0-alpha.1"

+ 6 - 10
packages/ckeditor5-easy-image/src/cloudservicesuploadadapter.js

@@ -10,6 +10,7 @@
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
 import UploadGateway from '@ckeditor/ckeditor-cloudservices-core/src/uploadgateway/uploadgateway';
 import UploadGateway from '@ckeditor/ckeditor-cloudservices-core/src/uploadgateway/uploadgateway';
+import CloudServices from '@ckeditor/ckeditor5-cloudservices/src/cloudservices';
 
 
 /**
 /**
  * A plugin which enables upload to Cloud Services.
  * A plugin which enables upload to Cloud Services.
@@ -26,7 +27,7 @@ export default class CloudServicesUploadAdapter extends Plugin {
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	static get requires() {
 	static get requires() {
-		return [ FileRepository ];
+		return [ FileRepository, CloudServices ];
 	}
 	}
 
 
 	/**
 	/**
@@ -34,16 +35,11 @@ export default class CloudServicesUploadAdapter extends Plugin {
 	 */
 	 */
 	init() {
 	init() {
 		const editor = this.editor;
 		const editor = this.editor;
-		const config = editor.config;
 
 
-		config.define( 'cloudServices.uploadUrl', 'https://files.cke-cs.com/upload/' );
+		const cloudServices = editor.plugins.get( CloudServices );
 
 
-		const token = config.get( 'cloudServices.token' );
-		const uploadUrl = config.get( 'cloudServices.uploadUrl' );
-
-		if ( !token || !uploadUrl ) {
-			return;
-		}
+		const token = cloudServices.token;
+		const uploadUrl = cloudServices.uploadUrl || 'https://files.cke-cs.com/upload/';
 
 
 		this._uploadGateway = new CloudServicesUploadAdapter._UploadGateway( token, uploadUrl );
 		this._uploadGateway = new CloudServicesUploadAdapter._UploadGateway( token, uploadUrl );
 
 
@@ -102,7 +98,7 @@ CloudServicesUploadAdapter._UploadGateway = UploadGateway;
  *		ClassicEditor
  *		ClassicEditor
  *			.create( editorElement, {
  *			.create( editorElement, {
  * 				cloudServices: {
  * 				cloudServices: {
- *					token: '...'
+ *					tokenUrl: '...'
  * 				}
  * 				}
  *			} )
  *			} )
  *			.then( ... )
  *			.then( ... )

+ 0 - 40
packages/ckeditor5-easy-image/tests/_utils/gettoken.js

@@ -1,40 +0,0 @@
-/**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-/* globals XMLHttpRequest */
-
-import uid from '@ckeditor/ckeditor5-utils/src/uid';
-
-// WARNING: The URL below should not be used for any other purpose than Easy Image plugin development.
-// Images uploaded using the testing token service may be deleted automatically at any moment.
-// If you would like to try the Easy Image service, please wait until the official launch of Easy Image and sign up for a free trial.
-// Images uploaded during the free trial will not be deleted for the whole trial period and additionally the trial service can be converted
-// into a subscription at any moment, allowing you to preserve all uploaded images.
-const CLOUD_SERVICES_TOKEN_URL = 'https://j2sns7jmy0.execute-api.eu-central-1.amazonaws.com/prod/token';
-
-export default function getToken() {
-	return new Promise( ( resolve, reject ) => {
-		const xhr = new XMLHttpRequest();
-		const userId = uid();
-
-		xhr.open( 'GET', `${ CLOUD_SERVICES_TOKEN_URL }?user.id=${ userId }` );
-
-		xhr.onload = () => {
-			if ( xhr.status >= 200 && xhr.status < 300 ) {
-				const response = JSON.parse( xhr.responseText );
-
-				resolve( response.token );
-			} else {
-				reject( new Error( `XHR status: ${ xhr.status }` ) );
-			}
-		};
-
-		xhr.onerror = err => {
-			reject( err );
-		};
-
-		xhr.send( null );
-	} );
-}

+ 11 - 24
packages/ckeditor5-easy-image/tests/cloudservicesuploadadapter.js

@@ -8,22 +8,26 @@
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
 import CloudServicesUploadAdapter from '../src/cloudservicesuploadadapter';
 import CloudServicesUploadAdapter from '../src/cloudservicesuploadadapter';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
+import CloudServices from '@ckeditor/ckeditor5-cloudservices/src/cloudservices';
+
 import UploadGatewayMock from './_utils/uploadgatewaymock';
 import UploadGatewayMock from './_utils/uploadgatewaymock';
 import { createNativeFileMock } from '@ckeditor/ckeditor5-upload/tests/_utils/mocks';
 import { createNativeFileMock } from '@ckeditor/ckeditor5-upload/tests/_utils/mocks';
+import TokenMock from '@ckeditor/ckeditor5-cloudservices/tests/_utils/tokenmock';
 
 
 // Store original uploader.
 // Store original uploader.
 const CSUploader = CloudServicesUploadAdapter._UploadGateway;
 const CSUploader = CloudServicesUploadAdapter._UploadGateway;
+const Token = CloudServices.Token;
 
 
 describe( 'CloudServicesUploadAdapter', () => {
 describe( 'CloudServicesUploadAdapter', () => {
 	let div;
 	let div;
 
 
 	before( () => {
 	before( () => {
-		// Mock uploader.
+		CloudServices.Token = TokenMock;
 		CloudServicesUploadAdapter._UploadGateway = UploadGatewayMock;
 		CloudServicesUploadAdapter._UploadGateway = UploadGatewayMock;
 	} );
 	} );
 
 
 	after( () => {
 	after( () => {
-		// Restore original uploader.
+		CloudServices.Token = Token;
 		CloudServicesUploadAdapter._UploadGateway = CSUploader;
 		CloudServicesUploadAdapter._UploadGateway = CSUploader;
 	} );
 	} );
 
 
@@ -39,53 +43,36 @@ describe( 'CloudServicesUploadAdapter', () => {
 	describe( 'init()', () => {
 	describe( 'init()', () => {
 		it( 'should set loader', () => {
 		it( 'should set loader', () => {
 			UploadGatewayMock.lastToken = undefined;
 			UploadGatewayMock.lastToken = undefined;
+			TokenMock.initialToken = 'token';
 
 
 			return ClassicTestEditor
 			return ClassicTestEditor
 				.create( div, {
 				.create( div, {
 					plugins: [ CloudServicesUploadAdapter ],
 					plugins: [ CloudServicesUploadAdapter ],
 					cloudServices: {
 					cloudServices: {
-						token: 'abc',
+						tokenUrl: 'abc',
 						uploadUrl: 'http://upload.mock.url/'
 						uploadUrl: 'http://upload.mock.url/'
 					}
 					}
 				} )
 				} )
 				.then( editor => {
 				.then( editor => {
-					expect( UploadGatewayMock.lastToken ).to.equal( 'abc' );
 					expect( UploadGatewayMock.lastUploadUrl ).to.equal( 'http://upload.mock.url/' );
 					expect( UploadGatewayMock.lastUploadUrl ).to.equal( 'http://upload.mock.url/' );
 
 
 					return editor.destroy();
 					return editor.destroy();
 				} );
 				} );
 		} );
 		} );
 
 
-		it( 'should not set loader if there is no token', () => {
-			UploadGatewayMock.lastToken = undefined;
-
-			return ClassicTestEditor
-				.create( div, {
-					plugins: [ CloudServicesUploadAdapter ]
-				} )
-				.then( editor => {
-					expect( UploadGatewayMock.lastToken ).to.be.an( 'undefined' );
-
-					return editor.destroy();
-				} );
-		} );
-
-		it( 'should set the default config.cloudServices.uploadUrl', () => {
+		it( 'should set the default uploadUrl', () => {
 			const expectedDefaultUrl = 'https://files.cke-cs.com/upload/';
 			const expectedDefaultUrl = 'https://files.cke-cs.com/upload/';
 
 
 			return ClassicTestEditor
 			return ClassicTestEditor
 				.create( div, {
 				.create( div, {
 					plugins: [ CloudServicesUploadAdapter ],
 					plugins: [ CloudServicesUploadAdapter ],
 					cloudServices: {
 					cloudServices: {
-						token: 'abc'
+						tokenUrl: 'abc'
 					}
 					}
 				} )
 				} )
 				.then( editor => {
 				.then( editor => {
-					expect( UploadGatewayMock.lastToken ).to.equal( 'abc' );
 					expect( UploadGatewayMock.lastUploadUrl ).to.equal( expectedDefaultUrl );
 					expect( UploadGatewayMock.lastUploadUrl ).to.equal( expectedDefaultUrl );
 
 
-					expect( editor.config.get( 'cloudServices.uploadUrl' ) ).to.equal( expectedDefaultUrl );
-
 					return editor.destroy();
 					return editor.destroy();
 				} );
 				} );
 		} );
 		} );
@@ -98,7 +85,7 @@ describe( 'CloudServicesUploadAdapter', () => {
 			return ClassicTestEditor.create( div, {
 			return ClassicTestEditor.create( div, {
 				plugins: [ CloudServicesUploadAdapter ],
 				plugins: [ CloudServicesUploadAdapter ],
 				cloudServices: {
 				cloudServices: {
-					token: 'abc',
+					tokenUrl: 'abc',
 					uploadUrl: 'http://upload.mock.url/'
 					uploadUrl: 'http://upload.mock.url/'
 				}
 				}
 			} ).then( _editor => {
 			} ).then( _editor => {

+ 18 - 2
packages/ckeditor5-easy-image/tests/easyimage.js

@@ -14,7 +14,20 @@ import UploadGatewayMock from './_utils/uploadgatewaymock';
 import { createNativeFileMock } from '@ckeditor/ckeditor5-upload/tests/_utils/mocks';
 import { createNativeFileMock } from '@ckeditor/ckeditor5-upload/tests/_utils/mocks';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 
 
+import CloudServices from '@ckeditor/ckeditor5-cloudservices/src/cloudservices';
+import TokenMock from '@ckeditor/ckeditor5-cloudservices/tests/_utils/tokenmock';
+
+const Token = CloudServices.Token
+
 describe( 'EasyImage', () => {
 describe( 'EasyImage', () => {
+	before( () => {
+		CloudServices.Token = TokenMock;
+	} );
+
+	after( () => {
+		CloudServices.Token = Token;
+	} );
+
 	it( 'should require other plugins', () => {
 	it( 'should require other plugins', () => {
 		const plugins = EasyImage.requires;
 		const plugins = EasyImage.requires;
 
 
@@ -29,7 +42,10 @@ describe( 'EasyImage', () => {
 
 
 		return ClassicTestEditor
 		return ClassicTestEditor
 			.create( div, {
 			.create( div, {
-				plugins: [ EasyImage ]
+				plugins: [ EasyImage ],
+				cloudServices: {
+					tokenUrl: 'abc',
+				}
 			} )
 			} )
 			.then( editor => {
 			.then( editor => {
 				const easyImage = editor.plugins.get( EasyImage );
 				const easyImage = editor.plugins.get( EasyImage );
@@ -83,7 +99,7 @@ describe( 'EasyImage', () => {
 						Paragraph, EasyImage
 						Paragraph, EasyImage
 					],
 					],
 					cloudServices: {
 					cloudServices: {
-						token: 'abc',
+						tokenUrl: 'abc',
 						uploadUrl: 'http://upload.mock.url/'
 						uploadUrl: 'http://upload.mock.url/'
 					}
 					}
 				} )
 				} )

+ 14 - 17
packages/ckeditor5-easy-image/tests/manual/easyimage.js

@@ -10,24 +10,21 @@ import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'
 import EasyImage from '../../src/easyimage';
 import EasyImage from '../../src/easyimage';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
 
 
-import getToken from '../_utils/gettoken';
+import { TOKEN_URL } from '@ckeditor/ckeditor5-cloudservices/tests/_utils/cloudservices-config';
 
 
-getToken()
-	.then( token => {
-		return ClassicEditor
-			.create( document.querySelector( '#editor' ), {
-				cloudServices: {
-					token
-				},
-				plugins: [ ArticlePluginSet, EasyImage ],
-				toolbar: [ 'headings', 'undo', 'redo', 'insertImage' ],
-				image: {
-					toolbar: [ 'imageStyleFull', 'imageStyleSide', '|', 'imageTextAlternative' ]
-				}
-			} )
-			.then( editor => {
-				window.editor = editor;
-			} );
+ClassicEditor
+	.create( document.querySelector( '#editor' ), {
+		cloudServices: {
+			tokenUrl: TOKEN_URL
+		},
+		plugins: [ ArticlePluginSet, EasyImage ],
+		toolbar: [ 'headings', 'undo', 'redo', 'insertImage' ],
+		image: {
+			toolbar: [ 'imageStyleFull', 'imageStyleSide', '|', 'imageTextAlternative' ]
+		}
+	} )
+	.then( editor => {
+		window.editor = editor;
 	} )
 	} )
 	.catch( err => {
 	.catch( err => {
 		console.error( err.stack );
 		console.error( err.stack );