mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-13 13:37:31 -07:00
Improve client
This commit is contained in:
parent
995dd74f1b
commit
571bd15bc9
6 changed files with 87 additions and 3 deletions
|
@ -5,9 +5,9 @@
|
|||
<MkLoading/>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="resolved">
|
||||
<FormGroup v-else-if="resolved" class="_formItem">
|
||||
<slot :result="result"></slot>
|
||||
</div>
|
||||
</FormGroup>
|
||||
<div class="_formItem" v-else>
|
||||
<div class="_formPanel">
|
||||
error!
|
||||
|
@ -20,8 +20,13 @@
|
|||
<script lang="ts">
|
||||
import { defineComponent, PropType, ref, watch } from 'vue';
|
||||
import './form.scss';
|
||||
import FormGroup from './group.vue';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
FormGroup,
|
||||
},
|
||||
|
||||
props: {
|
||||
p: {
|
||||
type: Function as PropType<() => Promise<any>>,
|
||||
|
|
|
@ -14,6 +14,10 @@
|
|||
</FormKeyValueView>
|
||||
</FormGroup>
|
||||
|
||||
<FormTextarea readonly :value="instance.description">
|
||||
<span>{{ $ts.description }}</span>
|
||||
</FormTextarea>
|
||||
|
||||
<FormGroup>
|
||||
<FormKeyValueView>
|
||||
<template #key>{{ $ts.software }}</template>
|
||||
|
@ -99,6 +103,27 @@
|
|||
<FormLink :to="`https://${host}/.well-known/host-meta.json`" external>host-meta.json</FormLink>
|
||||
<FormLink :to="`https://${host}/.well-known/nodeinfo`" external>nodeinfo</FormLink>
|
||||
</FormGroup>
|
||||
<FormSuspense :p="dnsPromiseFactory" v-slot="{ result: dns }">
|
||||
<FormGroup>
|
||||
<template #label>DNS</template>
|
||||
<FormKeyValueView v-for="record in dns.a" :key="record">
|
||||
<template #key>A</template>
|
||||
<template #value><span class="_monospace">{{ record }}</span></template>
|
||||
</FormKeyValueView>
|
||||
<FormKeyValueView v-for="record in dns.aaaa" :key="record">
|
||||
<template #key>AAAA</template>
|
||||
<template #value><span class="_monospace">{{ record }}</span></template>
|
||||
</FormKeyValueView>
|
||||
<FormKeyValueView v-for="record in dns.cname" :key="record">
|
||||
<template #key>CNAME</template>
|
||||
<template #value><span class="_monospace">{{ record }}</span></template>
|
||||
</FormKeyValueView>
|
||||
<FormKeyValueView v-for="record in dns.txt">
|
||||
<template #key>TXT</template>
|
||||
<template #value><span class="_monospace">{{ record[0] }}</span></template>
|
||||
</FormKeyValueView>
|
||||
</FormGroup>
|
||||
</FormSuspense>
|
||||
</FormGroup>
|
||||
</FormBase>
|
||||
</template>
|
||||
|
@ -167,6 +192,9 @@ export default defineComponent({
|
|||
}],
|
||||
},
|
||||
instance: null,
|
||||
dnsPromiseFactory: () => os.api('federation/dns', {
|
||||
host: this.host
|
||||
}),
|
||||
now: null,
|
||||
canvas: null,
|
||||
chart: null,
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</FormKeyValueView>
|
||||
<FormKeyValueView>
|
||||
<template #key>Shared Inbox</template>
|
||||
<template #value><span class="_monospace">{{ ap.sharedInbox }}</span></template>
|
||||
<template #value><span class="_monospace">{{ ap.sharedInbox || ap.endpoints.sharedInbox }}</span></template>
|
||||
</FormKeyValueView>
|
||||
<FormKeyValueView>
|
||||
<template #key>Outbox</template>
|
||||
|
|
|
@ -18,6 +18,13 @@
|
|||
</FormKeyValueView>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormKeyValueView>
|
||||
<template #key>{{ $ts.updatedAt }}</template>
|
||||
<template #value><MkTime v-if="user.lastFetchedAt" mode="detail" :time="user.lastFetchedAt"/><span v-else>N/A</span></template>
|
||||
</FormKeyValueView>
|
||||
</FormGroup>
|
||||
|
||||
<FormObjectView tall :value="user">
|
||||
<span>Raw</span>
|
||||
</FormObjectView>
|
||||
|
|
|
@ -198,6 +198,7 @@ export class UserRepository extends Repository<User> {
|
|||
uri: user.uri,
|
||||
createdAt: user.createdAt.toISOString(),
|
||||
updatedAt: user.updatedAt ? user.updatedAt.toISOString() : null,
|
||||
lastFetchedAt: user.lastFetchedAt?.toISOString(),
|
||||
bannerUrl: user.bannerUrl,
|
||||
bannerBlurhash: user.bannerBlurhash,
|
||||
bannerColor: null, // 後方互換性のため
|
||||
|
|
43
src/server/api/endpoints/federation/dns.ts
Normal file
43
src/server/api/endpoints/federation/dns.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import { promises as dns } from 'dns';
|
||||
import $ from 'cafy';
|
||||
import define from '../../define';
|
||||
import { Instances } from '../../../../models';
|
||||
import { toPuny } from '@/misc/convert-host';
|
||||
|
||||
const resolver = new dns.Resolver();
|
||||
resolver.setServers(['1.1.1.1']);
|
||||
|
||||
export const meta = {
|
||||
tags: ['federation'],
|
||||
|
||||
requireCredential: false as const,
|
||||
|
||||
params: {
|
||||
host: {
|
||||
validator: $.str
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, me) => {
|
||||
const instance = await Instances.findOneOrFail({ host: toPuny(ps.host) });
|
||||
|
||||
const [
|
||||
resolved4,
|
||||
resolved6,
|
||||
resolvedCname,
|
||||
resolvedTxt,
|
||||
] = await Promise.all([
|
||||
resolver.resolve4(instance.host).catch(() => []),
|
||||
resolver.resolve6(instance.host).catch(() => []),
|
||||
resolver.resolveCname(instance.host).catch(() => []),
|
||||
resolver.resolveTxt(instance.host).catch(() => []),
|
||||
]);
|
||||
|
||||
return {
|
||||
a: resolved4,
|
||||
aaaa: resolved6,
|
||||
cname: resolvedCname,
|
||||
txt: resolvedTxt,
|
||||
};
|
||||
});
|
Loading…
Reference in a new issue