From 0e089ef8ce23d60f438d2933ec2e9bf9dd2f1fda Mon Sep 17 00:00:00 2001 From: Peng-YM <1048217874pengym@gmail.com> Date: Tue, 5 Jul 2022 16:38:08 +0800 Subject: [PATCH] feat: Fetch avatar from GitHub automatically --- backend/package.json | 2 +- backend/src/restful/settings.js | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/backend/package.json b/backend/package.json index 526a92b..39cbdc9 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.5.4", + "version": "2.6.0", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/restful/settings.js b/backend/src/restful/settings.js index 0bb177b..c9e7018 100644 --- a/backend/src/restful/settings.js +++ b/backend/src/restful/settings.js @@ -3,7 +3,9 @@ import { success } from './response'; import $ from '@/core/app'; export default function register($app) { - if (!$.read(SETTINGS_KEY)) $.write({}, SETTINGS_KEY); + const settings = $.read(SETTINGS_KEY); + if (!settings) $.write({}, SETTINGS_KEY); + if (!settings.avatarUrl) updateGitHubAvatar(); $app.route('/api/settings').get(getSettings).patch(updateSettings); } @@ -12,12 +14,35 @@ function getSettings(req, res) { success(res, settings); } -function updateSettings(req, res) { +async function updateSettings(req, res) { const settings = $.read(SETTINGS_KEY); const newSettings = { ...settings, ...req.body, }; $.write(newSettings, SETTINGS_KEY); + await updateGitHubAvatar(); success(res, newSettings); } + +async function updateGitHubAvatar() { + const settings = $.read(SETTINGS_KEY); + const username = settings.githubUser; + if (username) { + try { + const data = await $.http + .get({ + url: `https://api.github.com/users/${username}`, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.141 Safari/537.36', + }, + }) + .then((resp) => JSON.parse(resp.body)); + settings.avatarUrl = data['avatar_url']; + $.write(settings, SETTINGS_KEY); + } catch (e) { + $.error('Failed to fetch GitHub avatar for User: ' + username); + } + } +}