mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	wip
This commit is contained in:
		
							parent
							
								
									924119651a
								
							
						
					
					
						commit
						484d17f53f
					
				
					 14 changed files with 73 additions and 50 deletions
				
			
		| 
						 | 
				
			
			@ -1,13 +1,16 @@
 | 
			
		|||
<template>
 | 
			
		||||
<button class="mk-follow-button"
 | 
			
		||||
	:class="{ wait: wait, follow: !user.isFollowing, unfollow: user.isFollowing }"
 | 
			
		||||
	:class="{ wait: wait, following: user.isFollowing, unfollow: user.isFollowing }"
 | 
			
		||||
	@click="onClick"
 | 
			
		||||
	:disabled="wait"
 | 
			
		||||
>
 | 
			
		||||
	<template v-if="!wait && user.isFollowing">%fa:minus%</template>
 | 
			
		||||
	<template v-if="!wait && !user.isFollowing">%fa:plus%</template>
 | 
			
		||||
	<template v-if="wait">%fa:spinner .pulse .fw%</template>
 | 
			
		||||
	{{ user.isFollowing ? '%i18n:@unfollow%' : '%i18n:@follow%' }}
 | 
			
		||||
	<template v-if="!wait">
 | 
			
		||||
		<template v-if="user.hasPendingFollowRequestFromYou">%fa:hourglass-half% %i18n:@request-pending%</template>
 | 
			
		||||
		<template v-else-if="user.isFollowing">%fa:minus% %i18n:@unfollow%</template>
 | 
			
		||||
		<template v-else-if="!user.isFollowing && user.isLocked">%fa:plus% %i18n:@follow-request%</template>
 | 
			
		||||
		<template v-else-if="!user.isFollowing && !user.isLocked">%fa:plus% %i18n:@follow%</template>
 | 
			
		||||
	</template>
 | 
			
		||||
	<template v-else>%fa:spinner .pulse .fw%</template>
 | 
			
		||||
