BlueskyAPI #5
1 changed files with 40 additions and 26 deletions
|
@ -1,36 +1,50 @@
|
||||||
|
// Component 1/7
|
||||||
export async function GetPDSWellKnown() {
|
export async function GetPDSWellKnown() {
|
||||||
let Data = await fetch("https://bsky.social/.well-known/oauth-authorization-server", {method: "GET"})
|
let Data = await fetch("https://bsky.social/.well-known/oauth-authorization-server", {method: "GET"})
|
||||||
.then((response) => response.json());
|
.then((response) => response.json());
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function CreatePKCE() {
|
// Component 2/7
|
||||||
let CodeVerifier = new Uint8Array(100);
|
// Many thanks to https://github.com/tonyxu-io/pkce-generator. It was the base for this code.
|
||||||
let CodeChallenge;
|
export async function CreatePKCECodeVerifier() {
|
||||||
|
// Generate some Numbers
|
||||||
// generate a random string of characters.
|
let Numbers = new Uint8Array(32);
|
||||||
crypto.getRandomValues(CodeVerifier);
|
crypto.getRandomValues(Numbers);
|
||||||
console.log(CodeVerifier);
|
// Generate a random string of characters.
|
||||||
CodeVerifier = Uint8Array.toBase64({alphabet: "Base64url"});
|
let CodeVerifier = "";
|
||||||
// Now generate a code challenge
|
for (let i in Numbers) {
|
||||||
CodeChallenge = sha256(CodeVerifier.toBase64({alphabet: "Base64url"}));
|
CodeVerifier += String.fromCharCode(Numbers[i]);
|
||||||
console.log(CodeVerifier);
|
}
|
||||||
console.log(CodeChallenge);
|
// Put this random string into Base64URL format.
|
||||||
|
CodeVerifier = btoa(CodeVerifier).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
||||||
|
return CodeVerifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stolen from elsewhere
|
export async function CreatePKCECodeChallenge(CodeVerifier) {
|
||||||
// Firefox snippet
|
// Generate a code challenge with the code verifier.
|
||||||
|
// This is done by first SHA256 encrypting the CodeVerifier, then putting the outputted string into Base64URL format.
|
||||||
|
let CodeChallenge = btoa(await sha256(CodeVerifier)).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
||||||
|
return CodeChallenge;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stolen from elsewhere.
|
||||||
|
// Firefox snippet; Slightly edited.
|
||||||
async function sha256(message) {
|
async function sha256(message) {
|
||||||
// encode as UTF-8
|
// encode as UTF-8
|
||||||
const msgBuffer = new TextEncoder().encode(message);
|
const MessageBuffer = new TextEncoder().encode(message);
|
||||||
|
|
||||||
// hash the message
|
// hash the message
|
||||||
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
|
const HashBuffer = await crypto.subtle.digest('SHA-256', MessageBuffer);
|
||||||
|
|
||||||
// convert ArrayBuffer to Array
|
// convert ArrayBuffer to Array
|
||||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
const HashArray = Array.from(new Uint8Array(HashBuffer));
|
||||||
|
|
||||||
// convert bytes to hex string
|
// convert this hashArray to a string
|
||||||
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
let string = "";
|
||||||
return hashHex;
|
for (let i in HashArray) {
|
||||||
|
string += String.fromCharCode(HashArray[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return string;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue