Skip to content

Commit

Permalink
feat: API connector for public api CMS-2763
Browse files Browse the repository at this point in the history
  • Loading branch information
simon-scherzinger committed May 8, 2017
1 parent c86672e commit 7cd2080
Show file tree
Hide file tree
Showing 5 changed files with 402 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/DataManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import TemplateList from './resources/datamanager/TemplateList';
import TemplateResource from './resources/datamanager/TemplateResource';
import DMStatsList from './resources/datamanager/DMStatsList';

const urls = {
export const urls = {
live: 'https://datamanager.entrecode.de/',
stage: 'https://datamanager.cachena.entrecode.de/',
nightly: 'https://datamanager.buffalo.entrecode.de/',
Expand Down
82 changes: 82 additions & 0 deletions src/PublicAPI.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import halfred from 'halfred';

import { get } from './helper';
import { urls } from './DataManager';
import TokenStoreFactory from './TokenStore';
import Core from './Core';

/**
* API connector for public APIs.
*/
export default class PublicAPI extends Core {
/**
* Creates a new instance of {@link PublicAPI} API connector.
*
* @param {string} id shortID of the desired DataManager.
* @param {environment?} environment the environment to connect to.
*/
constructor(id, environment) {
if (environment && !(environment in urls)) {
throw new Error('invalid environment specified');
}
if (!id || !/[a-f0-9]{8}/i.test(id)) {
throw new Error('must provide valid shortID');
}

super(`${urls[environment || 'live']}/api/${id}`);
this.environment = environment || 'live';
this.tokenStore = TokenStoreFactory(environment || 'live');
this.shortID = id;

this.resource = null;

['dataManagerID', 'title', 'description', 'locales',
'defaultLocale', 'models', 'account', 'config']
.forEach((property) => {
Object.defineProperty(this, property, {
enumerable: true,
get: () => this.resource[property],
});
});
}

/**
* Resolves the root response of ths PublicAPI DataManager
*
* @param {boolean?} reload whether or not to force reload
* @returns {Promise<PublicAPI>} returns this
*/
resolve(reload) {
if (!reload && this.resource) {
return Promise.resolve(this);
}

return get(this.environment, this.newRequest())
.then(([res, traversal]) => {
this.resource = halfred.parse(res);
this.traversal = traversal;

return this;
});
}

/**
* Load the list of models. Will resolve to a object with modelTitle as key and {@link Model} as
* value.
*
* @param {boolean?} reload whether or not to force reload
* @returns {Promise<any>} Object with models
*/
modelList(reload) {
return this.resolve(reload)
.then(() => {
const out = {};
this.models.forEach((model) => {
// TODO proper model object
out[model.title] = model;
});
this.modelCache = out;
return out;
});
}
}
182 changes: 182 additions & 0 deletions test/mocks/public-dm-root.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
{
"dataManagerID": "48e18a34-cf64-4f4a-bc47-45323a7f0e44",
"title": "Test DM",
"description": "hier kann alles getestet werden",
"locales": [
"de-DE"
],
"defaultLocale": "de-DE",
"models": [
{
"title": "allFields",
"description": "",
"modelID": "00e6b675-ddca-4930-9696-d2e735a484b4",
"titleField": "_id",
"hexColor": "#159588",
"_ref": "https://datamanager.entrecode.de/model?modelID=00e6b675-ddca-4930-9696-d2e735a484b4"
},
{
"title": "contains_entries",
"description": "",
"modelID": "5a215d0a-84a4-468e-98ba-8673dfb2cc17",
"titleField": "_id",
"hexColor": "#d23738",
"_ref": "https://datamanager.entrecode.de/model?modelID=5a215d0a-84a4-468e-98ba-8673dfb2cc17"
},
{
"title": "entry",
"description": "kjhgfd",
"modelID": "e3d2c523-d70f-4adc-a445-cd076e865b97",
"titleField": "_id",
"hexColor": "#d23738",
"_ref": "https://datamanager.entrecode.de/model?modelID=e3d2c523-d70f-4adc-a445-cd076e865b97"
},
{
"title": "json_entry",
"description": "",
"modelID": "bc56120c-9ad9-4f41-84aa-f475d81cf50a",
"titleField": "json",
"hexColor": "#d23738",
"_ref": "https://datamanager.entrecode.de/model?modelID=bc56120c-9ad9-4f41-84aa-f475d81cf50a"
},
{
"title": "model_with_underscore",
"description": "ghk",
"modelID": "573a12b8-3e58-4ebb-94b7-1cd2063f4f27",
"titleField": "_id",
"hexColor": "#d23738",
"_ref": "https://datamanager.entrecode.de/model?modelID=573a12b8-3e58-4ebb-94b7-1cd2063f4f27"
},
{
"title": "muffin",
"description": "",
"modelID": "3adfe4c0-588f-4e5b-bc5e-d69162ed2a40",
"titleField": "title",
"hexColor": "#d23738",
"_ref": "https://datamanager.entrecode.de/model?modelID=3adfe4c0-588f-4e5b-bc5e-d69162ed2a40"
},
{
"title": "withaAsset",
"description": "",
"modelID": "5a5a9103-2218-4979-9ec5-d8173a442cbb",
"titleField": "_id",
"hexColor": "#d23738",
"_ref": "https://datamanager.entrecode.de/model?modelID=5a5a9103-2218-4979-9ec5-d8173a442cbb"
}
],
"account": {
"accountID": "49518e7d-a8b0-444a-b829-7fe3c86810ab",
"email": null,
"pending": false,
"hasPassword": false,
"oauth": [],
"roles": [
{
"roleID": "6c7dd95c-2dee-4f97-8e9e-ff272118a2c0",
"name": "Anonymous Users",
"label": ""
}
]
},
"config": {},
"_links": {
"curies": {
"name": "01bd8e08",
"href": "https://datamanager.entrecode.de/api/doc/01bd8e08/relation/{rel}",
"templated": true
},
"self": {
"name": "Test DM",
"href": "https://datamanager.entrecode.de/api/01bd8e08"
},
"01bd8e08:allFields": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/allFields",
"href": "https://datamanager.entrecode.de/api/01bd8e08/allFields{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,asset,assets,assets~,boolean,created,createdFrom,createdTo,datetime,datetimeFrom,datetimeTo,decimal,decimalFrom,decimalTo,email,email~,entries,entries~,entry,formattedText~,id,location,locationFrom,locationTo,modified,modifiedFrom,modifiedTo,number,numberFrom,numberTo,page,phone,phone~,private,size,sort,text,text~,url,url~}",
"name": "allFields list",
"templated": true
},
"01bd8e08:allFields/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/allFields",
"name": "allFields permissions"
},
"01bd8e08:contains_entries": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/contains_entries",
"href": "https://datamanager.entrecode.de/api/01bd8e08/contains_entries{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,ad,ad~,created,createdFrom,createdTo,entries,entries~,id,modified,modifiedFrom,modifiedTo,page,private,size,sort}",
"name": "contains_entries list",
"templated": true
},
"01bd8e08:contains_entries/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/contains_entries",
"name": "contains_entries permissions"
},
"01bd8e08:entry": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/entry",
"href": "https://datamanager.entrecode.de/api/01bd8e08/entry{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,created,createdFrom,createdTo,id,modified,modifiedFrom,modifiedTo,page,private,size,sort,title,title~}",
"name": "entry list",
"templated": true
},
"01bd8e08:entry/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/entry",
"name": "entry permissions"
},
"01bd8e08:json_entry": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/json_entry",
"href": "https://datamanager.entrecode.de/api/01bd8e08/json_entry{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,created,createdFrom,createdTo,id,modified,modifiedFrom,modifiedTo,page,private,size,sort}",
"name": "json_entry list",
"templated": true
},
"01bd8e08:json_entry/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/json_entry",
"name": "json_entry permissions"
},
"01bd8e08:model_with_underscore": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/model_with_underscore",
"href": "https://datamanager.entrecode.de/api/01bd8e08/model_with_underscore{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,created,createdFrom,createdTo,id,modified,modifiedFrom,modifiedTo,page,private,size,sort}",
"name": "model_with_underscore list",
"templated": true
},
"01bd8e08:model_with_underscore/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/model_with_underscore",
"name": "model_with_underscore permissions"
},
"01bd8e08:muffin": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/muffin",
"href": "https://datamanager.entrecode.de/api/01bd8e08/muffin{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,account,created,createdFrom,createdTo,description~,id,modified,modifiedFrom,modifiedTo,page,price,priceFrom,priceTo,private,size,sort,title,title~}",
"name": "muffin list",
"templated": true
},
"01bd8e08:muffin/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/muffin",
"name": "muffin permissions"
},
"01bd8e08:withaAsset": {
"profile": "https://datamanager.entrecode.de/api/schema/01bd8e08/withaAsset",
"href": "https://datamanager.entrecode.de/api/01bd8e08/withaAsset{?_created,_createdFrom,_createdTo,_creator,_fields,_id,_levels,_modified,_modifiedFrom,_modifiedTo,_private,asset,created,createdFrom,createdTo,id,modified,modifiedFrom,modifiedTo,page,private,size,sort}",
"name": "withaAsset list",
"templated": true
},
"01bd8e08:withaAsset/_permissions": {
"href": "https://datamanager.entrecode.de/api/01bd8e08/_permissions/withaAsset",
"name": "withaAsset permissions"
},
"ec:api/assets": {
"profile": "https://entrecode.de/schema/assets",
"href": "https://datamanager.entrecode.de/asset/01bd8e08{?assetID,created,createdFrom,createdTo,created~,creator,dataManagerID,deleted,deletedFrom,deletedTo,deleted~,page,size,sort,tag,title,title~,type,type~}",
"templated": true
},
"01bd8e08:_auth/anonymous": {
"name": "Register new anonymous account (POST)",
"href": "https://datamanager.entrecode.de/api/01bd8e08/_auth/account{?validUntil}",
"templated": true
},
"01bd8e08:_auth/email-available": {
"name": "Test if given email is already registered",
"href": "https://datamanager.entrecode.de/api/01bd8e08/_auth/email{?email}",
"templated": true
},
"01bd8e08:_auth/public-key.pem": {
"name": "Public key for JWT validation",
"href": "https://datamanager.entrecode.de/api/01bd8e08/_auth/public-key.pem"
}
}
}
Loading

0 comments on commit 7cd2080

Please sign in to comment.