aboutsummaryrefslogtreecommitdiffstats
path: root/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/uuid.ts
blob: 58756b63817f3c9c03d3cf7c17926a26cfdd51cc (plain)
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
/* tslint:disable:array-type member-access variable-name */
export class UUID {
  constructor() {
      //
  }

  static UUID(): string {
	if (typeof(window.crypto) !== 'undefined' &&
		typeof(window.crypto.getRandomValues) !== 'undefined') {
      // If we have a cryptographically secure PRNG, use that
		let buf: Uint16Array = new Uint16Array(8);
		window.crypto.getRandomValues(buf);
		return (
			this.pad4(buf[0]) + this.pad4(buf[1]) + '-' + this.pad4(buf[2]) +
			'-' + this.pad4(buf[3]) + '-' + this.pad4(buf[4]) + '-' +
			this.pad4(buf[5]) + this.pad4(buf[6]) + this.pad4(buf[7]));
	} else {
      // Otherwise, just use Math.random
		return this.random4() + this.random4() + '-' + this.random4() + '-' +
			this.random4() + '-' + this.random4() + '-' + this.random4() +
			this.random4() + this.random4();
	}
  }

  private static pad4(num: number): string {
	let ret: string = num.toString(16);
	while (ret.length < 4) {
		ret = '0' + ret;
	}
	return ret;
  }

  private static random4(): string {
	return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
  }
}