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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 1x 1x 1x 1x 1x 1x 12x 12x 12x 12x 12x 1x 11x 11x 6x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 1x 1x 5x | import dns from 'dns'; import dbg from 'debug'; import crypto from 'crypto'; import { sysinfo } from '../../../lib/api'; const debug = dbg('node-expose-sspi:client'); /** * Get the SPN the same way Chrome/Firefox or IE does. * * Links: * - getting the domain name: https://stackoverflow.com/questions/8498592/extract-hostname-name-from-string * - algo of IE : https://support.microsoft.com/en-us/help/4551934/kerberos-failures-in-internet-explorer * * @param {string} url * @returns {string} */ export async function getSPNFromURI(url: string): Promise<string> { const msDomainName = sysinfo.GetComputerNameEx('ComputerNameDnsDomain'); Iif (msDomainName.length === 0) { debug('Client running on a host that is not part of a Microsoft domain'); return 'whatever'; } const matches = /^https?:\/\/([^/:?#]+)(?:[/:?#]|$)/i.exec(url); const urlDomain = matches && matches[1]; if (!urlDomain) { throw new Error('url is not well parsed. url=' + url); } debug('urlDomain: ', urlDomain); if (['localhost', '127.0.0.1'].includes(urlDomain)) { return 'HTTP/localhost'; } // needs urlFQDN for the DNS resolver. const urlFQDN = urlDomain.includes('.') ? urlDomain : urlDomain + '.' + msDomainName; let hostname = urlFQDN; try { while (true) { const records = await dns.promises.resolve(hostname, 'CNAME'); debug('records', records); if (records.length === 0) { break; } hostname = records[0]; } } catch (e) { debug('DNS error', e); } const result = 'HTTP/' + hostname; debug('result: ', result); return result; } export function encodeBase64(str: string) { const buff = Buffer.from(str); return buff.toString('base64'); } export function md5(str: string) { return crypto.createHash('md5').update(str).digest('hex'); } |