diff --git a/.config/example.yml b/.config/example.yml index b84a50c52..9ea048f70 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -50,8 +50,11 @@ remoteDriveCapacityMb: 8 # If enabled: # Server will not cache remote files (Using direct link instead). # You can save your storage. -# Users cannot see remote images when they turn off "Show media from a remote server" setting. -preventCache: false +# +# NOTE: +# * Users cannot see remote images when they turn off "Show media from a remote server" setting. +# * Since thumbnails are not provided, traffic increases. +preventCacheRemoteFiles: false drive: storage: 'db' @@ -64,7 +67,7 @@ drive: # config: # endPoint: # port: - # secure: + # useSSL: # accessKey: # secretKey: @@ -75,7 +78,7 @@ drive: # config: # endPoint: s3-us-west-2.amazonaws.com # region: us-west-2 - # secure: true + # useSSL: true # accessKey: XXX # secretKey: YYY @@ -87,7 +90,7 @@ drive: # config: # endPoint: s3-us-west-2.amazonaws.com # region: us-west-2 - # secure: true + # useSSL: true # accessKey: XXX # secretKey: YYY @@ -123,6 +126,7 @@ drive: # google_maps_api_key: example-google-maps-api-key # Twitter integration +# You need to set the oauth callback url as : https:///api/tw/cb # twitter: # consumer_key: example-twitter-consumer-key # consumer_secret: example-twitter-consumer-secret-key diff --git a/.travis.yml b/.travis.yml index f52fe7e3f..cdb6edc96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,6 @@ addons: - ubuntu-toolchain-r-test packages: - g++-4.8 - - graphicsmagick cache: directories: diff --git a/.vsls.json b/.vsls.json new file mode 100644 index 000000000..3fff86244 --- /dev/null +++ b/.vsls.json @@ -0,0 +1,4 @@ +{ + "$schema": "http://json.schemastore.org/vsls", + "gitignore": "exclude" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 08ad99977..9b5d8c830 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,15 @@ ChangeLog This document describes breaking changes only. +6.0.0 +----- + +### Migration + +オブジェクトストレージを使用している場合、設定ファイルの`drive.config.secure`を`drive.config.useSSL`にリネームしてください。 + +If you use object storage, please rename `drive.config.secure` to `drive.config.useSSL` in config. + 5.0.0 ----- diff --git a/README.md b/README.md index 9e1c834b4..a52ead65a 100644 --- a/README.md +++ b/README.md @@ -43,9 +43,34 @@ If you want to... :heart: Backers & Sponsors ---------------------------------------------------------------- -| | | | | -|:-:|:-:|:-:|:-:| -| [Gargron](https://www.patreon.com/mastodon) | [39ff](https://www.patreon.com/user/creators?u=12378075) | [dansup](https://www.patreon.com/dansup) | [Takashi Shibuya](https://www.patreon.com/user/creators?u=12531784) | + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Gargron39ffdansupTakashi ShibuyafujishanMelilotNaoki KosakanegaoPeter G.Reijugutfuckllc
:four_leaf_clover: Copyright ---------------------------------------------------------------- diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index f089c0254..000000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM base/archlinux - -MAINTAINER Aya Morisawa - -RUN rm /etc/pacman.d/mirrorlist -RUN echo 'Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist -RUN echo 'Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist - -RUN rm /etc/localtime -RUN ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime - -RUN pacman -Sy --noconfirm -RUN pacman -S --noconfirm pacman -RUN pacman-db-upgrade -RUN pacman -S --noconfirm archlinux-keyring -RUN pacman -Syyu --noconfirm -RUN pacman -S --noconfirm git nodejs npm mongodb redis - -COPY misskey.sh /root/misskey.sh -RUN chmod u+x /root/misskey.sh - -EXPOSE 80 -EXPOSE 443 -EXPOSE 27017 - -CMD ["/root/misskey.sh"] diff --git a/docker/misskey.sh b/docker/misskey.sh deleted file mode 100644 index 82291e3a9..000000000 --- a/docker/misskey.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -redis-server --daemonize yes -mongod > /dev/null & -cd /root/misskey -npm start -tail -f /dev/null diff --git a/docs/docker.en.md b/docs/docker.en.md deleted file mode 100644 index 591ad8660..000000000 --- a/docs/docker.en.md +++ /dev/null @@ -1,29 +0,0 @@ -Setup with Docker :whale: -================================================================ - -Ensure that the working directory is the repository root directory. - -To create misskey image: -``` console -$ sudo docker build -t misskey ./docker -``` - -To run misskey: -``` console -$ sudo docker run --rm -i -t -p $PORT:80 -v $(pwd):/root/misskey -v $DBPATH:/data/db misskey -``` - -where `$PORT` is the port used to access Misskey Web from host browser -and `$DBPATH` is the path of MongoDB database on the host for data persistence. - -ex: -``` console -$ sudo docker run --rm -i -t -p 80:80 -v $(pwd):/root/misskey -v /data/db:/data/db misskey -``` - -If you want to run misskey in production mode, add `--env NODE_ENV=production` like this: -``` console -$ sudo docker run --rm -i -t -p 80:80 -v $(pwd):/root/misskey -v /data/db:/data/db --env NODE_ENV=production misskey -``` - -Note that `$(pwd)` is the working directory. diff --git a/docs/setup.en.md b/docs/setup.en.md index 56632cc36..6a54817a7 100644 --- a/docs/setup.en.md +++ b/docs/setup.en.md @@ -62,6 +62,13 @@ npm install web-push -g web-push generate-vapid-keys ``` +*(optional)* Create a twitter application +---------------------------------------------------------------- +If you want to enable the twitter integration, you need to create a twitter app at [https://developer.twitter.com/en/apply/user](https://developer.twitter.com/en/apply/user). + +In the app you need to set the oauth callback url as : https://misskey-instance/api/tw/cb + + *5.* Make configuration file ---------------------------------------------------------------- 1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`. diff --git a/locales/ja.yml b/locales/ja.yml index ecde1bb6a..310a73a64 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -70,6 +70,7 @@ common: congrats: "おめでとう" angry: "おこ" confused: "こまこまのこまり" + rip: "RIP" pudding: "Pudding" note-placeholders: @@ -89,7 +90,7 @@ common: my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" i-like-sushi: "私は(プリンよりむしろ)寿司が好き" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" - verified-user: "認証済みのユーザー" + verified-user: "公式アカウント" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" reversi: @@ -181,6 +182,9 @@ common/views/components/games/reversi/reversi.vue: common/views/components/games/reversi/reversi.game.vue: surrender: "投了" surrendered: "投了により" + is-llotheo: "石の少ない方が勝ち(ロセオ)" + looped-map: "ループマップ" + can-put-everywhere: "どこでも置けるモード" common/views/components/games/reversi/reversi.index.vue: title: "Misskey Reversi" @@ -310,6 +314,7 @@ common/views/components/signin.vue: signin: "サインイン" or: "または" signin-with-twitter: "Twitterでログイン" + login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。" common/views/components/signup.vue: username: "ユーザー名" @@ -703,9 +708,11 @@ desktop/views/components/settings.vue: circle-icons: "円形のアイコンを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" + suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" show-reply-target: "リプライ先を表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" - show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" + show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" + show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-maps: "マップの自動展開" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" @@ -893,6 +900,29 @@ desktop/views/components/window.vue: popout: "ポップアウト" close: "閉じる" +desktop/views/pages/admin/admin.vue: + dashboard: "ダッシュボード" + drive: "ドライブ" + users: "ユーザー" + update: "更新" + +desktop/views/pages/admin/admin.dashboard.vue: + dashboard: "ダッシュボード" + all-users: "全てのユーザー" + original-users: "このインスタンスのユーザー" + all-notes: "全てのノート" + original-notes: "このインスタンスのノート" + +desktop/views/pages/admin/admin.suspend-user.vue: + suspend-user: "ユーザーの凍結" + suspend: "凍結" + suspended: "凍結しました" + +desktop/views/pages/admin/admin.unsuspend-user.vue: + unsuspend-user: "ユーザーの凍結の解除" + unsuspend: "凍結の解除" + unsuspended: "凍結を解除しました" + desktop/views/pages/deck/deck.tl-column.vue: is-media-only: "メディア投稿のみ" is-media-view: "メディアビュー" @@ -1266,7 +1296,8 @@ mobile/views/pages/settings.vue: timeline: "タイムライン" show-reply-target: "リプライ先を表示する" show-my-renotes: "自分の行ったRenoteを表示する" - show-renoted-my-notes: "Renoteされた自分の投稿を表示する" + show-renoted-my-notes: "自分の投稿のRenoteを表示する" + show-local-renotes: "ローカルの投稿のRenoteを表示する" post-style: "投稿の表示スタイル" post-style-standard: "標準" post-style-smart: "スマート" diff --git a/package.json b/package.json index 64f9b577a..3d8df6aae 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "misskey", "author": "syuilo ", - "version": "5.20.1", - "clientVersion": "1.0.8105", + "version": "6.2.0", + "clientVersion": "1.0.8417", "codename": "nighthike", "main": "./built/index.js", "private": true, @@ -31,6 +31,7 @@ "@types/dateformat": "1.0.1", "@types/debug": "0.0.30", "@types/deep-equal": "1.0.1", + "@types/double-ended-queue": "2.1.0", "@types/elasticsearch": "5.0.25", "@types/file-type": "5.2.1", "@types/gulp": "3.8.36", @@ -57,9 +58,9 @@ "@types/minio": "6.0.2", "@types/mkdirp": "0.5.2", "@types/mocha": "5.2.3", - "@types/mongodb": "3.1.3", + "@types/mongodb": "3.1.4", "@types/ms": "0.7.30", - "@types/node": "10.5.7", + "@types/node": "10.7.1", "@types/portscanner": "2.1.0", "@types/pug": "2.0.4", "@types/qrcode": "1.2.0", @@ -76,10 +77,10 @@ "@types/systeminformation": "3.23.0", "@types/tmp": "0.0.33", "@types/uuid": "3.4.3", - "@types/webpack": "4.4.9", + "@types/webpack": "4.4.10", "@types/webpack-stream": "3.2.10", "@types/websocket": "0.0.39", - "@types/ws": "5.1.2", + "@types/ws": "6.0.0", "animejs": "2.2.0", "autosize": "4.0.2", "autwh": "0.1.0", @@ -97,6 +98,7 @@ "deepcopy": "0.6.3", "diskusage": "0.2.4", "dompurify": "1.0.5", + "double-ended-queue": "2.1.0-0", "elasticsearch": "15.1.1", "element-ui": "2.4.6", "emojilib": "2.3.0", @@ -145,8 +147,9 @@ "koa-slow": "2.1.0", "koa-views": "6.1.4", "loader-utils": "1.1.0", + "lodash.assign": "4.2.0", "mecab-async": "0.1.2", - "minio": "6.0.0", + "minio": "7.0.0", "mkdirp": "0.5.1", "mocha": "5.2.0", "moji": "0.5.1", @@ -160,7 +163,7 @@ "object-assign-deep": "0.4.0", "on-build-webpack": "0.1.0", "os-utils": "0.0.14", - "parse5": "5.0.0", + "parse5": "5.1.0", "portscanner": "2.2.0", "progress-bar-webpack-plugin": "1.11.0", "promise-sequential": "1.1.1", @@ -171,13 +174,13 @@ "recaptcha-promise": "0.1.3", "reconnecting-websocket": "3.2.2", "redis": "2.8.0", - "request": "2.87.0", + "request": "2.88.0", "request-promise-native": "1.0.5", "rimraf": "2.6.2", "rndstr": "1.0.0", "s-age": "1.1.2", "sass-loader": "7.1.0", - "seedrandom": "2.4.3", + "seedrandom": "2.4.4", "sharp": "0.20.5", "showdown": "1.8.6", "showdown-highlightjs-extension": "0.1.2", @@ -187,27 +190,27 @@ "style-loader": "0.22.1", "stylus": "0.54.5", "stylus-loader": "3.0.2", - "summaly": "2.1.2", + "summaly": "2.1.3", "systeminformation": "3.42.9", "syuilo-password-strength": "0.0.1", "textarea-caret": "3.1.0", "tmp": "0.0.33", "ts-loader": "4.4.1", - "ts-node": "7.0.0", + "ts-node": "7.0.1", "tslint": "5.10.0", "typescript": "2.9.2", "typescript-eslint-parser": "18.0.0", "uglify-es": "3.3.9", - "url-loader": "1.0.1", + "url-loader": "1.1.0", "uuid": "3.3.2", "v-animate-css": "0.0.2", "vue": "2.5.17", "vue-cropperjs": "2.2.1", - "vue-js-modal": "1.3.16", + "vue-js-modal": "1.3.17", "vue-json-tree-view": "2.1.4", "vue-loader": "15.3.0", "vue-router": "3.0.1", - "vue-style-loader": "4.1.1", + "vue-style-loader": "4.1.2", "vue-template-compiler": "2.5.17", "vuedraggable": "2.16.0", "vuex": "3.0.1", diff --git a/src/client/app/common/scripts/get-kao.ts b/src/client/app/common/scripts/get-kao.ts index 645196132..ca83153b9 100644 --- a/src/client/app/common/scripts/get-kao.ts +++ b/src/client/app/common/scripts/get-kao.ts @@ -1,5 +1,9 @@ -export default () => [ +const kaos = [ '(=^・・^=)', 'v(\'ω\')v', - '🐡( \'-\' 🐡 )フグパンチ!!!!' -][Math.floor(Math.random() * 3)]; + '🐡( \'-\' 🐡 )フグパンチ!!!!', + '🖕(´・_・`)🖕', + '(。>﹏<。)' +]; + +export default () => kaos[Math.floor(Math.random() * kaos.length)]; diff --git a/src/client/app/common/views/components/avatar.vue b/src/client/app/common/views/components/avatar.vue index 6685296c1..c5ac74e53 100644 --- a/src/client/app/common/views/components/avatar.vue +++ b/src/client/app/common/views/components/avatar.vue @@ -1,8 +1,16 @@ diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue index d1809d741..389934af9 100644 --- a/src/client/app/common/views/components/games/reversi/reversi.game.vue +++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue @@ -60,6 +60,12 @@ %fa:angle-double-right% + +
+

