Compare commits
15 Commits
f97310c01d
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
3974999684 | ||
|
4fab2183ce | ||
|
c6ccdd83a8 | ||
|
d544eeccb6 | ||
|
51fd602cd0 | ||
|
65b46c0195 | ||
|
abc3156149 | ||
|
991acbfb7b | ||
|
63bcd3e58e | ||
|
266b14f169 | ||
|
2306ec893b | ||
|
4e0ce9118d | ||
|
0276272b42 | ||
|
41b887faf6 | ||
|
b12d1deece |
@@ -35,8 +35,9 @@ As used herein, account number, account, and Solarpass refer to the User's accou
|
||||
- Partial deactivation: Partial disabling of the user's rights, e.g. uploading of files, publishing of posts, etc.
|
||||
- Disablement: The user's entire account and all rights of Solsynth LLC to use other services are disabled. We also reserve the right to delete the relevant data.
|
||||
5. A natural person can register and own only one Solarpass account, and we reserve the right to take action against other sub-accounts of the same User for deletion of data.
|
||||
6. If a user opens a sub-account in any way during the penalty period in an attempt to evade the penalty, the sub-account shall be subject to deletion of data and the penalty shall be escalated or the time limit extended, as the case may be.
|
||||
7. Bot accounts opened through the Developer Portal are not considered sub-accounts. *For more information on the use of bot accounts, please refer to the Developer Rules (/terms/developer-rules).
|
||||
6. The transfer and sale of Solarpass accounts are strictly prohibited. If such behavior is discovered, measures will be taken to delete the relevant data immediately.
|
||||
7. If a user opens a sub-account in any way during the penalty period in an attempt to evade the penalty, the sub-account shall be subject to deletion of data and the penalty shall be escalated or the time limit extended, as the case may be.
|
||||
8. Bot accounts opened through the Developer Portal are not considered sub-accounts. *For more information on the use of bot accounts, please refer to the Developer Rules (/terms/developer-rules).
|
||||
|
||||
## 4. User Generated Content
|
||||
|
||||
|
@@ -35,8 +35,9 @@ date: 2025-03-19T16:12:21.897Z
|
||||
- 部份停权:禁用用户的部份权利,例如上传文件、发布帖子等。
|
||||
- 禁用:禁用用户的整个帐号和所有 Solsynth LLC 使用其他服务的权利。同时我们保留删除相关数据的权利。
|
||||
5. 一个自然人只能注册、拥有一个 Solarpass 帐号,我们有权对其他同用户的子帐号采取删除数据的措施。
|
||||
6. 若用户在处罚期间采取任何方式开设子帐号试图逃避处罚,应当对子帐号采取删除数据的措施,并且视情况升级处罚或延长时限。
|
||||
7. 通过「开发者门户」开设的机器人帐号不属于子帐号范畴。*关于「机器人帐号」的使用规定,详见 [开发者守则](/terms/developer-rules)*
|
||||
6. 关于 Solarpass 帐号的转让、出售是绝对禁止的行为,关于发现相关行为将立即采取删除相关数据的措施。
|
||||
7. 若用户在处罚期间采取任何方式开设子帐号试图逃避处罚,应当对子帐号采取删除数据的措施,并且视情况升级处罚或延长时限。
|
||||
8. 通过「开发者门户」开设的机器人帐号不属于子帐号范畴。*关于「机器人帐号」的使用规定,详见 [开发者守则](/terms/developer-rules)*
|
||||
|
||||
## 4. 用户生成内容
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<v-app-bar app flat color="surface" class="app-bar-blur">
|
||||
<v-container fluid class="mx-auto d-flex align-center justify-center pr-8 relative">
|
||||
<v-app-bar-nav-icon @click="openDrawer = !openDrawer" />
|
||||
<v-app-bar-nav-icon @click="openDrawer = !openDrawer" class="z-10" />
|
||||
|
||||
<nuxt-link to="/" exact>
|
||||
<nuxt-link to="/" exact class="z-10">
|
||||
<h2 v-if="isLargeScreen">Solsynth LLC</h2>
|
||||
<v-icon v-else icon="mdi-home" />
|
||||
</nuxt-link>
|
||||
@@ -11,14 +11,9 @@
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<div class="absolute left-0 right-0 flex justify-center gap-2 w-screen">
|
||||
<v-btn
|
||||
v-if="isLargeScreen"
|
||||
v-for="item in navItems"
|
||||
:to="item.to"
|
||||
exact
|
||||
:prepend-icon="item.icon"
|
||||
>{{ t(item.title) }}</v-btn
|
||||
>
|
||||
<v-btn v-if="isLargeScreen" v-for="item in navItems" :to="item.to" exact :prepend-icon="item.icon">{{
|
||||
t(item.title)
|
||||
}}</v-btn>
|
||||
<v-menu location="bottom center" v-else>
|
||||
<template v-slot:activator="{ props }">
|
||||
<v-btn v-bind="props" icon="mdi-dots-horizontal-circle" slim size="small" />
|
||||
@@ -33,8 +28,8 @@
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<locale-select />
|
||||
<user-menu />
|
||||
<locale-select class="z-10" />
|
||||
<user-menu class="z-10" />
|
||||
</v-container>
|
||||
</v-app-bar>
|
||||
|
||||
|
@@ -53,8 +53,8 @@ export default defineNuxtConfig({
|
||||
},
|
||||
|
||||
routeRules: {
|
||||
"/.well-known/openid-configuration": {
|
||||
proxy: "/api/well-known/openid-configuration",
|
||||
"/.well-known/**": {
|
||||
proxy: "/api/well-known/**",
|
||||
},
|
||||
},
|
||||
|
||||
@@ -144,8 +144,8 @@ export default defineNuxtConfig({
|
||||
},
|
||||
|
||||
umami: {
|
||||
id: 'eef151fb-07e2-461b-8b7f-2547aab735d4',
|
||||
host: 'https://us.umami.is',
|
||||
id: "eef151fb-07e2-461b-8b7f-2547aab735d4",
|
||||
host: "https://us.umami.is",
|
||||
autoTrack: true,
|
||||
},
|
||||
|
||||
@@ -167,10 +167,6 @@ export default defineNuxtConfig({
|
||||
},
|
||||
],
|
||||
|
||||
gtag: {
|
||||
id: "G-ZFJ7RX0JXF",
|
||||
},
|
||||
|
||||
vite: {
|
||||
vue: {
|
||||
template: {
|
||||
|
@@ -6,25 +6,34 @@
|
||||
<div class="my-5 mx-4 flex flex-row gap-4">
|
||||
<v-avatar :image="urlOfAvatar" />
|
||||
<div class="flex flex-col">
|
||||
<span>{{ account?.nick }} <span class="text-xs">@{{ account?.name }}</span></span>
|
||||
<span class="text-sm">{{ account?.description }}</span>
|
||||
<span
|
||||
>{{ account?.nick }} <span class="text-xs">@{{ account?.name }}</span></span
|
||||
>
|
||||
<p>
|
||||
{{ accountStatus.status ? accountStatus.status.label : accountStatus["is_online"] ? "Online" : "Offline" }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-7">
|
||||
|
||||
</div>
|
||||
|
||||
<v-row>
|
||||
<v-col row="12" lg="8">
|
||||
<post-list class="mx-[-2.5ch] mt-[-16px]" v-if="account" :author="account.name" />
|
||||
<v-col cols="12" lg="8">
|
||||
<v-card>
|
||||
<v-card-text v-if="accountPageStatus.valueOf() === 'success'">
|
||||
<div class="prose prose-sm" style="max-width: unset">
|
||||
<m-d-c :value="accountPage.content" />
|
||||
</div>
|
||||
</v-card-text>
|
||||
<v-card-text v-else>
|
||||
<p class="font-italic">The user has no account page.</p>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-col>
|
||||
<v-col row="12" lg="4" order="first" order-lg="last">
|
||||
<v-col cols="12" lg="4" order="first" order-lg="last">
|
||||
<div class="sticky top-0 h-fit">
|
||||
<v-card prepend-icon="mdi-identifier" title="About">
|
||||
<v-card-text>
|
||||
<p><b>Description</b></p>
|
||||
<p>{{ account.description }}</p>
|
||||
<p>{{ account?.profile.description }}</p>
|
||||
<p class="mt-3"><b>Joined At</b></p>
|
||||
<p>{{ new Date(account.created_at).toLocaleString() }}</p>
|
||||
</v-card-text>
|
||||
@@ -41,8 +50,6 @@ const { t } = useI18n()
|
||||
const route = useRoute()
|
||||
const config = useRuntimeConfig()
|
||||
|
||||
const tab = ref(1)
|
||||
|
||||
const { data: account } = await useFetch<any>(`${config.public.solarNetworkApi}/cgi/id/users/${route.params.name}`)
|
||||
|
||||
if (account.value == null) {
|
||||
@@ -52,6 +59,17 @@ if (account.value == null) {
|
||||
})
|
||||
}
|
||||
|
||||
const urlOfAvatar = computed(() => account.value?.avatar ? `${config.public.solarNetworkApi}/cgi/uc/attachments/${account.value.avatar}` : void 0)
|
||||
const urlOfBanner = computed(() => account.value?.banner ? `${config.public.solarNetworkApi}/cgi/uc/attachments/${account.value.banner}` : void 0)
|
||||
const { data: accountPage, status: accountPageStatus } = await useFetch<any>(
|
||||
`${config.public.solarNetworkApi}/cgi/id/users/${route.params.name}/page`,
|
||||
)
|
||||
const { data: accountStatus, status: accountStatusStatus } = await useFetch<any>(
|
||||
`${config.public.solarNetworkApi}/cgi/id/users/${route.params.name}/status`,
|
||||
)
|
||||
|
||||
const urlOfAvatar = computed(() =>
|
||||
account.value?.avatar ? `${config.public.solarNetworkApi}/cgi/uc/attachments/${account.value.avatar}` : void 0,
|
||||
)
|
||||
const urlOfBanner = computed(() =>
|
||||
account.value?.banner ? `${config.public.solarNetworkApi}/cgi/uc/attachments/${account.value.banner}` : void 0,
|
||||
)
|
||||
</script>
|
||||
|
7
public/.well-known/microsoft-identity-association.json
Normal file
7
public/.well-known/microsoft-identity-association.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"associatedApplications": [
|
||||
{
|
||||
"applicationId": "5507fe22-1159-4e31-9e93-37b8b441620a"
|
||||
}
|
||||
]
|
||||
}
|
BIN
public/bento/programs/developer-banner.webp
Executable file
BIN
public/bento/programs/developer-banner.webp
Executable file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
public/bento/programs/moderator-banner.webp
Executable file
BIN
public/bento/programs/moderator-banner.webp
Executable file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
public/bento/programs/stellar-banner.webp
Executable file
BIN
public/bento/programs/stellar-banner.webp
Executable file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
@@ -5,7 +5,7 @@ export default defineSitemapEventHandler(async () => {
|
||||
const result = await res.json()
|
||||
|
||||
return result.data.map((item: any) => asSitemapUrl({
|
||||
loc: item.alias ? `/posts/${item.area_alias}/${item.alias}` : `/posts/${item.id}`,
|
||||
loc: item.alias ? `/posts/${item.alias_prefix}/${item.alias}` : `/posts/${item.id}`,
|
||||
lastmod: item.edited_at ?? item.published_at,
|
||||
priority: 0.7,
|
||||
_sitemap: "posts",
|
||||
|
9
server/api/well-known/jwks.ts
Normal file
9
server/api/well-known/jwks.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { defineEventHandler } from 'h3'
|
||||
|
||||
export default defineEventHandler(async () => {
|
||||
const config = useRuntimeConfig();
|
||||
|
||||
const resp = await fetch(`${config.public.solarNetworkApi}/cgi/id/well-known/jwks`)
|
||||
|
||||
return await resp.json()
|
||||
})
|
@@ -1,31 +1,20 @@
|
||||
export default defineEventHandler((event) => {
|
||||
const config = useRuntimeConfig()
|
||||
import { defineEventHandler } from 'h3'
|
||||
|
||||
return {
|
||||
"authorization_endpoint": `${config.public.siteUrl}/auth/authorize`,
|
||||
"grant_types_supported": [
|
||||
"authorization_code",
|
||||
"implicit",
|
||||
"refresh_token",
|
||||
],
|
||||
"id_token_signing_alg_values_supported": [
|
||||
"HS512",
|
||||
],
|
||||
"issuer": config.public.siteUrl,
|
||||
"response_types_supported": [
|
||||
"code",
|
||||
"token",
|
||||
],
|
||||
"subject_types_supported": [
|
||||
"public",
|
||||
],
|
||||
"token_endpoint": `${config.public.solarNetworkApi}/cgi/id/auth/token`,
|
||||
"token_endpoint_auth_methods_supported": [
|
||||
"client_secret_post",
|
||||
],
|
||||
"token_endpoint_auth_signing_alg_values_supported": [
|
||||
"HS512",
|
||||
],
|
||||
"userinfo_endpoint": `${config.public.solarNetworkApi}/cgi/id/users/me`,
|
||||
export default defineEventHandler(async () => {
|
||||
const config = useRuntimeConfig();
|
||||
const siteUrl = config.public.siteUrl
|
||||
|
||||
const resp = await fetch(`${config.public.solarNetworkApi}/cgi/id/well-known/openid-configuration`)
|
||||
const out: Record<string, any> = await resp.json()
|
||||
|
||||
out['authorization_endpoint'] = `${siteUrl}/auth/authorize`
|
||||
out['jwks_uri'] = `${siteUrl}/.well-known/jwks`
|
||||
|
||||
for (const [k, v] of Object.entries(out)) {
|
||||
if (typeof v === 'string' && v.startsWith('https://id.solsynth.dev/api')) {
|
||||
out[k] = v.replace('https://id.solsynth.dev/api', `${config.public.solarNetworkApi}/cgi/id`)
|
||||
}
|
||||
}
|
||||
|
||||
return out
|
||||
})
|
Reference in New Issue
Block a user