fix: honor nextcloud default account setup policy

This commit is contained in:
Tak Hoffman
2026-04-03 12:39:06 -05:00
parent d0a43cf8c0
commit 4afa720a0c
2 changed files with 34 additions and 6 deletions

View File

@@ -169,11 +169,11 @@ export const nextcloudTalkDmPolicy: ChannelSetupDmPolicy = {
channel,
policyKey: "channels.nextcloud-talk.dmPolicy",
allowFromKey: "channels.nextcloud-talk.allowFrom",
resolveConfigKeys: (_cfg, accountId) =>
accountId && accountId !== DEFAULT_ACCOUNT_ID
resolveConfigKeys: (cfg, accountId) =>
(accountId ?? resolveDefaultNextcloudTalkAccountId(cfg as CoreConfig)) !== DEFAULT_ACCOUNT_ID
? {
policyKey: `channels.nextcloud-talk.accounts.${accountId}.dmPolicy`,
allowFromKey: `channels.nextcloud-talk.accounts.${accountId}.allowFrom`,
policyKey: `channels.nextcloud-talk.accounts.${accountId ?? resolveDefaultNextcloudTalkAccountId(cfg as CoreConfig)}.dmPolicy`,
allowFromKey: `channels.nextcloud-talk.accounts.${accountId ?? resolveDefaultNextcloudTalkAccountId(cfg as CoreConfig)}.allowFrom`,
}
: {
policyKey: "channels.nextcloud-talk.dmPolicy",
@@ -182,10 +182,10 @@ export const nextcloudTalkDmPolicy: ChannelSetupDmPolicy = {
getCurrent: (cfg, accountId) =>
resolveNextcloudTalkAccount({
cfg: cfg as CoreConfig,
accountId: accountId ?? DEFAULT_ACCOUNT_ID,
accountId: accountId ?? resolveDefaultNextcloudTalkAccountId(cfg as CoreConfig),
}).config.dmPolicy ?? "pairing",
setPolicy: (cfg, policy, accountId) => {
const resolvedAccountId = accountId ?? DEFAULT_ACCOUNT_ID;
const resolvedAccountId = accountId ?? resolveDefaultNextcloudTalkAccountId(cfg as CoreConfig);
const resolved = resolveNextcloudTalkAccount({
cfg: cfg as CoreConfig,
accountId: resolvedAccountId,

View File

@@ -130,6 +130,34 @@ describe("nextcloud talk setup", () => {
});
});
it("uses configured defaultAccount for omitted DM policy account context", () => {
const base: CoreConfig = {
channels: {
"nextcloud-talk": {
defaultAccount: "work",
dmPolicy: "disabled",
accounts: {
work: {
baseUrl: "https://cloud.example.com",
botSecret: "work-secret",
dmPolicy: "allowlist",
},
},
},
},
};
expect(nextcloudTalkDmPolicy.getCurrent(base)).toBe("allowlist");
expect(nextcloudTalkDmPolicy.resolveConfigKeys?.(base)).toEqual({
policyKey: "channels.nextcloud-talk.accounts.work.dmPolicy",
allowFromKey: "channels.nextcloud-talk.accounts.work.allowFrom",
});
const next = nextcloudTalkDmPolicy.setPolicy(base, "open");
expect(next.channels?.["nextcloud-talk"]?.dmPolicy).toBe("disabled");
expect(next.channels?.["nextcloud-talk"]?.accounts?.work?.dmPolicy).toBe("open");
});
it('writes open DM policy to the named account and preserves inherited allowFrom with "*"', () => {
const next = nextcloudTalkDmPolicy.setPolicy(
{