From 302da092484ff2b53a8286e118e2d3f10eb6c850 Mon Sep 17 00:00:00 2001
From: Markus Unterwaditzer <markus-github@unterwaditzer.net>
Date: Wed, 27 Nov 2024 16:32:44 +0100
Subject: [PATCH] fix: Add basic user-agent to all mastodon-bound requests
 (#2277)

---
 server/api/[server]/oauth/[origin].ts | 5 +++++
 server/utils/shared.ts                | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/server/api/[server]/oauth/[origin].ts b/server/api/[server]/oauth/[origin].ts
index 08bfa8b6..646f9fde 100644
--- a/server/api/[server]/oauth/[origin].ts
+++ b/server/api/[server]/oauth/[origin].ts
@@ -1,5 +1,7 @@
 import { stringifyQuery } from 'ufo'
 
+import { defaultUserAgent } from '~/server/utils/shared'
+
 export default defineEventHandler(async (event) => {
   let { server, origin } = getRouterParams(event)
   server = server.toLocaleLowerCase().trim()
@@ -24,6 +26,9 @@ export default defineEventHandler(async (event) => {
   try {
     const result: any = await $fetch(`https://${server}/oauth/token`, {
       method: 'POST',
+      headers: {
+        'user-agent': defaultUserAgent,
+      },
       body: {
         client_id: app.client_id,
         client_secret: app.client_secret,
diff --git a/server/utils/shared.ts b/server/utils/shared.ts
index 7fa79c5e..ff33af62 100644
--- a/server/utils/shared.ts
+++ b/server/utils/shared.ts
@@ -13,6 +13,7 @@ import { env } from '#build-info'
 // @ts-expect-error virtual import
 import { driver } from '#storage-config'
 
+import { version } from '~/config/env'
 import { APP_NAME } from '~/constants'
 import type { AppInfo } from '~/types'
 
@@ -48,9 +49,14 @@ export function getRedirectURI(origin: string, server: string) {
   return `${origin}/api/${server}/oauth/${encodeURIComponent(origin)}`
 }
 
+export const defaultUserAgent = `${APP_NAME}/${version}`
+
 async function fetchAppInfo(origin: string, server: string) {
   const app: AppInfo = await $fetch(`https://${server}/api/v1/apps`, {
     method: 'POST',
+    headers: {
+      'user-agent': defaultUserAgent,
+    },
     body: {
       client_name: APP_NAME + (env !== 'release' ? ` (${env})` : ''),
       website: 'https://elk.zone',