change wildcard match
This commit is contained in:
@@ -21,7 +21,6 @@ matrix:
|
||||
|
||||
before_install:
|
||||
- set -e
|
||||
- rustup default nightly
|
||||
- rustup component add rustfmt
|
||||
|
||||
script:
|
||||
|
||||
14
README.md
14
README.md
@@ -71,14 +71,16 @@ You can specify standard domains, or utilize [regular expressions](https://ruste
|
||||
You can update the config file at any time, updns will listen for file changes
|
||||
|
||||
```ini
|
||||
bind 0.0.0.0:53 # Binding address
|
||||
proxy 8.8.8.8:53 # Proxy address
|
||||
timeout 2000 # Proxy timeout (ms)
|
||||
bind 0.0.0.0:53 # Binding address
|
||||
proxy 8.8.8.8:53 # Proxy address
|
||||
timeout 2000 # Proxy timeout (ms)
|
||||
|
||||
# Domain matching
|
||||
google.com 1.1.1.1
|
||||
^\w+.bing.com$ 2.2.2.2
|
||||
github.com ::
|
||||
example.com 1.1.1.1
|
||||
*.example.com 2.2.2.2
|
||||
^\w+\.example\.[a-z]+$ 3.3.3.3
|
||||
|
||||
test.com ::
|
||||
|
||||
# Import from other file
|
||||
import /other/hosts
|
||||
|
||||
@@ -153,10 +153,7 @@ impl Host {
|
||||
|
||||
// *.example.com
|
||||
if Self::is_wildcard(domain) {
|
||||
let s = format!(
|
||||
"^{}$",
|
||||
domain.replace(".", r"\.").replace("*", r"([a-z]|\d|-)+")
|
||||
);
|
||||
let s = format!("^{}$", domain.replace(".", r"\.").replace("*", r"[^.]+"));
|
||||
return Ok(Host(MatchMode::Regex(Regex::new(&s)?)));
|
||||
}
|
||||
|
||||
@@ -357,3 +354,39 @@ impl Config {
|
||||
.boxed()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_host {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_create() {}
|
||||
|
||||
#[test]
|
||||
fn test_test() {
|
||||
let host = Host::new("example.com").unwrap();
|
||||
assert!(host.is_match("example.com"));
|
||||
assert!(!host.is_match("-example.com"));
|
||||
assert!(!host.is_match("example.com.cn"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_wildcard() {
|
||||
let host = Host::new("*.example.com").unwrap();
|
||||
assert!(host.is_match("test.example.com"));
|
||||
assert!(!host.is_match("test.example.test"));
|
||||
assert!(!host.is_match("test.test.com"));
|
||||
|
||||
let host = Host::new("*.example.*").unwrap();
|
||||
assert!(host.is_match("test.example.test"));
|
||||
assert!(!host.is_match("example.com"));
|
||||
assert!(!host.is_match("test.test.test"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_regex() {
|
||||
let host = Host::new("^example.com$").unwrap();
|
||||
assert!(host.is_match("example.com"));
|
||||
assert!(!host.is_match("test.example.com"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user