Check-in [f748e99b70]
Logged in as anonymous
Overview
Comment:regex in get_id was defunct, fix regex, fix logic to filter unknown domains
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: f748e99b701a463ac31bcb5d51c297564aa92527aa45988f26812d922cda0df1
User & Date: arcade on 2026-08-01 10:24:03.733
Other Links: manifest | tags
Context
2026-08-01
10:46
expand README check-in: 880ce86a7f user: arcade tags: trunk
10:24
regex in get_id was defunct, fix regex, fix logic to filter unknown domains check-in: f748e99b70 user: arcade tags: trunk
09:06
remove lazy_static check-in: 997fb1cff4 user: arcade tags: trunk
Changes
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
				domains.insert(domain);
			} else {
				panic!("[smtp2tg.toml] can't check of domains in \"domains\": {domain}");
			}
		}
		let domains = domains.into_iter().map(|s| escape(&s))
			.collect::<Vec<String>>().join("|");
		let address = Regex::new(&format!("^(?P<user>[a-z0-9][-a-z0-9])(@({domains}))$")).stack()?;
		let relay = match settings.get_string("unknown")
			.context("[smtp2tg.toml] can't get \"unknown\" policy.\n")?.as_str()
		{
			"relay" => true,
			"deny" => false,
			_ => {
				bail!("[smtp2tg.toml] \"unknown\" should be either \"relay\" or \"deny\".\n");







|







82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
				domains.insert(domain);
			} else {
				panic!("[smtp2tg.toml] can't check of domains in \"domains\": {domain}");
			}
		}
		let domains = domains.into_iter().map(|s| escape(&s))
			.collect::<Vec<String>>().join("|");
		let address = Regex::new(&format!("^[a-z0-9][-a-z0-9]*(@({domains}))?$")).stack()?;
		let relay = match settings.get_string("unknown")
			.context("[smtp2tg.toml] can't get \"unknown\" policy.\n")?.as_str()
		{
			"relay" => true,
			"deny" => false,
			_ => {
				bail!("[smtp2tg.toml] \"unknown\" should be either \"relay\" or \"deny\".\n");
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121



122
123
124
125
126
127
128
			tg,
			fields,
			address,
		})
	}

	/// Returns id for provided email address
	pub fn get_id (&self, name_str: &str) -> Result<&ChatPeerId> {
		// here we need to store String locally to borrow it after
		let mut link = name_str;
		let name: String;
		if let Some(caps) = self.address.captures(link) {
			name = caps["name"].to_string();
			link = &name;
		}
		match self.tg.get(link) {
			Ok(addr) => Ok(addr),
			Err(_) => Ok(&self.tg.default),



		}
	}

	/// Attempt to deliver one message
	async fn relay_mail (&self) -> Result<()> {
		if let Some(headers) = &self.headers {
			let mail = mail_parser::MessageParser::new().parse(&self.data)







|
<
<
<
|
<
<
<
|
|
|
>
>
>







104
105
106
107
108
109
110
111



112



113
114
115
116
117
118
119
120
121
122
123
124
125
			tg,
			fields,
			address,
		})
	}

	/// Returns id for provided email address
	pub fn get_id (&self, name: &str) -> Result<&ChatPeerId> {



		if self.address.is_match(name) {



			match self.tg.get(name) {
				Ok(addr) => Ok(addr),
				Err(_) => Ok(&self.tg.default),
			}
		} else {
			bail!("Doesn't look like address from one of our domains.");
		}
	}

	/// Attempt to deliver one message
	async fn relay_mail (&self) -> Result<()> {
		if let Some(headers) = &self.headers {
			let mail = mail_parser::MessageParser::new().parse(&self.data)
35
36
37
38
39
40
41






42
43
		("someone", 0),
		("root", -1),
		("unknown@example.com", 0),
	];
	for (email, id) in cases {
		assert_eq!(*server.get_id(email)?, ChatPeerId::from(id), "email [{email}] expected to return id [{id}]");
	}






	Ok(())
}







>
>
>
>
>
>


35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
		("someone", 0),
		("root", -1),
		("unknown@example.com", 0),
	];
	for (email, id) in cases {
		assert_eq!(*server.get_id(email)?, ChatPeerId::from(id), "email [{email}] expected to return id [{id}]");
	}
	let cases = [
		"someone@otherdomain.net",
	];
	for email in cases {
		assert!(server.get_id(email).unwrap_err().to_string().contains("Doesn't look like address from one of our domains."), "email [{email}] expected to fail");
	}
	Ok(())
}