DISCORD INTEGRATION FOR SOME GOD FORSAKEN REASON
This commit is contained in:
parent
4f6298d380
commit
dd0225fea4
5 changed files with 56 additions and 18 deletions
|
@ -95,15 +95,16 @@ export default async function Home({
|
|||
<p>Hosted by <a href={`/jams/user/${jamOwner.id}`}>{`${jamOwner.username}@${jamOwner.instance}`}</a></p>
|
||||
<p>{jam.description}</p>
|
||||
<ConditionalNull condition={existingUser == null}>
|
||||
<h2>Join with the Fediverse</h2>
|
||||
<p>If you'd like to participate in this jam, you should join!</p>
|
||||
<p>You'll also be able to participate an any future jams should they come to fruition.</p>
|
||||
<p>To join with GitHub instead, enter "github.com".</p>
|
||||
<h2>Join abtmtr.link Jams</h2>
|
||||
<p>If you'd like to participate in any jam, you should join!</p>
|
||||
<p><small>To join with the Fediverse, enter your instance domain.<br />
|
||||
To join with GitHub, enter "github.com".<br />
|
||||
To join with Discord, enter "discord.com".</small></p>
|
||||
<form action="/jams/oauth/login">
|
||||
<input name="instance" placeholder="Instance URL (e.g. "social.besties.house" or "woem.men")" type="text" />
|
||||
<input name="instance" placeholder="Domain (e.g. "social.besties.house" or "woem.men")" type="text" />
|
||||
<input type="submit" />
|
||||
</form>
|
||||
<p><small>Tested on GitHub, Mastodon, GoToSocial, Pleroma, and Misskey</small></p>
|
||||
<p><small>Tested on Discord, GitHub, Mastodon, GoToSocial, Pleroma, and Misskey</small></p>
|
||||
</ConditionalNull>
|
||||
<ConditionalNull condition={existingUser != null}>
|
||||
<div>
|
||||
|
|
|
@ -30,7 +30,7 @@ export async function GET(request: NextRequest) {
|
|||
// Get temporary user token
|
||||
let tUserToken = await mauth.getApplicationToken(existingInstanceApp, code);
|
||||
|
||||
console.log(tUserToken);
|
||||
console.log("a", tUserToken);
|
||||
|
||||
if (tUserToken == null) return new Response('', {
|
||||
status: 500
|
||||
|
@ -64,12 +64,27 @@ export async function GET(request: NextRequest) {
|
|||
|
||||
// Impersonation check
|
||||
|
||||
if (instance == "discord.com") {
|
||||
if (tUserExists.application.id != existingInstanceApp.client_id) return new Response(`URL is invalid`, {
|
||||
status: 401
|
||||
});
|
||||
} else {
|
||||
if (!tUserExists.url.includes(instance) && !tUserExists.url.includes(tUserExists.acct)) return new Response(`URL is invalid`, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
|
||||
let currentUser;
|
||||
if (instance == "github.com") currentUser = {
|
||||
if (instance == "discord.com") currentUser = {
|
||||
id: nanoid(21),
|
||||
instance,
|
||||
username: tUserExists.user.username,
|
||||
admin: false,
|
||||
url: `https://discord.com/users/${tUserExists.user.id}`,
|
||||
banned: false, // Discord should be on tier1.
|
||||
joined: Date.now()
|
||||
} as UserTable;
|
||||
else if (instance == "github.com") currentUser = {
|
||||
id: nanoid(21),
|
||||
instance,
|
||||
username: tUserExists.login,
|
||||
|
|
|
@ -82,6 +82,8 @@ export async function GET(request: NextRequest) {
|
|||
cookieStore.set("instance", instance, {
|
||||
expires: Date.now() + 604800000
|
||||
});
|
||||
if (instance == "discord.com")
|
||||
return Response.redirect(`https://${instance}/oauth2/authorize?response_type=code&client_id=${existingInstanceApp.client_id}&redirect_uri=${existingInstanceApp.redirect_uri}&scope=identify&state=${Math.random().toString(36).slice(2)}&integration_type=1`)
|
||||
if (instance == "github.com")
|
||||
return Response.redirect(`https://${instance}/login/oauth/authorize?client_id=${existingInstanceApp.client_id}&redirect_uri=${existingInstanceApp.redirect_uri}&scope=&state=${Math.random().toString(36).slice(2)}`)
|
||||
return Response.redirect(`https://${instance}/oauth/authorize?response_type=code&client_id=${existingInstanceApp.client_id}&redirect_uri=${existingInstanceApp.redirect_uri}&scope=read`);
|
||||
|
|
|
@ -60,14 +60,16 @@ export default async function Home({
|
|||
<p>These serve many purposes. To create a community bond, to help creatives find their way, and most importantly, <s>to make me popular</s>. X3</p>
|
||||
<p>Enjoy!</p>
|
||||
<ConditionalNull condition={existingUser == null}>
|
||||
<h2>Join with the Fediverse</h2>
|
||||
<h2>Join abtmtr.link Jams</h2>
|
||||
<p>If you'd like to participate in any jam, you should join!</p>
|
||||
<p>To join with GitHub, enter "github.com".</p>
|
||||
<p><small>To join with the Fediverse, enter your instance domain.<br />
|
||||
To join with GitHub, enter "github.com".<br />
|
||||
To join with Discord, enter "discord.com".</small></p>
|
||||
<form action="/jams/oauth/login">
|
||||
<input name="instance" placeholder="Instance URL (e.g. "social.besties.house" or "woem.men")" type="text" />
|
||||
<input name="instance" placeholder="Domain (e.g. "social.besties.house" or "woem.men")" type="text" />
|
||||
<input type="submit" />
|
||||
</form>
|
||||
<p><small>Tested on GitHub, Mastodon, GoToSocial, Pleroma, and Misskey</small></p>
|
||||
<p><small>Tested on Discord, GitHub, Mastodon, GoToSocial, Pleroma, and Misskey</small></p>
|
||||
</ConditionalNull>
|
||||
<ConditionalNull condition={existingUser != null}>
|
||||
<p>Logged in as <a href={`/jams/user/${existingUser?.id}`}>{existingUser?.username}@{existingUser?.instance}</a> (<a href="/jams/oauth/logout">Logout</a>)</p>
|
||||
|
|
|
@ -76,12 +76,22 @@ export class MastoAuth {
|
|||
if (this.instance != "github.com")
|
||||
formData.append('grant_type', 'authorization_code');
|
||||
formData.append('code', code);
|
||||
if (this.instance != "github.com")
|
||||
if (this.instance == "discord.com")
|
||||
formData.append('scope', 'identify');
|
||||
else if (this.instance != "github.com")
|
||||
formData.append('scope', 'read');
|
||||
|
||||
let appRequest;
|
||||
try {
|
||||
if (this.instance == "github.com") {
|
||||
if (this.instance == "discord.com") {
|
||||
appRequest = await fetch(`https://${this.instance}/api/v10/oauth2/token`, {
|
||||
body: formData,
|
||||
method: "post",
|
||||
headers: {
|
||||
"Accept": "application/json"
|
||||
}
|
||||
});
|
||||
} else if (this.instance == "github.com") {
|
||||
appRequest = await fetch(`https://${this.instance}/login/oauth/access_token`, {
|
||||
body: formData,
|
||||
method: "post",
|
||||
|
@ -96,6 +106,7 @@ export class MastoAuth {
|
|||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -113,7 +124,13 @@ export class MastoAuth {
|
|||
async verifyUser(auth: string) {
|
||||
let appRequest;
|
||||
try {
|
||||
if (this.instance == "github.com") {
|
||||
if (this.instance == "discord.com") {
|
||||
appRequest = await fetch(`https://${this.instance}/api/v10/oauth2/@me`, {
|
||||
headers: {
|
||||
"Authorization": auth
|
||||
}
|
||||
});
|
||||
} else if (this.instance == "github.com") {
|
||||
appRequest = await fetch(`https://api.${this.instance}/user`, {
|
||||
headers: {
|
||||
"Authorization": auth
|
||||
|
@ -127,6 +144,7 @@ export class MastoAuth {
|
|||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue