@jbrowse/plugin-authentication
Version:
JBrowse 2 Authentication
55 lines (54 loc) • 2.12 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const configuration_1 = require("@jbrowse/core/configuration");
const models_1 = require("@jbrowse/core/pluggableElementTypes/models");
const mobx_state_tree_1 = require("mobx-state-tree");
const HTTPBasicLoginForm_1 = require("./HTTPBasicLoginForm");
const util_1 = require("../util");
const stateModelFactory = (configSchema) => {
return models_1.InternetAccount.named('HTTPBasicInternetAccount')
.props({
type: mobx_state_tree_1.types.literal('HTTPBasicInternetAccount'),
configuration: (0, configuration_1.ConfigurationReference)(configSchema),
})
.views(self => ({
get validateWithHEAD() {
return (0, configuration_1.getConf)(self, 'validateWithHEAD');
},
}))
.actions(self => ({
getTokenFromUser(resolve, reject) {
const { session } = (0, mobx_state_tree_1.getRoot)(self);
session.queueDialog((doneCallback) => [
HTTPBasicLoginForm_1.HTTPBasicLoginForm,
{
internetAccountId: self.internetAccountId,
handleClose: (token) => {
if (token) {
resolve(token);
}
else {
reject(new Error('User cancelled entry'));
}
doneCallback();
},
},
]);
},
async validateToken(token, location) {
if (!self.validateWithHEAD) {
return token;
}
const newInit = self.addAuthHeaderToInit({ method: 'HEAD' }, token);
const response = await fetch(location.uri, newInit);
if (!response.ok) {
throw new Error(await (0, util_1.getResponseError)({
response,
reason: 'Error validating token',
}));
}
return token;
},
}));
};
exports.default = stateModelFactory;
;