</button>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -66,15 +69,27 @@ export default Vue.extend({
 | 
			
		|||
					this.wait = false;
 | 
			
		||||
				});
 | 
			
		||||
			} else {
 | 
			
		||||
				(this as any).api('following/create', {
 | 
			
		||||
					userId: this.user.id
 | 
			
		||||
				}).then(() => {
 | 
			
		||||
					this.user.isFollowing = true;
 | 
			
		||||
				}).catch(err => {
 | 
			
		||||
					console.error(err);
 | 
			
		||||
				}).then(() => {
 | 
			
		||||
					this.wait = false;
 | 
			
		||||
				});
 | 
			
		||||
				if (this.user.isLocked && this.user.hasPendingFollowRequestFromYou) {
 | 
			
		||||
					(this as any).api('following/requests/cancel', {
 | 
			
		||||
						userId: this.user.id
 | 
			
		||||
					}).then(() => {
 | 
			
		||||
						this.user.hasPendingFollowRequestFromYou = false;
 | 
			
		||||
					}).catch(err => {
 | 
			
		||||
						console.error(err);
 | 
			
		||||
					}).then(() => {
 | 
			
		||||
						this.wait = false;
 | 
			
		||||
					});
 | 
			
		||||
				} else {
 | 
			
		||||
					(this as any).api('following/create', {
 | 
			
		||||
						userId: this.user.id
 | 
			
		||||
					}).then(() => {
 | 
			
		||||
						this.user.isFollowing = true;
 | 
			
		||||
					}).catch(err => {
 | 
			
		||||
						console.error(err);
 | 
			
		||||
					}).then(() => {
 | 
			
		||||
						this.wait = false;
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -90,11 +105,11 @@ export default Vue.extend({
 | 
			
		|||
	cursor pointer
 | 
			
		||||
	padding 0 16px
 | 
			
		||||
	margin 0
 | 
			
		||||
	height inherit
 | 
			
		||||
	font-size 16px
 | 
			
		||||
	line-height 36px
 | 
			
		||||
	font-size 14px
 | 
			
		||||
	outline none
 | 
			
		||||
	border solid 1px $theme-color
 | 
			
		||||
	border-radius 4px
 | 
			
		||||
	border-radius 36px
 | 
			
		||||
 | 
			
		||||
	*
 | 
			
		||||
		pointer-events none
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,7 +184,6 @@ root(isDark)
 | 
			
		|||
 | 
			
		||||
				> .mk-follow-button
 | 
			
		||||
					float right
 | 
			
		||||
					height 40px
 | 
			
		||||
 | 
			
		||||
			> .title
 | 
			
		||||
				margin 8px 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
import * as mongo from 'mongodb';
 | 
			
		||||
import User, { IRemoteUser } from '../../../../models/user';
 | 
			
		||||
import config from '../../../../config';
 | 
			
		||||
import accept from '../../../../services/user/accept-follow-request';
 | 
			
		||||
import accept from '../../../../services/following/requests/accept';
 | 
			
		||||
import { IFollow } from '../../type';
 | 
			
		||||
 | 
			
		||||
export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,5 +23,5 @@ export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
 | 
			
		|||
		throw new Error('フォローしようとしているユーザーはローカルユーザーではありません');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	await follow(actor, followee, activity);
 | 
			
		||||
	await follow(actor, followee);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
import * as mongo from 'mongodb';
 | 
			
		||||
import User, { IRemoteUser } from '../../../../models/user';
 | 
			
		||||
import config from '../../../../config';
 | 
			
		||||
import reject from '../../../../services/user/reject-follow-request';
 | 
			
		||||
import reject from '../../../../services/following/requests/reject';
 | 
			
		||||
import { IFollow } from '../../type';
 | 
			
		||||
 | 
			
		||||
export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,5 +23,5 @@ export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
 | 
			
		|||
		throw new Error('フォロー解除しようとしているユーザーはローカルユーザーではありません');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	await unfollow(actor, followee, activity);
 | 
			
		||||
	await unfollow(actor, followee);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ const httpSignature = require('http-signature');
 | 
			
		|||
import { createHttp } from '../queue';
 | 
			
		||||
import pack from '../remote/activitypub/renderer';
 | 
			
		||||
import Note from '../models/note';
 | 
			
		||||
import User, { isLocalUser } from '../models/user';
 | 
			
		||||
import User, { isLocalUser, ILocalUser } from '../models/user';
 | 
			
		||||
import renderNote from '../remote/activitypub/renderer/note';
 | 
			
		||||
import renderKey from '../remote/activitypub/renderer/key';
 | 
			
		||||
import renderPerson from '../remote/activitypub/renderer/person';
 | 
			
		||||
| 
						 | 
				
			
			@ -69,7 +69,10 @@ router.get('/notes/:note', async (ctx, next) => {
 | 
			
		|||
router.get('/users/:user/outbox', async ctx => {
 | 
			
		||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
			
		||||
 | 
			
		||||
	const user = await User.findOne({ _id: userId });
 | 
			
		||||
	const user = await User.findOne({
 | 
			
		||||
		_id: userId,
 | 
			
		||||
		host: null
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (user === null) {
 | 
			
		||||
		ctx.status = 404;
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +94,10 @@ router.get('/users/:user/outbox', async ctx => {
 | 
			
		|||
router.get('/users/:user/publickey', async ctx => {
 | 
			
		||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
			
		||||
 | 
			
		||||
	const user = await User.findOne({ _id: userId });
 | 
			
		||||
	const user = await User.findOne({
 | 
			
		||||
		_id: userId,
 | 
			
		||||
		host: null
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (user === null) {
 | 
			
		||||
		ctx.status = 404;
 | 
			
		||||
| 
						 | 
				
			
			@ -109,14 +115,17 @@ router.get('/users/:user/publickey', async ctx => {
 | 
			
		|||
router.get('/users/:user', async ctx => {
 | 
			
		||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
			
		||||
 | 
			
		||||
	const user = await User.findOne({ _id: userId });
 | 
			
		||||
	const user = await User.findOne({
 | 
			
		||||
		_id: userId,
 | 
			
		||||
		host: null
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (user === null) {
 | 
			
		||||
		ctx.status = 404;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx.body = pack(renderPerson(user));
 | 
			
		||||
	ctx.body = pack(renderPerson(user as ILocalUser));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// follow form
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -449,12 +449,12 @@ const endpoints: Endpoint[] = [
 | 
			
		|||
		kind: 'following-write'
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		name: 'following/request/accept',
 | 
			
		||||
		name: 'following/requests/accept',
 | 
			
		||||
		withCredential: true,
 | 
			
		||||
		kind: 'following-write'
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		name: 'following/request/reject',
 | 
			
		||||
		name: 'following/requests/reject',
 | 
			
		||||
		withCredential: true,
 | 
			
		||||
		kind: 'following-write'
 | 
			
		||||
	},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
import $ from 'cafy'; import ID from '../../../../../cafy-id';
 | 
			
		||||
import acceptFollowRequest from '../../../../../services/user/accept-follow-request';
 | 
			
		||||
import acceptFollowRequest from '../../../../../services/following/requests/accept';
 | 
			
		||||
import User from '../../../../../models/user';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
import $ from 'cafy'; import ID from '../../../../../cafy-id';
 | 
			
		||||
import rejectFollowRequest from '../../../../../services/user/reject-follow-request';
 | 
			
		||||
import rejectFollowRequest from '../../../../../services/following/requests/reject';
 | 
			
		||||
import User from '../../../../../models/user';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ import $ from 'cafy'; import ID from '../../../../cafy-id';
 | 
			
		|||
import User, { isValidName, isValidDescription, isValidLocation, isValidBirthday, pack } from '../../../../models/user';
 | 
			
		||||
import event from '../../../../publishers/stream';
 | 
			
		||||
import DriveFile from '../../../../models/drive-file';
 | 
			
		||||
import acceptAllFollowRequests from '../../../../services/user/accept-all-follow-requests';
 | 
			
		||||
import acceptAllFollowRequests from '../../../../services/following/requests/accept-all';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Update myself
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
import User, { IUser } from "../../models/user";
 | 
			
		||||
import FollowRequest from "../../models/follow-request";
 | 
			
		||||
import accept from './accept-follow-request';
 | 
			
		||||
import User, { IUser } from "../../../models/user";
 | 
			
		||||
import FollowRequest from "../../../models/follow-request";
 | 
			
		||||
import accept from './accept';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 指定したユーザー宛てのフォローリクエストをすべて承認
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +1,12 @@
 | 
			
		|||
import User, { IUser, isRemoteUser, ILocalUser } from "../../models/user";
 | 
			
		||||
import FollowRequest from "../../models/follow-request";
 | 
			
		||||
import pack from '../../remote/activitypub/renderer';
 | 
			
		||||
import renderFollow from '../../remote/activitypub/renderer/follow';
 | 
			
		||||
import renderAccept from '../../remote/activitypub/renderer/accept';
 | 
			
		||||
import { deliver } from '../../queue';
 | 
			
		||||
import Following from "../../models/following";
 | 
			
		||||
import FollowingLog from "../../models/following-log";
 | 
			
		||||
import FollowedLog from "../../models/followed-log";
 | 
			
		||||
import User, { IUser, isRemoteUser, ILocalUser } from "../../../models/user";
 | 
			
		||||
import FollowRequest from "../../../models/follow-request";
 | 
			
		||||
import pack from '../../../remote/activitypub/renderer';
 | 
			
		||||
import renderFollow from '../../../remote/activitypub/renderer/follow';
 | 
			
		||||
import renderAccept from '../../../remote/activitypub/renderer/accept';
 | 
			
		||||
import { deliver } from '../../../queue';
 | 
			
		||||
import Following from "../../../models/following";
 | 
			
		||||
import FollowingLog from "../../../models/following-log";
 | 
			
		||||
import FollowedLog from "../../../models/followed-log";
 | 
			
		||||
 | 
			
		||||
export default async function(followee: IUser, follower: IUser) {
 | 
			
		||||
	const following = await Following.insert({
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,9 @@
 | 
			
		|||
import User, { IUser, isRemoteUser, ILocalUser } from "../../models/user";
 | 
			
		||||
import FollowRequest from "../../models/follow-request";
 | 
			
		||||
import pack from '../../remote/activitypub/renderer';
 | 
			
		||||
import renderFollow from '../../remote/activitypub/renderer/follow';
 | 
			
		||||
import renderReject from '../../remote/activitypub/renderer/reject';
 | 
			
		||||
import { deliver } from '../../queue';
 | 
			
		||||
import User, { IUser, isRemoteUser, ILocalUser } from "../../../models/user";
 | 
			
		||||
import FollowRequest from "../../../models/follow-request";
 | 
			
		||||
import pack from '../../../remote/activitypub/renderer';
 | 
			
		||||
import renderFollow from '../../../remote/activitypub/renderer/follow';
 | 
			
		||||
import renderReject from '../../../remote/activitypub/renderer/reject';
 | 
			
		||||
import { deliver } from '../../../queue';
 | 
			
		||||
 | 
			
		||||
export default async function(followee: IUser, follower: IUser) {
 | 
			
		||||
	if (isRemoteUser(follower)) {
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue