Merge pull request 'setting: Infer [email.incoming].PORT from .USE_TLS' (#3366) from algernon/forgejo:this-bool-can-hold-many-ports-in-it into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3366 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
		
				commit
				
					
						20537e87a4
					
				
			
		
					 4 changed files with 113 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -38,6 +38,24 @@ func loadIncomingEmailFrom(rootCfg ConfigProvider) {
 | 
			
		|||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Handle aliases
 | 
			
		||||
	sec := rootCfg.Section("email.incoming")
 | 
			
		||||
	if sec.HasKey("USER") && !sec.HasKey("USERNAME") {
 | 
			
		||||
		IncomingEmail.Username = sec.Key("USER").String()
 | 
			
		||||
	}
 | 
			
		||||
	if sec.HasKey("PASSWD") && !sec.HasKey("PASSWORD") {
 | 
			
		||||
		IncomingEmail.Password = sec.Key("PASSWD").String()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Infer Port if not set
 | 
			
		||||
	if IncomingEmail.Port == 0 {
 | 
			
		||||
		if IncomingEmail.UseTLS {
 | 
			
		||||
			IncomingEmail.Port = 993
 | 
			
		||||
		} else {
 | 
			
		||||
			IncomingEmail.Port = 143
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := checkReplyToAddress(IncomingEmail.ReplyToAddress); err != nil {
 | 
			
		||||
		log.Fatal("Invalid incoming_mail.REPLY_TO_ADDRESS (%s): %v", IncomingEmail.ReplyToAddress, err)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										74
									
								
								modules/setting/incoming_email_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								modules/setting/incoming_email_test.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
 | 
			
		||||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package setting
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Test_loadIncomingEmailFrom(t *testing.T) {
 | 
			
		||||
	makeBaseConfig := func() (ConfigProvider, ConfigSection) {
 | 
			
		||||
		cfg, _ := NewConfigProviderFromData("")
 | 
			
		||||
		sec := cfg.Section("email.incoming")
 | 
			
		||||
		sec.NewKey("ENABLED", "true")
 | 
			
		||||
		sec.NewKey("REPLY_TO_ADDRESS", "forge+%{token}@example.com")
 | 
			
		||||
 | 
			
		||||
		return cfg, sec
 | 
			
		||||
	}
 | 
			
		||||
	resetIncomingEmailPort := func() func() {
 | 
			
		||||
		return func() {
 | 
			
		||||
			IncomingEmail.Port = 0
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	t.Run("aliases", func(t *testing.T) {
 | 
			
		||||
		cfg, sec := makeBaseConfig()
 | 
			
		||||
		sec.NewKey("USER", "jane.doe@example.com")
 | 
			
		||||
		sec.NewKey("PASSWD", "y0u'll n3v3r gUess th1S!!1")
 | 
			
		||||
 | 
			
		||||
		loadIncomingEmailFrom(cfg)
 | 
			
		||||
 | 
			
		||||
		assert.EqualValues(t, "jane.doe@example.com", IncomingEmail.Username)
 | 
			
		||||
		assert.EqualValues(t, "y0u'll n3v3r gUess th1S!!1", IncomingEmail.Password)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	t.Run("Port settings", func(t *testing.T) {
 | 
			
		||||
		t.Run("no port, no tls", func(t *testing.T) {
 | 
			
		||||
			defer resetIncomingEmailPort()()
 | 
			
		||||
			cfg, sec := makeBaseConfig()
 | 
			
		||||
 | 
			
		||||
			// False is the default, but we test it explicitly.
 | 
			
		||||
			sec.NewKey("USE_TLS", "false")
 | 
			
		||||
 | 
			
		||||
			loadIncomingEmailFrom(cfg)
 | 
			
		||||
 | 
			
		||||
			assert.EqualValues(t, 143, IncomingEmail.Port)
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		t.Run("no port, with tls", func(t *testing.T) {
 | 
			
		||||
			defer resetIncomingEmailPort()()
 | 
			
		||||
			cfg, sec := makeBaseConfig()
 | 
			
		||||
 | 
			
		||||
			sec.NewKey("USE_TLS", "true")
 | 
			
		||||
 | 
			
		||||
			loadIncomingEmailFrom(cfg)
 | 
			
		||||
 | 
			
		||||
			assert.EqualValues(t, 993, IncomingEmail.Port)
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		t.Run("port overrides tls", func(t *testing.T) {
 | 
			
		||||
			defer resetIncomingEmailPort()()
 | 
			
		||||
			cfg, sec := makeBaseConfig()
 | 
			
		||||
 | 
			
		||||
			sec.NewKey("PORT", "1993")
 | 
			
		||||
			sec.NewKey("USE_TLS", "true")
 | 
			
		||||
 | 
			
		||||
			loadIncomingEmailFrom(cfg)
 | 
			
		||||
 | 
			
		||||
			assert.EqualValues(t, 1993, IncomingEmail.Port)
 | 
			
		||||
		})
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -134,6 +134,14 @@ func loadMailerFrom(rootCfg ConfigProvider) {
 | 
			
		|||
		sec.Key("PROTOCOL").SetValue("smtp+starttls")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Handle aliases
 | 
			
		||||
	if sec.HasKey("USERNAME") && !sec.HasKey("USER") {
 | 
			
		||||
		sec.Key("USER").SetValue(sec.Key("USERNAME").String())
 | 
			
		||||
	}
 | 
			
		||||
	if sec.HasKey("PASSWORD") && !sec.HasKey("PASSWD") {
 | 
			
		||||
		sec.Key("PASSWD").SetValue(sec.Key("PASSWORD").String())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Set default values & validate
 | 
			
		||||
	sec.Key("NAME").MustString(AppName)
 | 
			
		||||
	sec.Key("PROTOCOL").In("", []string{"smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy"})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,4 +38,17 @@ func Test_loadMailerFrom(t *testing.T) {
 | 
			
		|||
			assert.EqualValues(t, kase.SMTPPort, MailService.SMTPPort)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	t.Run("property aliases", func(t *testing.T) {
 | 
			
		||||
		cfg, _ := NewConfigProviderFromData("")
 | 
			
		||||
		sec := cfg.Section("mailer")
 | 
			
		||||
		sec.NewKey("ENABLED", "true")
 | 
			
		||||
		sec.NewKey("USERNAME", "jane.doe@example.com")
 | 
			
		||||
		sec.NewKey("PASSWORD", "y0u'll n3v3r gUess th1S!!1")
 | 
			
		||||
 | 
			
		||||
		loadMailerFrom(cfg)
 | 
			
		||||
 | 
			
		||||
		assert.EqualValues(t, "jane.doe@example.com", MailService.User)
 | 
			
		||||
		assert.EqualValues(t, "y0u'll n3v3r gUess th1S!!1", MailService.Passwd)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue