UNPKG

@jbrowse/plugin-authentication

Version:

JBrowse 2 Authentication

56 lines (55 loc) 2.12 kB
import { ConfigurationReference, getConf } from '@jbrowse/core/configuration'; import { InternetAccount } from '@jbrowse/core/pluggableElementTypes/models'; import { getRoot, types } from '@jbrowse/mobx-state-tree'; import { ExternalTokenEntryForm } from "./ExternalTokenEntryForm.js"; const stateModelFactory = (configSchema) => { return InternetAccount.named('ExternalTokenInternetAccount') .props({ type: types.literal('ExternalTokenInternetAccount'), configuration: ConfigurationReference(configSchema), }) .views(self => ({ get validateWithHEAD() { return getConf(self, 'validateWithHEAD'); }, })) .actions(self => ({ getTokenFromUser(resolve, reject) { const { session } = getRoot(self); session.queueDialog((doneCallback) => [ ExternalTokenEntryForm, { 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) { let errorMessage; try { errorMessage = await response.text(); } catch (error) { errorMessage = ''; } throw new Error(`Token could not be validated — ${response.status} ${errorMessage ? ` (${errorMessage})` : ''}`); } return token; }, })); }; export default stateModelFactory;