Update sponsor check

This commit is contained in:
Elio Struyf
2023-11-13 16:34:58 +01:00
parent 24fb1347df
commit 2e536a4de7
2 changed files with 40 additions and 52 deletions
+40 -51
View File
@@ -1,6 +1,6 @@
import { commands, ExtensionContext } from 'vscode';
import { authentication, commands, ExtensionContext } from 'vscode';
import { COMMAND_NAME, CONTEXT } from '../constants';
import { Extension } from '../helpers';
import { Extension, Logger } from '../helpers';
import { Credentials } from '../services/Credentials';
import fetch from 'node-fetch';
import { Dashboard } from './Dashboard';
@@ -8,70 +8,59 @@ import { SettingsListener } from '../listeners/panel';
import { PanelProvider } from '../panelWebView/PanelProvider';
export class Backers {
private static creds: Credentials | null = null;
public static async init(context: ExtensionContext) {
Backers.creds = new Credentials();
await Backers.creds.initialize(context, Backers.tryUsernameCheck);
Backers.tryUsernameCheck();
Backers.checkSponsor();
context.subscriptions.push(
commands.registerCommand(COMMAND_NAME.authenticate, async () => {
Backers.tryUsernameCheck();
await authentication.getSession('github', ['read:user'], { createIfNone: true });
Backers.checkSponsor();
})
);
}
public static async tryUsernameCheck() {
try {
const username = await Backers.getUsername();
Backers.validate(username || '');
} catch (e) {
Backers.validate('');
}
}
public static async getUsername() {
const octokit = await Backers.creds?.getOctokit();
const user = await octokit?.users.getAuthenticated();
if (user?.data?.login) {
return user?.data?.login;
}
return;
}
public static async validate(username: string) {
public static async checkSponsor() {
const ext = Extension.getInstance();
const githubAuth = await authentication.getSession('github', ['read:user'], { silent: true });
if (githubAuth && githubAuth.accessToken) {
try {
const isBeta = ext.isBetaVersion();
const response = await fetch(
`https://${isBeta ? `beta.` : ``}frontmatter.codes/api/v2/backers`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
accept: 'application/json'
},
body: JSON.stringify({
token: githubAuth.accessToken
})
}
);
if (!username) {
ext.setState(CONTEXT.backer, undefined, 'global');
}
if (response.ok) {
const prevData = await ext.getState<boolean>(CONTEXT.backer, 'global');
await ext.setState(CONTEXT.backer, true, 'global');
const isBeta = ext.isBetaVersion();
if (!prevData) {
const PanelView = PanelProvider.getInstance();
if (PanelView.visible) {
SettingsListener.getSettings();
}
const response = await fetch(
`https://${isBeta ? `beta.` : ``}frontmatter.codes/api/backers?backer=${username}`
);
if (response.ok) {
const prevData = await ext.getState<boolean>(CONTEXT.backer, 'global');
await ext.setState(CONTEXT.backer, true, 'global');
if (!prevData) {
const PanelView = PanelProvider.getInstance();
if (PanelView.visible) {
SettingsListener.getSettings();
}
if (Dashboard.isOpen) {
Dashboard.reload();
if (Dashboard.isOpen) {
Dashboard.reload();
}
}
} else {
ext.setState(CONTEXT.backer, false, 'global');
}
} catch (e) {
Logger.error(`Failed to check if user is a sponsor: ${(e as Error).message}`);
}
} else {
ext.setState(CONTEXT.backer, false, 'global');
ext.setState(CONTEXT.backer, undefined, 'global');
}
}
}
-1
View File
@@ -29,7 +29,6 @@ import {
SETTING_SLUG_PREFIX,
SETTING_SLUG_SUFFIX,
SETTING_SLUG_UPDATE_FILE_NAME,
SETTING_TAXONOMY_CONTENT_TYPES,
SETTING_TAXONOMY_CUSTOM,
SETTING_TAXONOMY_FIELD_GROUPS,
SETTING_GIT_ENABLED,