Skip to content

Commit

Permalink
for aliases, enable "public posting" by default when creating an alias
Browse files Browse the repository at this point in the history
and explain in more detail what it means in the webadmin interface.
will hopefully bring less confusion.

for issue #244 by exander77, thanks for reporting
  • Loading branch information
mjl- committed Nov 10, 2024
1 parent c13f181 commit 0e338b0
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -1008,7 +1008,7 @@ Print settings and members of alias.
# mox config alias add
Add new alias with one or more addresses.
Add new alias with one or more addresses and public posting enabled.
usage: mox config alias add alias@domain rcpt1@domain ...
Expand Down
4 changes: 2 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -770,13 +770,13 @@ func ctlcmdConfigAliasPrint(ctl *ctl, address string) {

func cmdConfigAliasAdd(c *cmd) {
c.params = "alias@domain rcpt1@domain ..."
c.help = `Add new alias with one or more addresses.`
c.help = `Add new alias with one or more addresses and public posting enabled.`
args := c.Parse()
if len(args) < 2 {
c.Usage()
}

alias := config.Alias{Addresses: args[1:]}
alias := config.Alias{PostPublic: true, Addresses: args[1:]}

mustLoadConfig()
ctlcmdConfigAliasAdd(xctl(), args[0], alias)
Expand Down
4 changes: 2 additions & 2 deletions webadmin/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -2358,7 +2358,7 @@ const domain = async (d) => {
e.stopPropagation();
const alias = {
Addresses: aliasAddresses.value.split('\n').map(s => s.trim()).filter(s => !!s),
PostPublic: false,
PostPublic: true,
ListMembers: false,
AllowMsgFrom: false,
// Ignored:
Expand Down Expand Up @@ -2554,7 +2554,7 @@ const domainAlias = async (d, aliasLocalpart) => {
e.preventDefault();
e.stopPropagation();
check(aliasFieldset, client.AliasUpdate(aliasLocalpart, d, postPublic.checked, listMembers.checked, allowMsgFrom.checked));
}, aliasFieldset = dom.fieldset(style({ display: 'flex', flexDirection: 'column', gap: '.5ex' }), dom.label(postPublic = dom.input(attr.type('checkbox'), alias.PostPublic ? attr.checked('') : []), ' Public, anyone can post instead of only members'), dom.label(listMembers = dom.input(attr.type('checkbox'), alias.ListMembers ? attr.checked('') : []), ' Members can list other members'), dom.label(allowMsgFrom = dom.input(attr.type('checkbox'), alias.AllowMsgFrom ? attr.checked('') : []), ' Allow messages to use the alias address in the message From header'), dom.div(style({ marginTop: '1ex' }), dom.submitbutton('Save')))), dom.br(), dom.h2('Members'), dom.p('Members receive messages sent to the alias. If a member address is in the message From header, the member will not receive the message.'), dom.table(dom.thead(dom.tr(dom.th('Address'), dom.th('Account'), dom.th())), dom.tbody((alias.Addresses || []).map((address, index) => {
}, aliasFieldset = dom.fieldset(style({ display: 'flex', flexDirection: 'column', gap: '.5ex' }), dom.label(postPublic = dom.input(attr.type('checkbox'), alias.PostPublic ? attr.checked('') : []), ' Public, anyone is allowed to send to the alias, instead of only members of the alias', attr.title('Based on address in message From header, which is assumed to be DMARC-like verified. If this setting is disabled and a non-member sends a message to the alias, the message is rejected.')), dom.label(listMembers = dom.input(attr.type('checkbox'), alias.ListMembers ? attr.checked('') : []), ' Members can list other members'), dom.label(allowMsgFrom = dom.input(attr.type('checkbox'), alias.AllowMsgFrom ? attr.checked('') : []), ' Allow messages to use the alias address in the message From header'), dom.div(style({ marginTop: '1ex' }), dom.submitbutton('Save')))), dom.br(), dom.h2('Members'), dom.p('Members receive messages sent to the alias. If a member address is in the message From header, the member will not receive the message.'), dom.table(dom.thead(dom.tr(dom.th('Address'), dom.th('Account'), dom.th())), dom.tbody((alias.Addresses || []).map((address, index) => {
const pa = (alias.ParsedAddresses || [])[index];
return dom.tr(dom.td(prewrap(address)), dom.td(dom.a(pa.AccountName, attr.href('#accounts/' + pa.AccountName))), dom.td(dom.clickbutton('Remove', async function click(e) {
await check(e.target, client.AliasAddressesRemove(aliasLocalpart, d, [address]));
Expand Down
5 changes: 3 additions & 2 deletions webadmin/admin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1347,7 +1347,7 @@ const domain = async (d: string) => {
e.stopPropagation()
const alias: api.Alias = {
Addresses: aliasAddresses.value.split('\n').map(s => s.trim()).filter(s => !!s),
PostPublic: false,
PostPublic: true,
ListMembers: false,
AllowMsgFrom: false,
// Ignored:
Expand Down Expand Up @@ -1814,7 +1814,8 @@ const domainAlias = async (d: string, aliasLocalpart: string) => {
style({display: 'flex', flexDirection: 'column', gap: '.5ex'}),
dom.label(
postPublic=dom.input(attr.type('checkbox'), alias.PostPublic ? attr.checked('') : []),
' Public, anyone can post instead of only members',
' Public, anyone is allowed to send to the alias, instead of only members of the alias',
attr.title('Based on address in message From header, which is assumed to be DMARC-like verified. If this setting is disabled and a non-member sends a message to the alias, the message is rejected.'),
),
dom.label(
listMembers=dom.input(attr.type('checkbox'), alias.ListMembers ? attr.checked('') : []),
Expand Down

0 comments on commit 0e338b0

Please sign in to comment.