visibility settings
This commit is contained in:
parent
6fc5a5a6b8
commit
6022823654
6 changed files with 88 additions and 13 deletions
|
@ -13,9 +13,17 @@
|
|||
<body style="margin: 0px; text-align: center;">
|
||||
<header>
|
||||
<h1>Post</h1>
|
||||
<textarea cols="50" rows="25" class="text" placeholder="status here..."></textarea>
|
||||
<p class="button">POST!</p>
|
||||
</header>
|
||||
<textarea cols="50" rows="25" class="Text" placeholder="status here..."></textarea>
|
||||
<div>
|
||||
<select class="PostVisibility">
|
||||
<option value="Public">Public Post</option>
|
||||
<option value="Quiet">Quiet Public Post</option>
|
||||
<option value="Friend">Friends Only Post</option>
|
||||
<option value="Private">Private Post</option>
|
||||
</select>
|
||||
</div>
|
||||
<p class="Button">POST!</p>
|
||||
<p onclick="window.location.href = window.location.origin"><b>Back</b></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
<p class="Local">Toggle Local</p>
|
||||
<p class="Remote">Toggle Remote</p>
|
||||
<p class="Login Mastodon"><em>Login to Mastodon</em></p>
|
||||
<input type="text" class="WebInput Mastodon" placeholder="The website your account is on."/>
|
||||
<input type="text" class="WebInput Mastodon" placeholder="Instance Website"/>
|
||||
<p class="Logout Mastodon" style="visibility: hidden;"><em>Logout of Mastodon</em></p>
|
||||
<p class="Login Bluesky"><em>Login to Bluesky</em></p>
|
||||
<input type="text" class="WebInput Bluesky" />
|
||||
<input type="text" class="WebInput Bluesky" placeholder="Instance Website" />
|
||||
<p class="Logout Bluesky" style="visibility: hidden;"><em>Logout of Bluesky</em></p>
|
||||
<p onclick="window.location.href = window.location.origin"><b>Back</b></p>
|
||||
</body>
|
||||
|
|
|
@ -2,7 +2,7 @@ import * as Variables from "./Variables.js";
|
|||
|
||||
export async function GetBlueskyDID(PDS, Handle) {
|
||||
let DPoP = await ClientDPoPPDS("GET", PDS + "/xrpc/com.atproto.identity.resolveHandle?handle=" + Handle);
|
||||
let request = fetch(PDS + "/xrpc/com.atproto.identity.resolveHandle?handle=" + Handle, { method: "GET", headers: {"Authorization": "DPoP " + localStorage.getItem(Veriables.BlueskyAccessToken), "DPoP": DPoP}});
|
||||
let request = fetch(PDS + "/xrpc/com.atproto.identity.resolveHandle?handle=" + Handle, { method: "GET", headers: {"Authorization": "DPoP " + localStorage.getItem(Variables.BlueskyAccessToken), "DPoP": DPoP}});
|
||||
let body = await request.then((response) => response.json());
|
||||
let status = await request.then((response) => response.status);
|
||||
let header = await request.then((response) => response.headers.get("dpop-nonce"));
|
||||
|
@ -46,6 +46,37 @@ export async function CreatePost(PDS, DID, Text) {
|
|||
return body;
|
||||
}
|
||||
|
||||
export async function SetThreadGate(PDS, DID, Post, VisibilitySettings) {
|
||||
|
||||
let Json = {
|
||||
"$type": "app.bsky.feed.threadgate",
|
||||
"post": Post,
|
||||
"allow": VisibilitySettings,
|
||||
"createdAt": new Date(Date.now()).toISOString()
|
||||
}
|
||||
let RequestBody = {
|
||||
"repo": DID,
|
||||
"collection": "app.bsky.feed.threadgate",
|
||||
"record": Json,
|
||||
"rkey": Post.split("/")[Post.split("/").length - 1]
|
||||
}
|
||||
let DPoP = await ClientDPoPPDS("POST", PDS + "/xrpc/com.atproto.repo.createRecord");
|
||||
let request = fetch(PDS + "/xrpc/com.atproto.repo.createRecord", { body: JSON.stringify(RequestBody), method: "POST", headers: {"Content-Type": "application/json", "Authorization": "DPoP " + localStorage.getItem(Variables.BlueskyAccessToken), "DPoP": DPoP}});
|
||||
let body = await request.then((response) => response.json());
|
||||
let status = await request.then((response) => response.status);
|
||||
let header = await request.then((response) => response.headers.get("dpop-nonce"));
|
||||
if (status == 401) {
|
||||
if (body.message.includes("DPoP nonce mismatch")) {
|
||||
await localStorage.setItem(Variables.BlueskyNonce, header);
|
||||
}
|
||||
if (body.message.includes("claim timestamp check failed")) {
|
||||
await RefreshTokens();
|
||||
}
|
||||
body = await SetThreadGate(PDS, DID, Post, RKey, VisibilitySettings);
|
||||
}
|
||||
return body;
|
||||
}
|
||||
|
||||
// Component 1/4
|
||||
export async function GetPDSWellKnown() {
|
||||
return await fetch("https://bsky.social/.well-known/oauth-authorization-server", {method: "GET"})
|
||||
|
@ -194,7 +225,7 @@ export async function GainTokens() {
|
|||
let WellKnown = await GetPDSWellKnown();
|
||||
|
||||
// Check to see if something's a miss...
|
||||
if ((document.location.href.split("state=").length > 1 && document.location.href.split("iss=").length > 1 && document.location.href.split("code=").length > 1) && localStorage.getItem(Variables.BlueskyPKCEVerifier) != null && localStorage.getItem(Variables.BlueskyAccessToken == null)) {
|
||||
if ((document.location.href.split("state=").length > 1 && document.location.href.split("iss=").length > 1 && document.location.href.split("code=").length > 1) && localStorage.getItem(Variables.BlueskyPKCEVerifier) != null && localStorage.getItem(Variables.BlueskyAccessToken) == null) {
|
||||
// Create varaibles, be aware of waits because of internet.
|
||||
let DPoP = await ClientDPoPToken("POST", WellKnown.token_endpoint);
|
||||
let code = document.location.href.split("code=")[1];
|
||||
|
|
|
@ -64,11 +64,11 @@ export async function GetNotifications() {
|
|||
}
|
||||
|
||||
// Make a status
|
||||
export async function CreateStatus(Text) {
|
||||
export async function CreateStatus(Text, Visibility = "public") {
|
||||
// Check for a token
|
||||
if (localStorage.getItem(Variables.MastodonAccessToken) != null) {
|
||||
let Website = localStorage.getItem(Variables.MastodonWebsite);
|
||||
return await fetch(Website + "/api/v1/statuses?status=" + Text , {method: "POST", headers: {"Authorization": localStorage.getItem(Variables.MastodonTokenType) + " " + localStorage.getItem(Variables.MastodonAccessToken)}})
|
||||
return await fetch(Website + "/api/v1/statuses?status=" + Text + "&visibility=" + Visibility, {method: "POST", headers: {"Authorization": localStorage.getItem(Variables.MastodonTokenType) + " " + localStorage.getItem(Variables.MastodonAccessToken)}})
|
||||
.then((response) => response.json());
|
||||
}
|
||||
}
|
||||
|
|
43
JS/post.js
43
JS/post.js
|
@ -4,8 +4,9 @@ import * as TumblrAPI from "./TumblrAPI.js";
|
|||
import * as Variables from "./Variables.js";
|
||||
|
||||
// Elements.
|
||||
let PostButton = document.getElementsByClassName("button")[0];
|
||||
let InputArea = document.getElementsByClassName("text")[0];
|
||||
let PostButton = document.getElementsByClassName("Button")[0];
|
||||
let VisibilityDropdown = document.getElementsByClassName("PostVisibility")[0];
|
||||
let InputArea = document.getElementsByClassName("Text")[0];
|
||||
|
||||
// Clicking the beeg POST button.
|
||||
PostButton.onclick = (event) => {
|
||||
|
@ -14,14 +15,48 @@ PostButton.onclick = (event) => {
|
|||
|
||||
async function Post() {
|
||||
let Text = InputArea.value;
|
||||
let Visible = VisibilityDropdown.value;
|
||||
// Mastodon posting.
|
||||
if (localStorage.getItem(Variables.MastodonAccessToken) != null) {
|
||||
MastodonAPI.CreateStatus(Text);
|
||||
let TempVisible;
|
||||
switch(Visible) {
|
||||
case "Public":
|
||||
TempVisible = "public";
|
||||
break;
|
||||
case "Quiet":
|
||||
TempVisible = "unlisted";
|
||||
break;
|
||||
case "Friend":
|
||||
TempVisible = "private";
|
||||
break;
|
||||
case "Private":
|
||||
TempVisible = "direct";
|
||||
break;
|
||||
}
|
||||
MastodonAPI.CreateStatus(Text, TempVisible);
|
||||
}
|
||||
// Bluesky posting.
|
||||
if (localStorage.getItem(Variables.BlueskyAccessToken) != null) {
|
||||
let TempVisible;
|
||||
switch(Visible) {
|
||||
case "Public":
|
||||
TempVisible = undefined;
|
||||
break;
|
||||
case "Quiet":
|
||||
TempVisible = undefined;
|
||||
break;
|
||||
case "Friend":
|
||||
TempVisible = [{"$type": "app.bsky.feed.threadgate#followingRule"}, {"$type": "app.bsky.feed.threadgate#followerRule"}];
|
||||
break;
|
||||
case "Private":
|
||||
TempVisible = [];
|
||||
break;
|
||||
}
|
||||
let DID = await BlueskyAPI.GetBlueskyDID("https://woodear.us-west.host.bsky.network", "crowdedgames.group");
|
||||
BlueskyAPI.CreatePost("https://woodear.us-west.host.bsky.network", DID.did, Text);
|
||||
let Post = await BlueskyAPI.CreatePost("https://woodear.us-west.host.bsky.network", DID.did, Text);
|
||||
console.log(Post);
|
||||
let ThreadGate = await BlueskyAPI.SetThreadGate("https://woodear.us-west.host.bsky.network", DID.did, Post.uri, TempVisible);
|
||||
console.log(ThreadGate);
|
||||
}
|
||||
InputArea.value = "";
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ LocalButton.onclick = (event) => {
|
|||
|
||||
RemoteButton.onclick = (event) => {
|
||||
// Toggle the Variable
|
||||
if (localStorage.getItem("Romote") != null) {
|
||||
if (localStorage.getItem("Remote") != null) {
|
||||
localStorage.removeItem("Remote");
|
||||
} else {
|
||||
localStorage.setItem("Remote", "true");
|
||||
|
@ -51,6 +51,7 @@ MastodonLogoutButton.onclick = (event) => {
|
|||
localStorage.removeItem(Variables.MastodonClientSecret);
|
||||
localStorage.removeItem(Variables.MastodonAccessToken);
|
||||
localStorage.removeItem(Variables.MastodonTokenType);
|
||||
localStorage.removeItem(Variables.MastodonWebsite);
|
||||
document.location.href = Origin;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue