Last active
July 22, 2018 15:20
-
-
Save fahrradflucht/0a9776132869dbc9d369c90ef29f20fc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as crypto from "crypto"; | |
import fetch, { Headers } from "node-fetch"; | |
import { promisify } from "util"; | |
const pbkdf2 = promisify(crypto.pbkdf2); | |
const endpoint = "https://sync.standardnotes.org"; | |
const email = process.env.SN_EMAIL || ""; | |
const uip = process.env.SN_PASSWORD || ""; | |
interface AuthParamsResponse { | |
identifier: string; | |
pw_salt: string; | |
pw_cost: number; | |
pw_nonce: string; | |
version: string; | |
pw_func: string; | |
pw_alg: string; | |
pw_key_size: number; | |
} | |
async function login(): Promise<void> { | |
const { | |
pw_cost, | |
pw_nonce, | |
version | |
}: AuthParamsResponse = await fetch( | |
`${endpoint}/auth/params?email=${email}` | |
).then(res => res.json()); | |
const salt = crypto | |
.createHash("sha256") | |
.update([email, "SF", version, pw_cost, pw_nonce].join(":"), "utf8") | |
.digest() | |
.toString("hex"); | |
const key = (await pbkdf2(uip, salt, pw_cost, 768, "sha512")).toString("hex"); | |
const splitLength = key.length / 3; | |
const pw = key.slice(0, splitLength); | |
// const mk = key.slice(splitLength, splitLength * 2); | |
// const ak = key.slice(splitLength * 2, splitLength * 3); | |
const token = await fetch(`${endpoint}/auth/sign_in`, { | |
method: "POST", | |
headers: new Headers({ | |
"Content-Type": "application/json" | |
}), | |
body: JSON.stringify({ | |
password: pw, | |
email: "[email protected]" | |
}) | |
}).then(res => res.json()); | |
console.log(token); | |
} | |
login().catch(console.error); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sounds good. PS I don't get notified of comments inside gists or commits for whatever reason. So be sure to update the original issue if you come across any other issues.