All files / src/sso domain.ts

95% Statements 19/20
75% Branches 9/12
100% Functions 3/3
95% Lines 19/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 491x   1x             1x 1x 1x 1x                 1x 10x     1x         10x 10x 10x       10x 10x   10x   10x 10x 10x 10x        
import { sspi, sysinfo, adsi } from '../../lib/api';
import { IADsContainer, IDirectorySearch, IDispatch } from '../../lib/adsi';
import { openADConnection, closeADConnection } from './adConnection';
 
/**
 * Get the domain (Microsoft domain) or hostname (workgroup) of this machine.
 *
 * @returns {string} domain name
 */
export function getDefaultDomain(): string {
  const str = sspi.GetUserNameEx('NameSamCompatible');
  const domain = str.split('\\')[0];
  return domain;
}
 
/**
 * Want to know if your computer has joined a Microsoft Windows domain ?
 *
 * @export
 * @returns {boolean} true if this computer joined a domain, false otherwise.
 */
export function isOnDomain(): boolean {
  return sysinfo.GetComputerNameEx('ComputerNameDnsDomain').length > 0;
}
 
export function isActiveDirectoryReachable(): boolean {
  let gc!: IADsContainer;
  let element!: IDispatch;
  let ds!: IDirectorySearch;
 
  try {
    openADConnection();
    gc = adsi.ADsOpenObjectSync<IADsContainer>({
      binding: 'GC:',
      riid: 'IID_IADsContainer',
    });
    element = gc.Next();
    ds = element.QueryInterface('IID_IDirectorySearch');
  } catch (e) {
    return false;
  } finally {
    ds?.Release();
    element?.Release();
    gc?.Release();
    closeADConnection();
  }
  return true;
}