diff --git a/CALCKEY.md b/CALCKEY.md
index dacaf77ee..e25034a46 100644
--- a/CALCKEY.md
+++ b/CALCKEY.md
@@ -68,6 +68,7 @@
- đ also triggers generic like/favorite
- [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671)
- [Timeline page for non-login users](https://github.com/misskey-dev/misskey/pull/8927)
+ - Made toggleable by instance admins, off by default
- [Add parameters to MFM rotate](https://github.com/misskey-dev/misskey/pull/8549)
- Many changes from [Foundkey](https://akkoma.dev/FoundKeyGang/Foundkey)
- 0ece67b04c3f0365057624c1068808276ccab981: refactor pages/auth.form.vue to composition API
diff --git a/locales/en-US.yml b/locales/en-US.yml
index f64a7c20d..9ac13a7e9 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -324,6 +324,7 @@ disconnectService: "Disconnect"
enableLocalTimeline: "Enable local timeline"
enableGlobalTimeline: "Enable global timeline"
enableRecommendedTimeline: "Enable recommended timeline"
+enableGuestTimeline: "Enable timelines for non-logged in users"
disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all timelines, even if they are not enabled."
registration: "Register"
enableRegistration: "Enable new user registration"
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index ecd30b42d..bb159aba3 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -324,6 +324,7 @@ disconnectService: "ćæăă"
enableLocalTimeline: "ăăŒă«ă«ăżă€ă ă©ă€ăłăæćčă«ăă"
enableGlobalTimeline: "ă°ăăŒăă«ăżă€ă ă©ă€ăłăæćčă«ăă"
enableRecommendedTimeline: "æšć„šăăăăżă€ă ă©ă€ăłăæćčă«ăă"
+enableGuestTimeline: "éăă°ă€ăłăŠăŒă¶ăŒăźăżă€ă ă©ă€ăłăæćčă«ăă"
disablingTimelinesInfo: "ăăăăźăżă€ă ă©ă€ăłăçĄćčćăăŠăăć©äŸżæ§ăźăă知çè
ăăăłăąăăŹăŒăżăŒăŻćŒăç¶ăć©çšăăăăšăă§ăăŸăă"
registration: "ç»éČ"
enableRegistration: "èȘ°ă§ăæ°èŠç»éČă§ăăăăă«ăă"
diff --git a/package.json b/package.json
index 392ab0893..bd70df317 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "misskey",
-"version": "12.118.1-calc.rc.8",
+"version": "12.118.1-calc.rc.9",
"codename": "aqua",
"repository": {
"type": "git",
diff --git a/packages/backend/migration/1660068273737GuestTimeline.js b/packages/backend/migration/1660068273737GuestTimeline.js
new file mode 100644
index 000000000..23d3bc51b
--- /dev/null
+++ b/packages/backend/migration/1660068273737GuestTimeline.js
@@ -0,0 +1,9 @@
+export class GuestTimeline1660068273737 {
+ name = 'GuestTimeline1660068273737'
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" ADD "enableGuestTimeline" boolean NOT NULL DEFAULT false`);
+ }
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableGuestTimeline"`);
+ }
+ }
diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts
index 63a4193aa..3c1612c36 100644
--- a/packages/backend/src/models/entities/meta.ts
+++ b/packages/backend/src/models/entities/meta.ts
@@ -57,6 +57,11 @@ export class Meta {
})
public disableGlobalTimeline: boolean;
+ @Column('boolean', {
+ default: false,
+ })
+ public enableGuestTimeline: boolean;
+
@Column('boolean', {
default: false,
})
diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts
index 71a217d93..afe588914 100644
--- a/packages/backend/src/server/api/endpoints/admin/meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/meta.ts
@@ -398,6 +398,7 @@ export default define(meta, paramDef, async (ps, me) => {
disableLocalTimeline: instance.disableLocalTimeline,
disableRecommendedTimeline: instance.disableRecommendedTimeline,
disableGlobalTimeline: instance.disableGlobalTimeline,
+ enableGuestTimeline: instance.enableGuestTimeline,
driveCapacityPerLocalUserMb: instance.localDriveCapacityMb,
driveCapacityPerRemoteUserMb: instance.remoteDriveCapacityMb,
emailRequiredForSignup: instance.emailRequiredForSignup,
diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
index 0220c4a7c..26745339b 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -18,6 +18,7 @@ export const paramDef = {
disableLocalTimeline: { type: 'boolean', nullable: true },
disableRecommendedTimeline: { type: 'boolean', nullable: true },
disableGlobalTimeline: { type: 'boolean', nullable: true },
+ enableGuestTimeline: { type: 'boolean', nullable: true },
useStarForReactionFallback: { type: 'boolean', nullable: true },
recommendedInstances: { type: 'array', nullable: true, items: {
type: 'string',
@@ -141,6 +142,10 @@ export default define(meta, paramDef, async (ps, me) => {
set.disableGlobalTimeline = ps.disableGlobalTimeline;
}
+ if (typeof ps.enableGuestTimeline === 'boolean') {
+ set.enableGuestTimeline = ps.enableGuestTimeline;
+ }
+
if (typeof ps.useStarForReactionFallback === 'boolean') {
set.useStarForReactionFallback = ps.useStarForReactionFallback;
}
diff --git a/packages/backend/src/server/api/endpoints/meta.ts b/packages/backend/src/server/api/endpoints/meta.ts
index ca7edc352..43a3524c1 100644
--- a/packages/backend/src/server/api/endpoints/meta.ts
+++ b/packages/backend/src/server/api/endpoints/meta.ts
@@ -88,6 +88,10 @@ export const meta = {
type: 'boolean',
optional: false, nullable: false,
},
+ enableGuestTimeline: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
driveCapacityPerLocalUserMb: {
type: 'number',
optional: false, nullable: false,
@@ -366,6 +370,7 @@ export default define(meta, paramDef, async (ps, me) => {
disableLocalTimeline: instance.disableLocalTimeline,
disableRecommendedTimeline: instance.disableRecommendedTimeline,
disableGlobalTimeline: instance.disableGlobalTimeline,
+ enableGuestTimeline: instance.enableGuestTimeline,
driveCapacityPerLocalUserMb: instance.localDriveCapacityMb,
driveCapacityPerRemoteUserMb: instance.remoteDriveCapacityMb,
emailRequiredForSignup: instance.emailRequiredForSignup,
@@ -423,6 +428,7 @@ export default define(meta, paramDef, async (ps, me) => {
localTimeLine: !instance.disableLocalTimeline,
recommendedTimeline: !instance.disableRecommendedTimeline,
globalTimeLine: !instance.disableGlobalTimeline,
+ guestTimeline: instance.enableGuestTimeline,
emailRequiredForSignup: instance.emailRequiredForSignup,
elasticsearch: config.elasticsearch ? true : false,
hcaptcha: instance.enableHcaptcha,
diff --git a/packages/backend/src/server/nodeinfo.ts b/packages/backend/src/server/nodeinfo.ts
index b4216d9d9..4e3cb6388 100644
--- a/packages/backend/src/server/nodeinfo.ts
+++ b/packages/backend/src/server/nodeinfo.ts
@@ -69,6 +69,7 @@ const nodeinfo2 = async () => {
disableLocalTimeline: meta.disableLocalTimeline,
disableRecommendedTimeline: meta.disableRecommendedTimeline,
disableGlobalTimeline: meta.disableGlobalTimeline,
+ enableGuestTimeline: meta.enableGuestTimeline,
emailRequiredForSignup: meta.emailRequiredForSignup,
enableHcaptcha: meta.enableHcaptcha,
enableRecaptcha: meta.enableRecaptcha,
diff --git a/packages/client/src/pages/admin/settings.vue b/packages/client/src/pages/admin/settings.vue
index 2871abab2..d5cf776f8 100644
--- a/packages/client/src/pages/admin/settings.vue
+++ b/packages/client/src/pages/admin/settings.vue
@@ -55,6 +55,7 @@