| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 | import { ReactiveCache } from '/imports/reactiveCache';import { TAPi18n } from '/imports/i18n';BlazeLayout.setRoot('body');let alreadyCheck = 1;let isCheckDone = false;let counter = 0;const validator = {  set(obj, prop, value) {    if (prop === 'state' && value !== 'signIn') {      $('.at-form-authentication').hide();    } else if (prop === 'state' && value === 'signIn') {      $('.at-form-authentication').show();    }    // The default behavior to store the value    obj[prop] = value;    // Indicate success    return true;  },};Template.userFormsLayout.onCreated(function () {  const templateInstance = this;  templateInstance.currentSetting = new ReactiveVar();  templateInstance.isLoading = new ReactiveVar(false);  if (!ReactiveCache.getCurrentUser()?.profile) {    Meteor.call('isOidcRedirectionEnabled', (_, result) => {      if (result) {        AccountsTemplates.options.socialLoginStyle = 'redirect';        options = {          loginStyle: AccountsTemplates.options.socialLoginStyle,        };        Meteor.loginWithOidc(options);      }    });    Meteor.subscribe('setting', {      onReady() {        templateInstance.currentSetting.set(ReactiveCache.getCurrentSetting());        return this.stop();      },    });  }});Template.userFormsLayout.onRendered(() => {  Meteor.call('getAuthenticationsEnabled', (_, result) => {    let enabledAuthenticationMethods = [ 'password' ]; // we show/hide this based on isPasswordLoginEnabled    if (result) {      Object.keys(result).forEach((m) => {        if (result[m]) enabledAuthenticationMethods.push(m);      });    }    Meteor.call('isPasswordLoginEnabled', (_, result) => {      if (result) {        $('.at-pwd-form').show();      }    });    Meteor.call('isDisableRegistration', (_, result) => {      if (result) {        $('.at-signup-link').hide();      }    });    Meteor.call('isDisableForgotPassword', (_, result) => {      if (result) {        $('.at-pwd-link').hide();      }    });    if (enabledAuthenticationMethods.indexOf('oauth2') !== -1) {      // TODO find better way to run this code once the oauth2 UI is injected in the DOM      (function waitForElementAndShow() {        if (!$('.at-oauth')[0]) return setTimeout(waitForElementAndShow, 100);        $('.at-oauth').show();      })();    }    AccountsTemplates.state.form.keys = new Proxy(      AccountsTemplates.state.form.keys,      validator,    );    EscapeActions.executeAll();  });});Template.userFormsLayout.helpers({  isLegalNoticeLinkExist() {    const currSet = Template.instance().currentSetting.get();    if (currSet && currSet !== undefined && currSet != null) {      return currSet.legalNotice !== undefined && currSet.legalNotice.trim() != "";    }    else      return false;  },  getLegalNoticeWithWritTraduction() {    let spanLegalNoticeElt = $("#legalNoticeSpan");    if (spanLegalNoticeElt != null && spanLegalNoticeElt != undefined) {      spanLegalNoticeElt.html(TAPi18n.__('acceptance_of_our_legalNotice', {}));    }    let atLinkLegalNoticeElt = $("#legalNoticeAtLink");    if (atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined) {      atLinkLegalNoticeElt.html(TAPi18n.__('legalNotice', {}));    }    return true;  },  isLoading() {    return Template.instance().isLoading.get();  },  afterBodyStart() {    return currentSetting.customHTMLafterBodyStart;  },  beforeBodyEnd() {    return currentSetting.customHTMLbeforeBodyEnd;  },  languages() {    return TAPi18n.getSupportedLanguages()      .map(({ tag, name }) => ({ tag: tag, name }))      .sort((a, b) => {        if (a.name === b.name) {          return 0;        } else {          return a.name > b.name ? 1 : -1;        }      });  },  isCurrentLanguage() {    const curLang = TAPi18n.getLanguage();    return this.tag === curLang;  },});Template.userFormsLayout.events({  'change .js-userform-set-language'(event) {    const tag = $(event.currentTarget).val();    TAPi18n.setLanguage(tag);    event.preventDefault();  },  'click #at-btn'(event, templateInstance) {    if (FlowRouter.getRouteName() === 'atSignIn') {      templateInstance.isLoading.set(true);      authentication(event, templateInstance).then(() => {        templateInstance.isLoading.set(false);      });    }    isCheckDone = false;  },  'click #at-signUp'(event, templateInstance) {    isCheckDone = false;  },  'DOMSubtreeModified #at-oidc'(event) {    if (alreadyCheck <= 2) {      let currSetting = ReactiveCache.getCurrentSetting();      let oidcBtnElt = $("#at-oidc");      if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {        let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;        if (alreadyCheck == 1) {          alreadyCheck++;          oidcBtnElt.html("");        }        else {          alreadyCheck++;          oidcBtnElt.html(htmlvalue);        }      }    }    else {      alreadyCheck = 1;    }  },  'DOMSubtreeModified .at-form'(event) {    if (alreadyCheck <= 2 && !isCheckDone) {      if (document.getElementById("at-oidc") != null) {        let currSetting = ReactiveCache.getCurrentSetting();        let oidcBtnElt = $("#at-oidc");        if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {          let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;          if (alreadyCheck == 1) {            alreadyCheck++;            oidcBtnElt.html("");          }          else {            alreadyCheck++;            isCheckDone = true;            oidcBtnElt.html(htmlvalue);          }        }      }    }    else {      alreadyCheck = 1;    }  },});Template.defaultLayout.events({  'click .js-close-modal': () => {    Modal.close();  },});async function authentication(event, templateInstance) {  const match = $('#at-field-username_and_email').val();  const password = $('#at-field-password').val();  if (!match || !password) return undefined;  const result = await getAuthenticationMethod(    templateInstance.currentSetting.get(),    match,  );  if (result === 'password') return undefined;  // Stop submit #at-pwd-form  event.preventDefault();  event.stopImmediatePropagation();  switch (result) {    case 'ldap':      return new Promise(resolve => {        Meteor.loginWithLDAP(match, password, function () {          resolve(FlowRouter.go('/'));        });      });    case 'saml':      return new Promise(resolve => {        const provider = Meteor.settings.public.SAML_PROVIDER;        Meteor.loginWithSaml(          {            provider,          },          function () {            resolve(FlowRouter.go('/'));          },        );      });    case 'cas':      return new Promise(resolve => {        Meteor.loginWithCas(match, password, function () {          resolve(FlowRouter.go('/'));        });      });    default:      return undefined;  }}function getAuthenticationMethod(  { displayAuthenticationMethod, defaultAuthenticationMethod },  match,) {  if (displayAuthenticationMethod) {    return $('.select-authentication').val();  }  return getUserAuthenticationMethod(defaultAuthenticationMethod, match);}function getUserAuthenticationMethod(defaultAuthenticationMethod, match) {  return new Promise(resolve => {    try {      Meteor.subscribe('user-authenticationMethod', match, {        onReady() {          const user = Users.findOne();          const authenticationMethod = user            ? user.authenticationMethod            : defaultAuthenticationMethod;          resolve(authenticationMethod);        },      });    } catch (error) {      resolve(defaultAuthenticationMethod);    }  });}
 |