Commit cd6afd35 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

user without proper rights cannot attempt to modify configuration paramters,...

user without proper rights cannot attempt to modify configuration paramters, and sees only client side parameters
parent 09f1d2c2
......@@ -4,6 +4,8 @@ const fs = require('fs');
const path = require('path');
const request = require('request');
const Promise = require('bluebird');
function listFiles(dir, filelist) {
var fs = fs || require('fs'),
files = fs.readdirSync(dir);
......@@ -34,9 +36,13 @@ function extractLogin(file) {
var filename = file.replace(path.dirname(file), "").substr(1);
if (filename.endsWith("MOCK_TOKEN_ID&")) {
return "anonymous";
}
if (filename.endsWith("ADMIN_TOKEN_ID&")) {
} else if (filename.endsWith("ADMIN_TOKEN_ID&")) {
return "admin";
} else if (filename.endsWith("NO_ACCESS_USER_TOKEN_ID&")) {
// noinspection SpellCheckingInspection
return "noaccessuser";
} else if (filename.indexOf("TOKEN_ID&") >= 0) {
throw new Error("Unknown token in file: " + filename);
}
return undefined;
}
......@@ -113,13 +119,17 @@ function getAuthToken(login) {
url += "&password=";
} else if (login === "admin") {
url += "&password=admin";
} else if (login === "noaccessuser") {
url += "&password=noaccessuser";
} else if (login !== undefined) {
throw new Error("Unknown user: " + login);
}
return new Promise(function (resolve, reject) {
var params = {
method: "GET",
url: url
};
request(params, function (error, response, body) {
request(params, function (error, response) {
if (error) {
reject(new Error(error.message));
} else if (response.statusCode !== 200) {
......@@ -131,8 +141,6 @@ function getAuthToken(login) {
}).then(function (value) {
return Promise.resolve(value[0]);
});
}
function executeQuery(query) {
......
......@@ -631,3 +631,6 @@ table.dataTable tbody td.no_padding, table.dataTable thead th.no_padding {
padding-right: 3px;
}
button:disabled {
color: graytext;
}
......@@ -217,6 +217,18 @@ Configuration.prototype.getPrivilegeTypes = function () {
return this._privilegeTypes;
};
Configuration.prototype.getPrivilegeType = function (name) {
var self = this;
var privilegeTypes = self.getPrivilegeTypes();
for (var i = 0; i < privilegeTypes.length; i++) {
var type = privilegeTypes[i];
if (type.getName() === name) {
return type;
}
}
return null;
};
Configuration.prototype.getMiriamTypeByName = function (name) {
var self = this;
for (var i = 0; i < self._miriamTypes.length; i++) {
......
......@@ -133,10 +133,14 @@ ServerConnector.sendGetRequest = function (url, description) {
function isSessionExpiredError(error) {
if (error instanceof NetworkError) {
if (error.statusCode === HttpStatus.FORBIDDEN) {
if (error.content.indexOf('"reason":"Invalid token"') >= 0) {
return true;
}
if (error.content.indexOf('"reason":"Missing cookie') >= 0) {
if (typeof error.content === 'string' || error.content instanceof String) {
if (error.content.indexOf('"reason":"Invalid token"') >= 0) {
return true;
}
if (error.content.indexOf('"reason":"Missing cookie') >= 0) {
return true;
}
} else if (error.content.reason === "Invalid token" || error.content.reason === 'Missing cookie') {
return true;
}
}
......@@ -357,7 +361,6 @@ ServerConnector.getSubmapConnectionsUrl = function (queryParams, filterParams) {
};
ServerConnector.getPublicationsUrl = function (queryParams, filterParams) {
filterParams.start = filterParams.start || 0;
filterParams.length = filterParams.length || 10;
......@@ -1693,17 +1696,17 @@ ServerConnector.addOverlay = function (params) {
});
};
ServerConnector.addOverlayFromString = function(name, content) {
ServerConnector.addOverlayFromString = function (name, content) {
var fileName = name + ".txt";
var overlay = new DataOverlay({
name: name,
description: "",
filename: fileName
});
var fileContent = new TextEncoder("UTF8").encode(content);
var fileContent = new TextEncoder("UTF8").encode(content);
self = this;
return self.getProjectId().then(function (projectid) {
return ServerConnector.uploadFile({
filename: fileName,
content: fileContent
......@@ -1713,7 +1716,7 @@ ServerConnector.addOverlayFromString = function(name, content) {
overlay: overlay,
projectId: self.getProjectId()
});
}).then(function (result) {
}).then(function (result) {
return result;
});
});
......
......@@ -3,6 +3,7 @@
/* exported Promise*/
var AbstractAdminPanel = require('./AbstractAdminPanel');
var PrivilegeType = require('../../map/data/PrivilegeType');
var Functions = require('../../Functions');
var GuiConnector = require('../../GuiConnector');
......@@ -92,24 +93,29 @@ ConfigurationAdminPanel.prototype._createGui = function () {
ConfigurationAdminPanel.prototype.init = function () {
var self = this;
return ServerConnector.getConfiguration().then(function (configuration) {
self.setOptions(configuration.getOptions());
var user;
return ServerConnector.getLoggedUser().then(function (result) {
user = result;
return ServerConnector.getConfiguration();
}).then(function (configuration) {
var privilege = configuration.getPrivilegeType(PrivilegeType.CONFIGURATION_MANAGE);
self.setOptions(configuration.getOptions(), user.hasPrivilege(privilege));
});
};
ConfigurationAdminPanel.prototype.setOptions = function (options) {
ConfigurationAdminPanel.prototype.setOptions = function (options, editable) {
var self = this;
var dataTable = $($("[name='configurationTable']", self.getElement())[0]).DataTable();
var data = [];
for (var i = 0; i < options.length; i++) {
var option = options[i];
var rowData = self.optionToTableRow(option);
var rowData = self.optionToTableRow(option, editable);
data.push(rowData);
}
dataTable.clear().rows.add(data).draw();
};
ConfigurationAdminPanel.prototype.optionToTableRow = function (option) {
ConfigurationAdminPanel.prototype.optionToTableRow = function (option, editable) {
var value = option.getValue();
var row = [];
var editOption;
......@@ -139,7 +145,11 @@ ConfigurationAdminPanel.prototype.optionToTableRow = function (option) {
}
row[0] = option.getCommonName();
row[1] = editOption;
row[2] = "<button name='saveOption' data='" + option.getType() + "'>SAVE</button>";
if (editable) {
row[2] = "<button name='saveOption' data='" + option.getType() + "'>SAVE</button>";
} else {
row[2] = "<button name='saveOption' data='" + option.getType() + "' disabled>SAVE</button>";
}
return row;
};
......
......@@ -16,33 +16,35 @@ function PrivilegeType(data, name) {
PrivilegeType.prototype = Object.create(ObjectWithListeners.prototype);
PrivilegeType.prototype.constructor = PrivilegeType;
PrivilegeType.prototype.setObjectType = function(objectType) {
PrivilegeType.CONFIGURATION_MANAGE = 'CONFIGURATION_MANAGE';
PrivilegeType.prototype.setObjectType = function (objectType) {
this._objectType = objectType;
};
PrivilegeType.prototype.getObjectType = function() {
PrivilegeType.prototype.getObjectType = function () {
return this._objectType;
};
PrivilegeType.prototype.setValueType = function(valueType) {
PrivilegeType.prototype.setValueType = function (valueType) {
this._valueType = valueType;
};
PrivilegeType.prototype.getValueType = function() {
PrivilegeType.prototype.getValueType = function () {
return this._valueType;
};
PrivilegeType.prototype.setCommonName = function(commonName) {
PrivilegeType.prototype.setCommonName = function (commonName) {
this._commonName = commonName;
};
PrivilegeType.prototype.getCommonName = function() {
PrivilegeType.prototype.getCommonName = function () {
return this._commonName;
};
PrivilegeType.prototype.setName = function(name) {
PrivilegeType.prototype.setName = function (name) {
this._name = name;
};
PrivilegeType.prototype.getName = function() {
PrivilegeType.prototype.getName = function () {
return this._name;
};
......
......@@ -174,7 +174,8 @@ User.prototype.getPrivilegeValue = function (type, objectId) {
}
}
return 0;
}
};
User.prototype.privilegesToExport = function (configuration) {
var self = this;
var result = {};
......
......@@ -7,21 +7,41 @@ var ConfigurationType = require('../../../../main/js/ConfigurationType');
var ServerConnector = require('../../ServerConnector-mock');
var logger = require('../../logger');
var assert = require('assert');
var chai = require('chai');
var assert = chai.assert;
describe('ConfigurationAdminPanel', function () {
it('init', function () {
var mapTab;
return ServerConnector.getConfiguration().then(function (configuration) {
mapTab = new ConfigurationAdminPanel({
element: testDiv,
configuration: configuration
describe('init', function () {
it('admin', function () {
helper.loginAsAdmin();
var mapTab;
return ServerConnector.getConfiguration().then(function (configuration) {
mapTab = new ConfigurationAdminPanel({
element: testDiv,
configuration: configuration
});
return mapTab.init();
}).then(function () {
assert.equal(0, logger.getWarnings().length);
assert.notOk($("[name='saveOption']", testDiv).prop('disabled'));
return mapTab.destroy();
});
});
it('no access', function () {
helper.loginWithoutAccess();
var mapTab;
return ServerConnector.getConfiguration().then(function (configuration) {
mapTab = new ConfigurationAdminPanel({
element: testDiv,
configuration: configuration
});
return mapTab.init();
}).then(function () {
assert.equal(0, logger.getWarnings().length);
assert.ok($("[name='saveOption']", testDiv).prop('disabled'));
return mapTab.destroy();
});
return mapTab.init();
}).then(function () {
assert.equal(0, logger.getWarnings().length);
return mapTab.destroy();
});
});
it('saveOption', function () {
......
......@@ -447,6 +447,13 @@ Helper.prototype.loginAsAdmin = function () {
ServerConnector.getSessionData().setToken("ADMIN_TOKEN_ID");
};
Helper.prototype.loginWithoutAccess = function () {
// noinspection SpellCheckingInspection
ServerConnector.getSessionData().setLogin("noaccessuser");
ServerConnector.getSessionData().setToken("NO_ACCESS_USER_TOKEN_ID");
};
Helper.prototype.triggerJqueryEvent = function (element, eventType) {
var domElements = $("*");
var promises = [];
......
{"elementAnnotations":{"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0},"publications":0,"reactionAnnotations":{"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0}}
\ No newline at end of file
{"elementAnnotations":{"BiGG_COMPARTMENT":0,"BiGG_METABOLITE":0,"BiGG_REACTIONS":0,"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0},"publications":0,"reactionAnnotations":{"BiGG_COMPARTMENT":0,"BiGG_METABOLITE":0,"BiGG_REACTIONS":0,"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0}}
\ No newline at end of file
{"elementAnnotations":{"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0},"publications":0,"reactionAnnotations":{"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0}}
\ No newline at end of file
{"elementAnnotations":{"BiGG_COMPARTMENT":0,"BiGG_METABOLITE":0,"BiGG_REACTIONS":0,"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0},"publications":0,"reactionAnnotations":{"BiGG_COMPARTMENT":0,"BiGG_METABOLITE":0,"BiGG_REACTIONS":0,"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":0,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0}}
\ No newline at end of file
{"elementAnnotations":{"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":2,"GO":0,"HGNC":1,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":1,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":1,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":4,"REFSEQ":5,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0},"publications":1,"reactionAnnotations":{"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":1,"REACTOME":2,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0}}
\ No newline at end of file
{"elementAnnotations":{"BiGG_COMPARTMENT":0,"BiGG_METABOLITE":0,"BiGG_REACTIONS":0,"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":2,"GO":0,"HGNC":1,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":1,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":1,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":0,"REACTOME":4,"REFSEQ":5,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0},"publications":1,"reactionAnnotations":{"BiGG_COMPARTMENT":0,"BiGG_METABOLITE":0,"BiGG_REACTIONS":0,"BRENDA":0,"CAS":0,"CAZY":0,"CCDS":0,"CHEBI":0,"CHEMSPIDER":0,"CHEMBL_COMPOUND":0,"CHEMBL_TARGET":0,"COG":0,"DOI":0,"DRUGBANK":0,"DRUGBANK_TARGET_V4":0,"EC":0,"ENSEMBL":0,"ENSEMBL_PLANTS":0,"ENTREZ":0,"GO":0,"HGNC":0,"HGNC_SYMBOL":0,"HMDB":0,"INTERPRO":0,"KEGG_COMPOUND":0,"KEGG_GENES":0,"KEGG_ORTHOLOGY":0,"KEGG_PATHWAY":0,"KEGG_REACTION":0,"MESH_2012":0,"MI_R_BASE_SEQUENCE":0,"MI_R_BASE_MATURE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"MGD":0,"OMIM":0,"PANTHER":0,"PDB":0,"PFAM":0,"PHARM":0,"PUBCHEM":0,"PUBCHEM_SUBSTANCE":0,"PUBMED":1,"REACTOME":2,"REFSEQ":0,"SGD":0,"STITCH":0,"STRING":0,"TAIR_LOCUS":0,"TAXONOMY":0,"TOXICOGENOMIC_CHEMICAL":0,"UNIGENE":0,"UNIPROT":0,"UNIPROT_ISOFORM":0,"UNKNOWN":0,"WIKIDATA":0,"WIKIPATHWAYS":0,"WIKIPEDIA":0,"WORM_BASE":0}}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment