Skip to content

Commit 45a3da6

Browse files
committed
Mail Servers Configuration
# Add Mail Servers Configuration JSON Schema ## Description Adds a JSON schema for storing mail server configurations for different domains. The schema supports flexible configuration of POP3, IMAP, and SMTP servers with strict validation rules. ## Changes ### New Schema - `src/schemas/json/mail-servers-config.json` - Main configuration schema for mail servers ### Tests - **Positive Tests** (`src/test/mail-servers-config/`): - `valid-complete.json` - Full configuration with POP3, IMAP, and SMTP - `valid-minimal-imap-smtp.json` - IMAP and SMTP only - `valid-pop-only.json` - POP3 only - `valid-multiple-protocols.json` - Various protocol combinations for different domains - `valid-default-ports.json` - Validation with default port values - **Negative Tests** (`src/negative_test/mail-servers-config/`): - `invalid-port-range.json` - Ports outside 1-65535 range - `extra-property-domain.json` - Additional properties at domain level - `extra-property-protocol.json` - Additional properties in protocol objects - `empty-object.json` - Empty object (violates minProperties: 1) - `invalid-hostname.json` - Invalid hostname format - `missing-host.json` - Missing required host field - `missing-port.json` - Missing required port field - `wrong-type.json` - Incorrect data types ### Catalog Entry Added to `src/api/json/catalog.json`: ```json { "name": "Mail Servers Configuration", "description": "Schema for storing mail server configurations", "fileMatch": [ "mail-servers-config.json", "mail-servers-config.jsonc", "mail-servers-config.json5", "*.mail-servers-config.json", "*.mail-servers-config.jsonc", "*.mail-servers-config.json5", "**/mail-servers-config.json", "**/mail-servers-config.jsonc", "**/mail-servers-config.json5" ], "url": "https://www.schemastore.org/mail-servers-config.json" } ``` ## Schema Features ### Configuration Flexibility 1. **Optional Protocols:** Each domain can contain any combination of POP3, IMAP, and SMTP protocols 2. **Strict Protocol Validation:** Each protocol requires both host and port fields 3. **No Additional Properties:** Extra properties are disallowed at both domain and protocol levels ### Data Validation - **Ports:** Restricted to valid range 1-65535 - **Hostname:** Validated against hostname format - **Default Values:** Standard ports are suggested: - POP3: 995 - IMAP: 993 - SMTP: 587 - **Minimum One Domain:** At least one domain configuration is required (`minProperties: 1`) ## Typical Usage Example ```json { "gmail.com": { "imap": {"host": "imap.gmail.com", "port": 993}, "smtp": {"host": "smtp.gmail.com", "port": 587} }, "outlook.com": { "imap": {"host": "outlook.office365.com", "port": 993}, "smtp": {"host": "smtp.office365.com", "port": 587} } } ``` ## Validation - ✅ All tests pass validation with Ajv - ✅ Schema conforms to draft-07 specification - ✅ Compatible with strict mode - ✅ Comprehensive edge case coverage ## Potential Use Cases 1. **Email Client Configuration:** Storing settings for different email providers 2. **Mailbox Migration:** Describing source and destination mail servers 3. **Infrastructure Documentation:** Centralized storage of company mail server configurations 4. **Automation Scripts:** Use in scripts for automatic email client configuration ## Compatibility - Compatible with all JSON Schema validators supporting draft-07 - Supported in VS Code, IntelliJ IDEA, and other IDEs through SchemaStore - Can be used with `yaml-language-server` for YAML files ## Checklist - Schema follows draft-07 specification - Added both positive and negative test cases - All tests pass validation - Added catalog entry with appropriate fileMatch patterns - No breaking changes to existing schemas - Schema is compatible with strict mode
1 parent 6947e22 commit 45a3da6

14 files changed

Lines changed: 226 additions & 0 deletions

src/api/json/catalog.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9344,6 +9344,22 @@
93449344
"description": "Bluebricks config for blueprints",
93459345
"fileMatch": ["bricks.json", "bricks.yaml"],
93469346
"url": "https://api.bluebricks.co/docs/schemas/latest/bricks.schema.json"
9347+
},
9348+
{
9349+
"name": "Mail Servers Configuration",
9350+
"description": "Configuration for mail servers across different domains",
9351+
"fileMatch": [
9352+
"mail-servers-config.json",
9353+
"mail-servers-config.jsonc",
9354+
"mail-servers-config.json5",
9355+
"*.mail-servers-config.json",
9356+
"*.mail-servers-config.jsonc",
9357+
"*.mail-servers-config.json5",
9358+
"**/mail-servers-config.json",
9359+
"**/mail-servers-config.jsonc",
9360+
"**/mail-servers-config.json5"
9361+
],
9362+
"url": "https://www.schemastore.org/mail-servers-config.json"
93479363
}
93489364
]
93499365
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"example.com": {
3+
"extraProperty": "not allowed",
4+
"imap": {
5+
"host": "imap.example.com",
6+
"port": 993
7+
},
8+
"smtp": {
9+
"host": "smtp.example.com",
10+
"port": 587
11+
}
12+
}
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"example.com": {
3+
"imap": {
4+
"extra": "not allowed",
5+
"host": "imap.example.com",
6+
"port": 993
7+
}
8+
}
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"example.com": {
3+
"imap": {
4+
"host": "imap.example.com",
5+
"port": 0
6+
}
7+
}
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"example.com": {
3+
"imap": {
4+
"port": 993
5+
}
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"example.com": {
3+
"imap": {
4+
"host": "imap.example.com"
5+
}
6+
}
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"example.com": {
3+
"imap": {
4+
"host": 123,
5+
"port": "993"
6+
}
7+
}
8+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://json.schemastore.org/mail-servers-config.json",
4+
"title": "Mail Servers Configuration",
5+
"description": "Schema for storing mail server configurations",
6+
"type": "object",
7+
"additionalProperties": {
8+
"type": "object",
9+
"description": "Mail service configuration for a domain",
10+
"properties": {
11+
"pop": {
12+
"type": "object",
13+
"description": "POP3 server configuration",
14+
"properties": {
15+
"host": {
16+
"type": "string",
17+
"format": "hostname",
18+
"description": "POP3 server hostname"
19+
},
20+
"port": {
21+
"type": "integer",
22+
"minimum": 1,
23+
"maximum": 65535,
24+
"default": 995,
25+
"description": "POP3 server port"
26+
}
27+
},
28+
"required": ["host", "port"],
29+
"additionalProperties": false
30+
},
31+
"imap": {
32+
"type": "object",
33+
"description": "IMAP server configuration",
34+
"properties": {
35+
"host": {
36+
"type": "string",
37+
"format": "hostname",
38+
"description": "IMAP server hostname"
39+
},
40+
"port": {
41+
"type": "integer",
42+
"minimum": 1,
43+
"maximum": 65535,
44+
"default": 993,
45+
"description": "IMAP server port"
46+
}
47+
},
48+
"required": ["host", "port"],
49+
"additionalProperties": false
50+
},
51+
"smtp": {
52+
"type": "object",
53+
"description": "SMTP server configuration",
54+
"properties": {
55+
"host": {
56+
"type": "string",
57+
"format": "hostname",
58+
"description": "SMTP server hostname"
59+
},
60+
"port": {
61+
"type": "integer",
62+
"minimum": 1,
63+
"maximum": 65535,
64+
"default": 587,
65+
"description": "SMTP server port"
66+
}
67+
},
68+
"required": ["host", "port"],
69+
"additionalProperties": false
70+
}
71+
},
72+
"additionalProperties": false
73+
},
74+
"minProperties": 1
75+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"gmail.com": {
3+
"pop": {
4+
"host": "pop.gmail.com",
5+
"port": 995
6+
},
7+
"imap": {
8+
"host": "imap.gmail.com",
9+
"port": 993
10+
},
11+
"smtp": {
12+
"host": "smtp.gmail.com",
13+
"port": 587
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)