import { expect } from "chai"; import * as _ from "lodash"; import * as from from "from2"; import * as os from "os"; import { inspect } from "util"; import { TokenEntry } from "../../../src/util/token-store"; import * as keychainParser from "../../../src/util/token-store/osx/osx-keychain-parser"; import * as tokenStore from "../../../src/util/token-store/osx/osx-token-store"; type DoneFunc = {(err?: Error): void}; // // Sample keychain data to test parser // /* tslint:disable:no-octal-literal */ const entries = { entry1: 'keychain: "/Users/chris/Library/Keychains/login.keychain"\n' + 'class: "genp"' + "\n" + "attributes:" + "\n" + ' 0x00000007 ="azure"' + "\n" + " 0x00000008 =" + "\n" + ' "acct"="a:b:c:d"' + "\n" + ' "cdat"=0x32303134303630323137323535385A00 "20140602172558Z\\000"' + "\n" + ' "crtr"=' + "\n" + ' "cusi"=' + "\n" + ' "desc"="active directory token"' + "\n" + ' "gena"=' + "\n" + ' "icmt"=' + "\n" + ' "invi"=' + "\n" + ' "mdat"=0x32303134303630323137323535385A00 "20140602172558Z\\000"' + "\n" + ' "nega"=' + "\n" + ' "prot"=' + "\n" + ' "scrp"=' + "\n" + ' "svce"="azure"' + "\n" + ' "port"=0x00000000' + "\n" + ' "type"=' + "\n", entry2: 'keychain: "/Users/chris/Library/Keychains/login.keychain"' + "\n" + "class: 0x00000008" + "\n" + "attributes:" + "\n" + ' 0x00000007 ="azure"' + "\n" + " 0x00000008 =" + "\n" + ' "acct"="e:f:g:h"' + "\n" + ' "cdat"=0x32303134303630323137323735385A00 "20140602172758Z\\000"' + "\n" + ' "crtr"=' + "\n" + ' "cusi"=' + "\n" + ' "desc"="active directory token"' + "\n" + ' "gena"=' + "\n" + ' "icmt"=' + "\n" + ' "invi"=' + "\n" + ' "mdat"=0x32303134303630323137323735385A00 "20140602172758Z\\000"' + "\n" + ' "nega"=' + "\n" + ' "prot"=' + "\n" + ' "scrp"=' + "\n" + ' "svce"="azure"' + "\n" + ' "type"=' + "\n", badEntry: 'keychain: "/Users/kundanap/Library/Keychains/login.keychain"' + "\n" + "class: 0x00000008" + "\n" + "attributes:" + "\n" + ' "acct"="bad guy"' + "\n" + ' "snbr"=""63X"' + "\n" + ' "cenc"=0x00000003' + "\n", superbadEntry: 'keychain: "/Users/kundanap/Library/Keychains/login.keychain"' + "\n" + "attributes:" + "\n" + ' "acct"="super bad guy"' + "\n" + "\n" + ' 0x12321432 ="$@#%^^$^^&^&%^63X"' }; describe("storing complete data in keychain", function () { if (os.platform() !== "darwin") { console.log("These tests only run on Mac OSX"); return; } const keychain = tokenStore.createOsxTokenStore(); const testUser = "appcenter-user"; const testPassword = "Sekret!"; const testTokenId = "1234abcd"; before(() => { return keychain.set(testUser, { id: testTokenId, token: testPassword }); }); after(() => keychain.remove(testUser)); it("should have at least one item", async function (): Promise { const c = await keychain.list().count().toPromise(); expect(c).to.be.above(0); }); it("should have expected entry", async function (): Promise { const entry: TokenEntry = await keychain.get(testUser); console.log(`Entry is ${inspect(entry)}`); expect(entry).to.be.not.null; expect(entry.key).to.equal(testUser); expect(entry.accessToken.id).to.equal(testTokenId); expect(entry.accessToken.token).to.equal(testPassword); }); }); describe("storing data without a tokenId in keychain", function () { if (os.platform() !== "darwin") { console.log("These tests only run on Mac OSX"); return; } const keychain = tokenStore.createOsxTokenStore(); const testUser = "appcenter-user"; const testPassword = "Sekret!"; before(() => { return keychain.set(testUser, { id: null, token: testPassword }); }); after(() => keychain.remove(testUser)); it("should have at least one item", async function (): Promise { const c = await keychain.list().count().toPromise(); expect(c).to.be.above(0); }); it("should have expected entry", async function (): Promise { const entry: TokenEntry = await keychain.get(testUser); console.log(`Entry is ${inspect(entry)}`); expect(entry).to.be.not.null; expect(entry.key).to.equal(testUser); expect(entry.accessToken.id).to.equal(undefined); expect(entry.accessToken.token).to.equal(testPassword); }); });