summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-04-15 21:02:04 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-04-15 21:02:04 +0900
commit7abfcd06daf048742d68fc67ac82ac50161ddd66 (patch)
tree9c6cd07979cf41d9b8fba45236e3f7443cce6af0 /src
parentMerge branch 'develop' (diff)
parent11.1.0 (diff)
downloadmisskey-7abfcd06daf048742d68fc67ac82ac50161ddd66.tar.gz
misskey-7abfcd06daf048742d68fc67ac82ac50161ddd66.tar.bz2
misskey-7abfcd06daf048742d68fc67ac82ac50161ddd66.zip
Merge branch 'develop'
Diffstat (limited to 'src')
-rw-r--r--src/client/app/common/views/components/mention.vue4
-rw-r--r--src/misc/gen-avatar.ts89
-rw-r--r--src/models/repositories/user.ts3
-rw-r--r--src/server/api/call.ts2
-rw-r--r--src/server/api/endpoints/blocking/create.ts4
-rw-r--r--src/server/api/endpoints/blocking/delete.ts4
-rw-r--r--src/server/api/endpoints/sw/register.ts2
-rw-r--r--src/server/file/assets/avatar.jpgbin1261 -> 0 bytes
-rw-r--r--src/server/file/index.ts6
-rw-r--r--src/server/index.ts7
-rw-r--r--src/services/drive/add-file.ts2
11 files changed, 108 insertions, 15 deletions
diff --git a/src/client/app/common/views/components/mention.vue b/src/client/app/common/views/components/mention.vue
index e1f67282b6..f212fd3ca5 100644
--- a/src/client/app/common/views/components/mention.vue
+++ b/src/client/app/common/views/components/mention.vue
@@ -36,7 +36,9 @@ export default Vue.extend({
return this.host === localHost ? `@${this.username}` : `@${this.username}@${toUnicode(this.host)}`;
},
isMe(): boolean {
- return this.$store.getters.isSignedIn && this.canonical.toLowerCase() === `@${this.$store.state.i.username}@${toUnicode(localHost)}`.toLowerCase();
+ return this.$store.getters.isSignedIn && (
+ `@${this.username}@${toUnicode(this.host)}` === `@${this.$store.state.i.username}@${toUnicode(localHost)}`.toLowerCase()
+ );
}
},
methods: {
diff --git a/src/misc/gen-avatar.ts b/src/misc/gen-avatar.ts
new file mode 100644
index 0000000000..7d22ee98e2
--- /dev/null
+++ b/src/misc/gen-avatar.ts
@@ -0,0 +1,89 @@
+/**
+ * Random avatar generator
+ */
+
+import { createCanvas } from 'canvas';
+import * as gen from 'random-seed';
+
+const size = 512; // px
+const n = 5; // resolution
+const margin = (size / n) / 1.5;
+const colors = [
+ '#e57373',
+ '#F06292',
+ '#BA68C8',
+ '#9575CD',
+ '#7986CB',
+ '#64B5F6',
+ '#4FC3F7',
+ '#4DD0E1',
+ '#4DB6AC',
+ '#81C784',
+ '#8BC34A',
+ '#AFB42B',
+ '#F57F17',
+ '#FF5722',
+ '#795548',
+ '#455A64',
+];
+const bg = '#e9e9e9';
+
+const actualSize = size - (margin * 2);
+const cellSize = actualSize / n;
+const sideN = Math.floor(n / 2);
+
+/**
+ * Generate buffer of random avatar by seed
+ */
+export function genAvatar(seed: string) {
+ const rand = gen.create(seed);
+ const canvas = createCanvas(size, size);
+ const ctx = canvas.getContext('2d');
+
+ ctx.fillStyle = bg;
+ ctx.beginPath();
+ ctx.fillRect(0, 0, size, size);
+
+ ctx.fillStyle = colors[rand(colors.length)];
+
+ // side bitmap (filled by false)
+ const side: boolean[][] = new Array(sideN);
+ for (let i = 0; i < side.length; i++) {
+ side[i] = new Array(n).fill(false);
+ }
+
+ // 1*n (filled by false)
+ const center: boolean[] = new Array(n).fill(false);
+
+ // tslint:disable-next-line:prefer-for-of
+ for (let x = 0; x < side.length; x++) {
+ for (let y = 0; y < side[x].length; y++) {
+ side[x][y] = rand(3) === 0;
+ }
+ }
+
+ for (let i = 0; i < center.length; i++) {
+ center[i] = rand(3) === 0;
+ }
+
+ // Draw
+ for (let x = 0; x < n; x++) {
+ for (let y = 0; y < n; y++) {
+ const isXCenter = x === ((n - 1) / 2);
+ if (isXCenter && !center[y]) continue;
+
+ const isLeftSide = x < ((n - 1) / 2);
+ if (isLeftSide && !side[x][y]) continue;
+
+ const isRightSide = x > ((n - 1) / 2);
+ if (isRightSide && !side[sideN - (x - sideN)][y]) continue;
+
+ const actualX = margin + (cellSize * x);
+ const actualY = margin + (cellSize * y);
+ ctx.beginPath();
+ ctx.fillRect(actualX, actualY, cellSize, cellSize);
+ }
+ }
+
+ return canvas.toBuffer();
+}
diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts
index 83cca2f883..9e4247545a 100644
--- a/src/models/repositories/user.ts
+++ b/src/models/repositories/user.ts
@@ -3,6 +3,7 @@ import { User, ILocalUser, IRemoteUser } from '../entities/user';
import { Emojis, Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles } from '..';
import rap from '@prezzemolo/rap';
import { ensure } from '../../prelude/ensure';
+import config from '../../config';
@EntityRepository(User)
export class UserRepository extends Repository<User> {
@@ -88,7 +89,7 @@ export class UserRepository extends Repository<User> {
name: user.name,
username: user.username,
host: user.host,
- avatarUrl: user.avatarUrl,
+ avatarUrl: user.avatarUrl ? user.avatarUrl : config.url + '/avatar/' + user.id,
avatarColor: user.avatarColor,
isAdmin: user.isAdmin || undefined,
isBot: user.isBot || undefined,
diff --git a/src/server/api/call.ts b/src/server/api/call.ts
index c79f8eef5d..8be1b71cfa 100644
--- a/src/server/api/call.ts
+++ b/src/server/api/call.ts
@@ -59,7 +59,7 @@ export default async (endpoint: string, user: User | null | undefined, app: App
});
}
- if (ep.meta.requireCredential && ep.meta.limit) {
+ if (ep.meta.requireCredential && ep.meta.limit && !user!.isAdmin && !user!.isModerator) {
// Rate limit
await limiter(ep, user!).catch(e => {
throw new ApiError({
diff --git a/src/server/api/endpoints/blocking/create.ts b/src/server/api/endpoints/blocking/create.ts
index 0d6626b2d5..045be6aef3 100644
--- a/src/server/api/endpoints/blocking/create.ts
+++ b/src/server/api/endpoints/blocking/create.ts
@@ -5,7 +5,7 @@ import create from '../../../../services/blocking/create';
import define from '../../define';
import { ApiError } from '../../error';
import { getUser } from '../../common/getters';
-import { Blockings, NoteWatchings } from '../../../../models';
+import { Blockings, NoteWatchings, Users } from '../../../../models';
export const meta = {
stability: 'stable',
@@ -89,5 +89,5 @@ export default define(meta, async (ps, user) => {
noteUserId: blockee.id
});
- return await Blockings.pack(blockee.id, user);
+ return await Users.pack(blockee.id, user);
});
diff --git a/src/server/api/endpoints/blocking/delete.ts b/src/server/api/endpoints/blocking/delete.ts
index e304dca811..ecb5d1109e 100644
--- a/src/server/api/endpoints/blocking/delete.ts
+++ b/src/server/api/endpoints/blocking/delete.ts
@@ -5,7 +5,7 @@ import deleteBlocking from '../../../../services/blocking/delete';
import define from '../../define';
import { ApiError } from '../../error';
import { getUser } from '../../common/getters';
-import { Blockings } from '../../../../models';
+import { Blockings, Users } from '../../../../models';
export const meta = {
stability: 'stable',
@@ -84,5 +84,5 @@ export default define(meta, async (ps, user) => {
// Delete blocking
await deleteBlocking(blocker, blockee);
- return await Blockings.pack(blockee.id, user);
+ return await Users.pack(blockee.id, user);
});
diff --git a/src/server/api/endpoints/sw/register.ts b/src/server/api/endpoints/sw/register.ts
index 79bc18bf21..559937ca2f 100644
--- a/src/server/api/endpoints/sw/register.ts
+++ b/src/server/api/endpoints/sw/register.ts
@@ -27,7 +27,6 @@ export const meta = {
export default define(meta, async (ps, user) => {
// if already subscribed
const exist = await SwSubscriptions.findOne({
- createdAt: new Date(),
userId: user.id,
endpoint: ps.endpoint,
auth: ps.auth,
@@ -45,6 +44,7 @@ export default define(meta, async (ps, user) => {
await SwSubscriptions.save({
id: genId(),
+ createdAt: new Date(),
userId: user.id,
endpoint: ps.endpoint,
auth: ps.auth,
diff --git a/src/server/file/assets/avatar.jpg b/src/server/file/assets/avatar.jpg
deleted file mode 100644
index be0c3ca829..0000000000
--- a/src/server/file/assets/avatar.jpg
+++ /dev/null
Binary files differ
diff --git a/src/server/file/index.ts b/src/server/file/index.ts
index e3487a2636..1cdf5207e4 100644
--- a/src/server/file/index.ts
+++ b/src/server/file/index.ts
@@ -21,12 +21,6 @@ app.use(async (ctx, next) => {
// Init router
const router = new Router();
-router.get('/default-avatar.jpg', ctx => {
- const file = fs.createReadStream(`${__dirname}/assets/avatar.jpg`);
- ctx.set('Content-Type', 'image/jpeg');
- ctx.body = file;
-});
-
router.get('/app-default.jpg', ctx => {
const file = fs.createReadStream(`${__dirname}/assets/dummy.png`);
ctx.set('Content-Type', 'image/jpeg');
diff --git a/src/server/index.ts b/src/server/index.ts
index 601e288f3b..7d8938d584 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -25,6 +25,7 @@ import Logger from '../services/logger';
import { program } from '../argv';
import { UserProfiles } from '../models';
import { networkChart } from '../services/chart';
+import { genAvatar } from '../misc/gen-avatar';
export const serverLogger = new Logger('server', 'gray', false);
@@ -72,6 +73,12 @@ router.use(activityPub.routes());
router.use(nodeinfo.routes());
router.use(wellKnown.routes());
+router.get('/avatar/:x', ctx => {
+ const avatar = genAvatar(ctx.params.x);
+ ctx.set('Content-Type', 'image/png');
+ ctx.body = avatar;
+});
+
router.get('/verify-email/:code', async ctx => {
const profile = await UserProfiles.findOne({
emailVerifyCode: ctx.params.code
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 54d7f2d13a..c79dfee103 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -209,7 +209,7 @@ async function deleteOldFile(user: IRemoteUser) {
}
if (user.bannerId) {
- q.andWhere('file.id != :bannerId', { bannerId: user.bannerId })
+ q.andWhere('file.id != :bannerId', { bannerId: user.bannerId });
}
q.orderBy('file.id', 'DESC');