%i18n:@is-llotheo%

+

%i18n:@looped-map%

+

%i18n:@can-put-everywhere%

+
diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue index 9bba6990d..d25bd430f 100644 --- a/src/client/app/common/views/components/note-header.vue +++ b/src/client/app/common/views/components/note-header.vue @@ -2,7 +2,7 @@
{{ note.user | userName }} - %fa:bookmark% + %fa:star% admin bot cat diff --git a/src/client/app/common/views/components/reaction-icon.vue b/src/client/app/common/views/components/reaction-icon.vue index 2d5391a21..46886b8ab 100644 --- a/src/client/app/common/views/components/reaction-icon.vue +++ b/src/client/app/common/views/components/reaction-icon.vue @@ -8,6 +8,7 @@ %i18n:common.reactions.congrats% %i18n:common.reactions.angry% %i18n:common.reactions.confused% + %i18n:common.reactions.rip% diff --git a/src/client/app/config.ts b/src/client/app/config.ts index ceee0a2d6..04486ea23 100644 --- a/src/client/app/config.ts +++ b/src/client/app/config.ts @@ -22,6 +22,7 @@ declare const _CODENAME_: string; declare const _LICENSE_: string; declare const _GOOGLE_MAPS_API_KEY_: string; declare const _WELCOME_BG_URL_: string; +declare const _TWITTER_INTEGRATION_: boolean; export const host = _HOST_; export const hostname = _HOSTNAME_; @@ -47,3 +48,4 @@ export const codename = _CODENAME_; export const license = _LICENSE_; export const googleMapsApiKey = _GOOGLE_MAPS_API_KEY_; export const welcomeBgUrl = _WELCOME_BG_URL_; +export const twitterIntegration = _TWITTER_INTEGRATION_; diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts index 8175ce9b6..8dc048219 100644 --- a/src/client/app/desktop/script.ts +++ b/src/client/app/desktop/script.ts @@ -24,6 +24,7 @@ import updateBanner from './api/update-banner'; import MkIndex from './views/pages/index.vue'; import MkDeck from './views/pages/deck/deck.vue'; +import MkAdmin from './views/pages/admin/admin.vue'; import MkUser from './views/pages/user/user.vue'; import MkFavorites from './views/pages/favorites.vue'; import MkSelectDrive from './views/pages/selectdrive.vue'; @@ -55,6 +56,7 @@ init(async (launch) => { routes: [ { path: '/', name: 'index', component: MkIndex }, { path: '/deck', name: 'deck', component: MkDeck }, + { path: '/admin', name: 'admin', component: MkAdmin }, { path: '/i/customize-home', component: MkHomeCustomize }, { path: '/i/favorites', component: MkFavorites }, { path: '/i/messaging/:user', component: MkMessagingRoom }, diff --git a/src/client/app/desktop/views/components/drive.file.vue b/src/client/app/desktop/views/components/drive.file.vue index 6541a8f21..3b5be19dc 100644 --- a/src/client/app/desktop/views/components/drive.file.vue +++ b/src/client/app/desktop/views/components/drive.file.vue @@ -16,7 +16,7 @@

%i18n:@banner%

- +

{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }} @@ -99,7 +99,7 @@ export default Vue.extend({ text: '%i18n:@contextmenu.set-as-banner%', action: this.setAsBanner }] - }, { + }, /*{ type: 'nest', text: '%i18n:@contextmenu.open-in-app%', menu: [{ @@ -107,11 +107,11 @@ export default Vue.extend({ text: '%i18n:@contextmenu.add-app%...', action: this.addApp }] - }], { - closed: () => { - this.isContextmenuShowing = false; - } - }); + }*/], { + closed: () => { + this.isContextmenuShowing = false; + } + }); }, onDragstart(e) { diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue index e8077f9e3..83880fef5 100644 --- a/src/client/app/desktop/views/components/drive.folder.vue +++ b/src/client/app/desktop/views/components/drive.folder.vue @@ -67,16 +67,16 @@ export default Vue.extend({ text: '%i18n:@contextmenu.rename%', icon: '%fa:i-cursor%', action: this.rename - }, null, { + }/*, null, { type: 'item', text: '%i18n:common.delete%', icon: '%fa:R trash-alt%', action: this.deleteFolder - }], { - closed: () => { - this.isContextmenuShowing = false; - } - }); + }*/], { + closed: () => { + this.isContextmenuShowing = false; + } + }); }, onMouseover() { diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue index 6bad7c78a..d919e4a5e 100644 --- a/src/client/app/desktop/views/components/drive.vue +++ b/src/client/app/desktop/views/components/drive.vue @@ -567,6 +567,7 @@ export default Vue.extend({ // ファイル一覧取得 (this as any).api('drive/files', { folderId: this.folder ? this.folder.id : null, + untilId: this.files[this.files.length - 1].id, limit: max + 1 }).then(files => { if (files.length == max + 1) { diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue index 74bb03f4e..8b68f260f 100644 --- a/src/client/app/desktop/views/components/media-image.vue +++ b/src/client/app/desktop/views/components/media-image.vue @@ -37,7 +37,7 @@ export default Vue.extend({ style(): any { return { 'background-color': this.image.properties.avgColor && this.image.properties.avgColor.length == 3 ? `rgb(${this.image.properties.avgColor.join(',')})` : 'transparent', - 'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.url})` + 'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.thumbnailUrl})` }; } }, diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue index b6980fae7..227bcc349 100644 --- a/src/client/app/desktop/views/components/note-detail.vue +++ b/src/client/app/desktop/views/components/note-detail.vue @@ -55,15 +55,15 @@