mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
|  * Minio Cloud Storage (C) 2016 Minio, Inc.
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *     http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| import SuperAgent from 'superagent-es6-promise';
 | |
| import url from 'url'
 | |
| import Moment from 'moment'
 | |
| 
 | |
| export default class JSONrpc {
 | |
|   constructor(params) {
 | |
|     this.endpoint = params.endpoint
 | |
|     this.namespace = params.namespace
 | |
|     this.version = '2.0';
 | |
|     const parsedUrl = url.parse(this.endpoint)
 | |
|     this.host = parsedUrl.hostname
 | |
|     this.path = parsedUrl.path
 | |
|     this.port = parsedUrl.port
 | |
| 
 | |
|     switch (parsedUrl.protocol) {
 | |
|       case 'http:': {
 | |
|         this.scheme = 'http'
 | |
|         if (parsedUrl.port === 0) {
 | |
|           this.port = 80
 | |
|         }
 | |
|         break
 | |
|       }
 | |
|       case 'https:': {
 | |
|         this.scheme = 'https'
 | |
|         if (parsedUrl.port === 0) {
 | |
|           this.port = 443
 | |
|         }
 | |
|         break
 | |
|       }
 | |
|       default: {
 | |
|         throw new Error('Unknown protocol: ' + parsedUrl.protocol)
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   // call('Get', {id: NN, params: [...]}, function() {})
 | |
|   call(method, options, token) {
 | |
|     if (!options) {
 | |
|       options = {}
 | |
|     }
 | |
|     if (!options.id) {
 | |
|       options.id = 1;
 | |
|     }
 | |
|     if (!options.params) {
 | |
|       options.params = {};
 | |
|     }
 | |
|     const dataObj = {
 | |
|       id: options.id,
 | |
|       jsonrpc: this.version,
 | |
|       params: options.params ? options.params : {},
 | |
|       method: this.namespace ? this.namespace + '.' + method : method
 | |
|     }
 | |
|     let requestParams = {
 | |
|       host: this.host,
 | |
|       port: this.port,
 | |
|       path: this.path,
 | |
|       scheme: this.scheme,
 | |
|       method: 'POST',
 | |
|       headers: {
 | |
|         'Content-Type': 'application/json',
 | |
|         'x-amz-date': Moment().utc().format('YYYYMMDDTHHmmss') + 'Z'
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (token) {
 | |
|       requestParams.headers.Authorization = 'Bearer ' + token
 | |
|     }
 | |
| 
 | |
|     let req = SuperAgent.post(this.endpoint)
 | |
|     for (let key in requestParams.headers) {
 | |
|       req.set(key, requestParams.headers[key])
 | |
|     }
 | |
|     // req.set('Access-Control-Allow-Origin', 'http://localhost:8080')
 | |
|     return req.send(JSON.stringify(dataObj)).then(res => res)
 | |
|   }
 | |
| }
 |