Merge pull request 'Fork/brand lowercase' (#23) from fork/brand-lowercase into main
ci / fork-checks (push) Successful in 15s
ci / build (push) Canceled after 31s

Reviewed-on: #23
This commit was merged in pull request #23.
This commit is contained in:
2026-09-23 04:12:06 +00:00
43 changed files with 131 additions and 131 deletions
+6 -6
View File
@@ -8,13 +8,13 @@
--- ---
**INBUXA** is a mail and collaboration server: JMAP, IMAP, POP3, SMTP, **inbuxa** is a mail and collaboration server: JMAP, IMAP, POP3, SMTP,
CalDAV, CardDAV and WebDAV, in one Rust binary, with ihasmail as its web front CalDAV, CardDAV and WebDAV, in one Rust binary, with ihasmail as its web front
end. It is a fork of [Stalwart](https://github.com/stalwartlabs/stalwart). end. It is a fork of [Stalwart](https://github.com/stalwartlabs/stalwart).
Project site: [inbuxa.org](https://inbuxa.org). Documentation: [docs.inbuxa.org](https://docs.inbuxa.org). Project site: [inbuxa.org](https://inbuxa.org). Documentation: [docs.inbuxa.org](https://docs.inbuxa.org).
Stalwart ships some features only in a paid Enterprise Edition: multi-tenancy, Stalwart ships some features only in a paid Enterprise Edition: multi-tenancy,
masked email, undelete and others. INBUXA ships everything to everybody under masked email, undelete and others. **inbuxa** ships everything to everybody under
the AGPL-3.0, rebuilding those features independently and without using any the AGPL-3.0, rebuilding those features independently and without using any
of Stalwart's Enterprise code. of Stalwart's Enterprise code.
@@ -54,18 +54,18 @@ already names, so none of their data moves.
## License and credits ## License and credits
INBUXA is free software under the [GNU Affero General Public License, **inbuxa** is free software under the [GNU Affero General Public License,
version 3](./LICENSES/AGPL-3.0-only.txt). version 3](./LICENSES/AGPL-3.0-only.txt).
It is a fork of Stalwart, copyright © Stalwart Labs LLC, **modified by It is a fork of Stalwart, copyright © Stalwart Labs LLC, **modified by
Coffey Labs in 2026**. Upstream's copyright notices are kept on every file Coffey Labs in 2026**. Upstream's copyright notices are kept on every file
they cover, and every upstream file this fork changed says so in its header, they cover, and every upstream file this fork changed says so in its header,
under the notice it came with. Stalwart's files are dual-licensed under the notice it came with. Stalwart's files are dual-licensed
AGPL-3.0-only or Stalwart's Enterprise License, and INBUXA takes them under AGPL-3.0-only or Stalwart's Enterprise License, and **inbuxa** takes them under
the AGPL-3.0 only. A few of those files also carry code from other projects the AGPL-3.0 only. A few of those files also carry code from other projects
under MIT or BSD licenses, which stays under those licenses; under MIT or BSD licenses, which stays under those licenses;
[THIRD-PARTY.md](./THIRD-PARTY.md) lists it with its notices. "Stalwart" is [THIRD-PARTY.md](./THIRD-PARTY.md) lists it with its notices. "Stalwart" is
Stalwart Labs' name. INBUXA isn't affiliated with or endorsed by Stalwart Stalwart Labs' name. **inbuxa** isn't affiliated with or endorsed by Stalwart
Labs. Labs.
The INBUXA mark reuses ihasmail's cat-and-envelope artwork. The **inbuxa** mark reuses ihasmail's cat-and-envelope artwork.
+1 -1
View File
@@ -395,7 +395,7 @@ components:
WWW-Authenticate: WWW-Authenticate:
schema: schema:
type: string type: string
example: Bearer realm="INBUXA Server" example: Bearer realm="inbuxa Server"
content: content:
application/problem+json: application/problem+json:
schema: schema:
+3 -3
View File
@@ -105,7 +105,7 @@ pub fn first_party_clients(
if let Some(url) = admin_url.map(|url| url.trim().trim_end_matches('/')).filter(|url| !url.is_empty()) { if let Some(url) = admin_url.map(|url| url.trim().trim_end_matches('/')).filter(|url| !url.is_empty()) {
clients.push(FirstPartyClient { clients.push(FirstPartyClient {
client_id: ADMIN_CLIENT_ID.to_string(), client_id: ADMIN_CLIENT_ID.to_string(),
description: "INBUXA Admin".to_string(), description: "inbuxa Admin".to_string(),
redirect_uris: vec![format!("{url}/oauth/callback")], redirect_uris: vec![format!("{url}/oauth/callback")],
secret: None, secret: None,
}); });
@@ -356,7 +356,7 @@ mod tests {
fn web_interface() -> Application { fn web_interface() -> Application {
Application { Application {
description: "INBUXA Web Interface".to_string(), description: "inbuxa Web Interface".to_string(),
enabled: true, enabled: true,
url_prefix: Map::new(vec!["/admin".into(), "/account".into()]), url_prefix: Map::new(vec!["/admin".into(), "/account".into()]),
..Default::default() ..Default::default()
@@ -370,7 +370,7 @@ mod tests {
clients, clients,
vec![FirstPartyClient { vec![FirstPartyClient {
client_id: WEB_INTERFACE_CLIENT_ID.to_string(), client_id: WEB_INTERFACE_CLIENT_ID.to_string(),
description: "INBUXA Web Interface (served by this server)".to_string(), description: "inbuxa Web Interface (served by this server)".to_string(),
redirect_uris: vec![ redirect_uris: vec![
"https://mail.example.org/admin/oauth/callback".to_string(), "https://mail.example.org/admin/oauth/callback".to_string(),
"https://mail.example.org/account/oauth/callback".to_string(), "https://mail.example.org/account/oauth/callback".to_string(),
+15 -15
View File
@@ -299,28 +299,28 @@ impl LegacyProtocol {
pub fn refusal(&self, scope: RefusalScope) -> &'static str { pub fn refusal(&self, scope: RefusalScope) -> &'static str {
match (scope, self) { match (scope, self) {
(RefusalScope::Server, LegacyProtocol::Imap) => { (RefusalScope::Server, LegacyProtocol::Imap) => {
"This server allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "This server allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
} }
(RefusalScope::Server, LegacyProtocol::Pop3) => { (RefusalScope::Server, LegacyProtocol::Pop3) => {
"[AUTH] This server allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "[AUTH] This server allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
} }
(RefusalScope::Server, LegacyProtocol::ManageSieve) => { (RefusalScope::Server, LegacyProtocol::ManageSieve) => {
"This server allows only INBUXA webmail and JMAP apps." "This server allows only inbuxa webmail and JMAP apps."
} }
(RefusalScope::Server, LegacyProtocol::Submission) => { (RefusalScope::Server, LegacyProtocol::Submission) => {
"535 5.7.0 This server allows only INBUXA webmail and JMAP apps. This mail app can't send.\r\n" "535 5.7.0 This server allows only inbuxa webmail and JMAP apps. This mail app can't send.\r\n"
} }
(RefusalScope::Tenant(_), LegacyProtocol::Imap) => { (RefusalScope::Tenant(_), LegacyProtocol::Imap) => {
"Your organization allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "Your organization allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
} }
(RefusalScope::Tenant(_), LegacyProtocol::Pop3) => { (RefusalScope::Tenant(_), LegacyProtocol::Pop3) => {
"[AUTH] Your organization allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "[AUTH] Your organization allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
} }
(RefusalScope::Tenant(_), LegacyProtocol::ManageSieve) => { (RefusalScope::Tenant(_), LegacyProtocol::ManageSieve) => {
"Your organization allows only INBUXA webmail and JMAP apps." "Your organization allows only inbuxa webmail and JMAP apps."
} }
(RefusalScope::Tenant(_), LegacyProtocol::Submission) => { (RefusalScope::Tenant(_), LegacyProtocol::Submission) => {
"535 5.7.0 Your organization allows only INBUXA webmail and JMAP apps. This mail app can't send.\r\n" "535 5.7.0 Your organization allows only inbuxa webmail and JMAP apps. This mail app can't send.\r\n"
} }
} }
} }
@@ -541,7 +541,7 @@ mod tests {
let server = RefusalScope::Server; let server = RefusalScope::Server;
assert_eq!( assert_eq!(
LegacyProtocol::Imap.refusal(server), LegacyProtocol::Imap.refusal(server),
"This server allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "This server allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
); );
assert!( assert!(
LegacyProtocol::Pop3 LegacyProtocol::Pop3
@@ -550,11 +550,11 @@ mod tests {
); );
assert_eq!( assert_eq!(
LegacyProtocol::ManageSieve.refusal(server), LegacyProtocol::ManageSieve.refusal(server),
"This server allows only INBUXA webmail and JMAP apps." "This server allows only inbuxa webmail and JMAP apps."
); );
assert_eq!( assert_eq!(
LegacyProtocol::Submission.refusal(server), LegacyProtocol::Submission.refusal(server),
"535 5.7.0 This server allows only INBUXA webmail and JMAP apps. This mail app can't send.\r\n" "535 5.7.0 This server allows only inbuxa webmail and JMAP apps. This mail app can't send.\r\n"
); );
} }
@@ -564,19 +564,19 @@ mod tests {
let tenant = RefusalScope::Tenant(7); let tenant = RefusalScope::Tenant(7);
assert_eq!( assert_eq!(
LegacyProtocol::Imap.refusal(tenant), LegacyProtocol::Imap.refusal(tenant),
"Your organization allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "Your organization allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
); );
assert_eq!( assert_eq!(
LegacyProtocol::Pop3.refusal(tenant), LegacyProtocol::Pop3.refusal(tenant),
"[AUTH] Your organization allows only INBUXA webmail and JMAP apps. This mail app can't sign in." "[AUTH] Your organization allows only inbuxa webmail and JMAP apps. This mail app can't sign in."
); );
assert_eq!( assert_eq!(
LegacyProtocol::ManageSieve.refusal(tenant), LegacyProtocol::ManageSieve.refusal(tenant),
"Your organization allows only INBUXA webmail and JMAP apps." "Your organization allows only inbuxa webmail and JMAP apps."
); );
assert_eq!( assert_eq!(
LegacyProtocol::Submission.refusal(tenant), LegacyProtocol::Submission.refusal(tenant),
"535 5.7.0 Your organization allows only INBUXA webmail and JMAP apps. This mail app can't send.\r\n" "535 5.7.0 Your organization allows only inbuxa webmail and JMAP apps. This mail app can't send.\r\n"
); );
let err = LegacyProtocol::Imap.refused(tenant, Some("example.org".into())); let err = LegacyProtocol::Imap.refused(tenant, Some("example.org".into()));
assert_eq!(err.value_as_str(trc::Key::Policy), Some("tenant")); assert_eq!(err.value_as_str(trc::Key::Policy), Some("tenant"));
+1 -1
View File
@@ -40,7 +40,7 @@ impl OpenIdDirectory {
pub async fn new(config: OidcConfig) -> Result<Self, OidcError> { pub async fn new(config: OidcConfig) -> Result<Self, OidcError> {
let http = utils::http::http_client_builder(false) let http = utils::http::http_client_builder(false)
.user_agent("INBUXA/1.0") // types::brand!(); this crate does not depend on types .user_agent("inbuxa/1.0") // types::brand!(); this crate does not depend on types
.timeout(Duration::from_secs(30)) .timeout(Duration::from_secs(30))
.build() .build()
.map_err(|e| OidcError::Network(format!("HTTP client build failed: {e}")))?; .map_err(|e| OidcError::Network(format!("HTTP client build failed: {e}")))?;
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "inbuxa-features" name = "inbuxa-features"
description = "INBUXA's rebuilt features: behavior Stalwart ships only in its Enterprise Edition, rebuilt clean-room" description = "inbuxa's rebuilt features: behavior Stalwart ships only in its Enterprise Edition, rebuilt clean-room"
license = "AGPL-3.0-only" license = "AGPL-3.0-only"
version = "0.16.22" version = "0.16.22"
edition = "2024" edition = "2024"
+2 -2
View File
@@ -1,11 +1,11 @@
[package] [package]
name = "inbuxa" name = "inbuxa"
description = "INBUXA Mail and Collaboration Server, a fork of Stalwart" description = "inbuxa mail and collaboration server, a fork of Stalwart"
authors = [ "Stalwart Labs LLC <[email protected]>"] authors = [ "Stalwart Labs LLC <[email protected]>"]
homepage = "https://inbuxa.org" homepage = "https://inbuxa.org"
keywords = ["imap", "jmap", "smtp", "email", "mail", "webdav", "server"] keywords = ["imap", "jmap", "smtp", "email", "mail", "webdav", "server"]
categories = ["email"] categories = ["email"]
# Upstream offers AGPL-3.0-only OR LicenseRef-SEL; INBUXA takes the AGPL only. # Upstream offers AGPL-3.0-only OR LicenseRef-SEL; inbuxa takes the AGPL only.
license = "AGPL-3.0-only" license = "AGPL-3.0-only"
version = "0.16.23" version = "0.16.23"
edition = "2024" edition = "2024"
+5 -5
View File
@@ -732,7 +732,7 @@ impl Pickle for AddressBook {
impl Default for AddressBook { impl Default for AddressBook {
fn default() -> Self { fn default() -> Self {
Self { Self {
default_display_name: Some("INBUXA Address Book".to_string()), default_display_name: Some("inbuxa Address Book".to_string()),
default_href_name: Some("default".to_string()), default_href_name: Some("default".to_string()),
max_v_card_size: 524288u64, max_v_card_size: 524288u64,
max_address_books: Some(250u64), max_address_books: Some(250u64),
@@ -4597,7 +4597,7 @@ impl Pickle for Calendar {
impl Default for Calendar { impl Default for Calendar {
fn default() -> Self { fn default() -> Self {
Self { Self {
default_display_name: Some("INBUXA Calendar".to_string()), default_display_name: Some("inbuxa Calendar".to_string()),
default_href_name: Some("default".to_string()), default_href_name: Some("default".to_string()),
max_attendees: 20u64, max_attendees: 20u64,
max_recurrence_expansions: 3000u64, max_recurrence_expansions: 3000u64,
@@ -4734,7 +4734,7 @@ impl Default for CalendarAlarm {
allow_external_rcpts: false, allow_external_rcpts: false,
enable: true, enable: true,
from_email: Default::default(), from_email: Default::default(),
from_name: "INBUXA Calendar".to_string(), from_name: "inbuxa Calendar".to_string(),
min_trigger_interval: Duration::from_millis(3600000), min_trigger_interval: Duration::from_millis(3600000),
template: Default::default(), template: Default::default(),
} }
@@ -28310,7 +28310,7 @@ impl MtaStageConnect {
ExpressionContext { ExpressionContext {
expr: &self.smtp_greeting, expr: &self.smtp_greeting,
default: Some(Expression { default: Some(Expression {
else_: "system('hostname') + ' INBUXA ESMTP at your service'".to_string(), else_: "system('hostname') + ' inbuxa ESMTP at your service'".to_string(),
..Default::default() ..Default::default()
}), }),
property: Property::SmtpGreeting, property: Property::SmtpGreeting,
@@ -28374,7 +28374,7 @@ impl Default for MtaStageConnect {
fn default() -> Self { fn default() -> Self {
Self { Self {
smtp_greeting: Expression { smtp_greeting: Expression {
else_: "system('hostname') + ' INBUXA ESMTP at your service'".to_string(), else_: "system('hostname') + ' inbuxa ESMTP at your service'".to_string(),
..Default::default() ..Default::default()
}, },
hostname: Expression { hostname: Expression {
+1 -1
View File
@@ -205,7 +205,7 @@ impl ScimResponse {
if error.status == 401 { if error.status == 401 {
response.headers.push(( response.headers.push((
"WWW-Authenticate", "WWW-Authenticate",
"Bearer realm=\"INBUXA SCIM\"".to_string(), "Bearer realm=\"inbuxa SCIM\"".to_string(),
)); ));
} }
response response
+1 -1
View File
@@ -47,7 +47,7 @@ impl RegistryStore {
.collect::<String>(); .collect::<String>();
eprintln!(); eprintln!();
eprintln!("════════════════════════════════════════════════════════════"); eprintln!("════════════════════════════════════════════════════════════");
eprintln!("🔑 INBUXA bootstrap mode - temporary administrator account"); eprintln!("🔑 inbuxa bootstrap mode - temporary administrator account");
eprintln!(); eprintln!();
eprintln!(" username: admin"); eprintln!(" username: admin");
eprintln!(" password: {password}"); eprintln!(" password: {password}");
+3 -3
View File
@@ -3729,8 +3729,8 @@ impl EventType {
EventType::Security(SecurityEvent::LegacyProtocolsChanged) => { EventType::Security(SecurityEvent::LegacyProtocolsChanged) => {
"Legacy mail protocols switch changed" "Legacy mail protocols switch changed"
} }
EventType::Server(ServerEvent::Startup) => "Starting INBUXA Server", EventType::Server(ServerEvent::Startup) => "Starting inbuxa Server",
EventType::Server(ServerEvent::Shutdown) => "Shutting down INBUXA Server", EventType::Server(ServerEvent::Shutdown) => "Shutting down inbuxa Server",
EventType::Server(ServerEvent::StartupError) => "Server startup error", EventType::Server(ServerEvent::StartupError) => "Server startup error",
EventType::Server(ServerEvent::ThreadError) => "Server thread error", EventType::Server(ServerEvent::ThreadError) => "Server thread error",
EventType::Server(ServerEvent::Licensing) => "Server licensing event", EventType::Server(ServerEvent::Licensing) => "Server licensing event",
@@ -3983,7 +3983,7 @@ impl EventType {
EventType::Auth(AuthEvent::ClientRegistration) => "Authentication error", EventType::Auth(AuthEvent::ClientRegistration) => "Authentication error",
// inbuxa: legacy-protocols LP-6 // inbuxa: legacy-protocols LP-6
EventType::Auth(AuthEvent::LegacyProtocolRefused) => { EventType::Auth(AuthEvent::LegacyProtocolRefused) => {
"This server allows only INBUXA webmail and JMAP apps" "This server allows only inbuxa webmail and JMAP apps"
} }
EventType::Auth(AuthEvent::Error) => "Authentication error", EventType::Auth(AuthEvent::Error) => "Authentication error",
EventType::Auth(AuthEvent::CredentialExpired) => "Credential expired", EventType::Auth(AuthEvent::CredentialExpired) => "Credential expired",
+1 -1
View File
@@ -18,7 +18,7 @@
#[macro_export] #[macro_export]
macro_rules! brand { macro_rules! brand {
() => { () => {
"INBUXA" "inbuxa"
}; };
} }
+1 -1
View File
@@ -147,7 +147,7 @@ pub fn build_http_client(
allow_invalid_certs: bool, allow_invalid_certs: bool,
) -> Result<Client, String> { ) -> Result<Client, String> {
let mut headers = build_http_headers(raw_headers, username, password, token, content_type)?; let mut headers = build_http_headers(raw_headers, username, password, token, content_type)?;
headers.insert(USER_AGENT, "INBUXA/1.0.0".parse().unwrap()); // types::brand!(); utils does not depend on types headers.insert(USER_AGENT, "inbuxa/1.0.0".parse().unwrap()); // types::brand!(); utils does not depend on types
match http_client_builder(allow_invalid_certs) match http_client_builder(allow_invalid_certs)
.connect_timeout(timeout) .connect_timeout(timeout)
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
wa2yYpZjVWiT3bW8anintWsnNSjDQUXa8U-Va-s6mZQ rWqJwNJkqgKsbC1eqcEmmIAMtJPmnlDlThR2ZtW_N1c
+1 -1
View File
@@ -6,7 +6,7 @@
<key>Label</key> <key>Label</key>
<string>inbuxa.mail</string> <string>inbuxa.mail</string>
<key>ServiceDescription</key> <key>ServiceDescription</key>
<string>INBUXA</string> <string>inbuxa</string>
<key>ProgramArguments</key> <key>ProgramArguments</key>
<array> <array>
<string>__PATH__/bin/inbuxa</string> <string>__PATH__/bin/inbuxa</string>
+1 -1
View File
@@ -1,5 +1,5 @@
[Unit] [Unit]
Description=INBUXA Server Description=inbuxa Server
Conflicts=postfix.service sendmail.service exim4.service Conflicts=postfix.service sendmail.service exim4.service
ConditionPathExists=__PATH__/etc/config.json ConditionPathExists=__PATH__/etc/config.json
After=network-online.target After=network-online.target
+4 -4
View File
@@ -49,7 +49,7 @@ HTTP = "http://127.0.0.1:18080"
# made to speak. # made to speak.
PORTS = {"imap": 18993, "pop3": 18995, "submissions": 18465, "smtp": 18025} PORTS = {"imap": 18993, "pop3": 18995, "submissions": 18465, "smtp": 18025}
TLS_PORTS = {18993, 18995, 18465} TLS_PORTS = {18993, 18995, 18465}
SMTP_REFUSAL = ("535 5.7.0 This server allows only INBUXA webmail and JMAP apps. " SMTP_REFUSAL = ("535 5.7.0 This server allows only inbuxa webmail and JMAP apps. "
"This mail app can't send.") "This mail app can't send.")
INBUXA = "urn:inbuxa:jmap" INBUXA = "urn:inbuxa:jmap"
failures = [] failures = []
@@ -333,7 +333,7 @@ def tenant_checks(admin, admin_pw, account):
"and still enabled for an account outside the tenant (test 13)") "and still enabled for an account outside the tenant (test 13)")
# Refused on the tenant's domain, every way in the same words (tests 6-8). # Refused on the tenant's domain, every way in the same words (tests 6-8).
imap_no = ("NO [ALERT] Your organization allows only INBUXA webmail and JMAP apps. " imap_no = ("NO [ALERT] Your organization allows only inbuxa webmail and JMAP apps. "
"This mail app can't sign in.") "This mail app can't sign in.")
check(imap_login(PORTS["imap"], tu, user_pw) == imap_no, check(imap_login(PORTS["imap"], tu, user_pw) == imap_no,
"the tenant's user is refused over IMAP with the right password (test 6)") "the tenant's user is refused over IMAP with the right password (test 6)")
@@ -341,10 +341,10 @@ def tenant_checks(admin, admin_pw, account):
check(imap_login(PORTS["imap"], "[email protected]", "x") == imap_no, check(imap_login(PORTS["imap"], "[email protected]", "x") == imap_no,
"and a made-up address on the domain gets the same (test 7)") "and a made-up address on the domain gets the same (test 7)")
check(pop3_login(PORTS["pop3"], tu, user_pw) == check(pop3_login(PORTS["pop3"], tu, user_pw) ==
"-ERR [AUTH] Your organization allows only INBUXA webmail and JMAP apps. " "-ERR [AUTH] Your organization allows only inbuxa webmail and JMAP apps. "
"This mail app can't sign in.", "POP3 refuses in its own form (test 8)") "This mail app can't sign in.", "POP3 refuses in its own form (test 8)")
check(smtp_auths(PORTS["submissions"], tu, [user_pw])[0] == check(smtp_auths(PORTS["submissions"], tu, [user_pw])[0] ==
"535 5.7.0 Your organization allows only INBUXA webmail and JMAP apps. " "535 5.7.0 Your organization allows only inbuxa webmail and JMAP apps. "
"This mail app can't send.", "submission refuses in its own form (test 8)") "This mail app can't send.", "submission refuses in its own form (test 8)")
check(imap_login(PORTS["imap"], admin, admin_pw).startswith("OK"), check(imap_login(PORTS["imap"], admin, admin_pw).startswith("OK"),
"an account on another domain signs in over IMAP normally (test 6)") "an account on another domain signs in over IMAP normally (test 6)")
+3 -3
View File
@@ -61,7 +61,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count:
summary.summary: Text("Meet me maybe") summary.summary: Text("Meet me maybe")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
X-MICROSOFT-CDO-OWNERAPPTID:299828133 X-MICROSOFT-CDO-OWNERAPPTID:299828133
@@ -176,7 +176,7 @@ summary.summary: Text("Meet me maybe")
~summary.description: Text("This is the event description") ~summary.description: Text("This is the event description")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
X-MICROSOFT-CDO-OWNERAPPTID:299828133 X-MICROSOFT-CDO-OWNERAPPTID:299828133
@@ -224,7 +224,7 @@ END:VCALENDAR
# Make sure the original alarms are preserved # Make sure the original alarms are preserved
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
X-MICROSOFT-CDO-OWNERAPPTID:299828133 X-MICROSOFT-CDO-OWNERAPPTID:299828133
+2 -2
View File
@@ -64,7 +64,7 @@ summary.location: Text("Conference Room A")
summary.summary: Text("Review Accounts") summary.summary: Text("Review Accounts")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:Conference Room A LOCATION:Conference Room A
@@ -114,7 +114,7 @@ summary.location: Text("Conference Room A")
summary.summary: Text("Review Accounts") summary.summary: Text("Review Accounts")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:Conference Room A LOCATION:Conference Room A
+3 -3
View File
@@ -146,7 +146,7 @@ summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 })
summary.summary: Text("Conference") summary.summary: Text("Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -402,7 +402,7 @@ summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 })
summary.summary: Text("Conference") summary.summary: Text("Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -450,7 +450,7 @@ summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 })
summary.summary: Text("Conference") summary.summary: Text("Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -37,7 +37,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: Some(Partia
summary.summary: Text("IETF Calendaring Working Group Meeting") summary.summary: Text("IETF Calendaring Working Group Meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
CLASS:PUBLIC CLASS:PUBLIC
@@ -117,7 +117,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: Some(Partia
summary.summary: Text("IETF Calendaring Working Group Meeting") summary.summary: Text("IETF Calendaring Working Group Meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
CLASS:PUBLIC CLASS:PUBLIC
@@ -207,7 +207,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: Some(Partia
summary.summary: Text("IETF Calendaring Working Group Meeting") summary.summary: Text("IETF Calendaring Working Group Meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CANCELLED STATUS:CANCELLED
@@ -226,7 +226,7 @@ END:VCALENDAR
# Make sure B has the cancelled event # Make sure B has the cancelled event
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
CLASS:PUBLIC CLASS:PUBLIC
@@ -358,7 +358,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: Some(Partia
summary.summary: Text("IETF Calendaring Working Group Meeting") summary.summary: Text("IETF Calendaring Working Group Meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
CLASS:PUBLIC CLASS:PUBLIC
@@ -386,7 +386,7 @@ END:VCALENDAR
# Make sure B has the complete event including all updates # Make sure B has the complete event including all updates
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
CLASS:PUBLIC CLASS:PUBLIC
@@ -538,7 +538,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: Some(Partia
summary.summary: Text("IETF Calendaring Working Group Meeting") summary.summary: Text("IETF Calendaring Working Group Meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
DESCRIPTION:IETF-C&S Conference Call DESCRIPTION:IETF-C&S Conference Call
@@ -564,7 +564,7 @@ END:VCALENDAR
# Make sure all instances in B were deleted # Make sure all instances in B were deleted
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
CLASS:PUBLIC CLASS:PUBLIC
@@ -677,7 +677,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count:
summary.summary: Text("Review Accounts") summary.summary: Text("Review Accounts")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:The White Room LOCATION:The White Room
@@ -742,7 +742,7 @@ summary.summary: Text("Review Accounts")
~summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count: None, interval: None, bysecond: [], byminute: [], byhour: [], byday: [ICalendarDay { ordwk: None, weekday: Tuesday }], bymonthday: [], byyearday: [], byweekno: [], bymonth: [], bysetpos: [], wkst: Some(Sunday), rscale: None, skip: None }) ~summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count: None, interval: None, bysecond: [], byminute: [], byhour: [], byday: [ICalendarDay { ordwk: None, weekday: Tuesday }], bymonthday: [], byyearday: [], byweekno: [], bymonth: [], bysetpos: [], wkst: Some(Sunday), rscale: None, skip: None })
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:The White Room LOCATION:The White Room
@@ -770,7 +770,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count:
summary.summary: Text("Review Accounts") summary.summary: Text("Review Accounts")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:The Red Room LOCATION:The Red Room
@@ -791,7 +791,7 @@ END:VCALENDAR
# Make sure B has the updated event # Make sure B has the updated event
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:The White Room LOCATION:The White Room
@@ -812,7 +812,7 @@ END:VCALENDAR
# Make sure C has the updated event # Make sure C has the updated event
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
LOCATION:The Red Room LOCATION:The Red Room
@@ -853,7 +853,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count:
summary.summary: Text("Review Accounts") summary.summary: Text("Review Accounts")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Review Accounts SUMMARY:Review Accounts
@@ -919,7 +919,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count:
summary.summary: Text("Weekly Sync") summary.summary: Text("Weekly Sync")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Weekly Sync SUMMARY:Weekly Sync
@@ -967,7 +967,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Weekly, until: None, count:
summary.summary: Text("Weekly Sync") summary.summary: Text("Weekly Sync")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Weekly Sync SUMMARY:Weekly Sync
+20 -20
View File
@@ -32,7 +32,7 @@ summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 })
summary.summary: Text("Conference") summary.summary: Text("Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -61,7 +61,7 @@ END:VCALENDAR
# Make sure B receives the request # Make sure B receives the request
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -88,7 +88,7 @@ END:VCALENDAR
> put [email protected] [email protected] > put [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VEVENT BEGIN:VEVENT
DTSTAMP:19970701T200000Z DTSTAMP:19970701T200000Z
SEQUENCE:1 SEQUENCE:1
@@ -119,7 +119,7 @@ summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 })
summary.summary: Text("Conference") summary.summary: Text("Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Conference SUMMARY:Conference
@@ -198,7 +198,7 @@ summary.summary: Text("Phone Conference")
~summary.summary: Text("Conference") ~summary.summary: Text("Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -228,7 +228,7 @@ END:VCALENDAR
# Make sure C receives the request # Make sure C receives the request
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -256,7 +256,7 @@ END:VCALENDAR
> put [email protected] [email protected] > put [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VEVENT BEGIN:VEVENT
DTSTAMP:19970701T180000Z DTSTAMP:19970701T180000Z
UID:[email protected] UID:[email protected]
@@ -287,7 +287,7 @@ summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 })
summary.summary: Text("Phone Conference") summary.summary: Text("Phone Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Phone Conference SUMMARY:Phone Conference
@@ -313,7 +313,7 @@ summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 })
summary.summary: Text("Phone Conference") summary.summary: Text("Phone Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -343,7 +343,7 @@ END:VCALENDAR
# Make sure E receives the request # Make sure E receives the request
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -398,7 +398,7 @@ END:VCALENDAR
> put [email protected] [email protected] > put [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VEVENT BEGIN:VEVENT
DTSTAMP:19970701T180000Z DTSTAMP:19970701T180000Z
SEQUENCE:2 SEQUENCE:2
@@ -430,7 +430,7 @@ summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 })
summary.summary: Text("Phone Conference") summary.summary: Text("Phone Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Phone Conference SUMMARY:Phone Conference
@@ -479,7 +479,7 @@ END:VCALENDAR
# Make sure C receives the reply # Make sure C receives the reply
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -508,7 +508,7 @@ END:VCALENDAR
> put [email protected] [email protected] > put [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VEVENT BEGIN:VEVENT
DTSTAMP:19970701T180000Z DTSTAMP:19970701T180000Z
SEQUENCE:2 SEQUENCE:2
@@ -540,7 +540,7 @@ summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 })
summary.summary: Text("Phone Conference") summary.summary: Text("Phone Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Phone Conference SUMMARY:Phone Conference
@@ -564,7 +564,7 @@ END:VCALENDAR
# Make sure C receives the reply # Make sure C receives the reply
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -650,7 +650,7 @@ summary.summary: Text("Phone Conference")
~summary.attendee: Participants([ItipParticipant { email: "[email protected]", name: None, is_organizer: true }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }, ItipParticipant { email: "[email protected]", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }]) ~summary.attendee: Participants([ItipParticipant { email: "[email protected]", name: None, is_organizer: true }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }, ItipParticipant { email: "[email protected]", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "[email protected]", name: None, is_organizer: false }])
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CONFIRMED STATUS:CONFIRMED
@@ -681,7 +681,7 @@ summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 })
summary.summary: Text("Phone Conference") summary.summary: Text("Phone Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CANCELLED STATUS:CANCELLED
@@ -702,7 +702,7 @@ END:VCALENDAR
# Make sure B receives the cancelation # Make sure B receives the cancelation
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CANCELLED STATUS:CANCELLED
@@ -727,7 +727,7 @@ summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 })
summary.summary: Text("Phone Conference") summary.summary: Text("Phone Conference")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CANCELLED STATUS:CANCELLED
+9 -9
View File
@@ -32,7 +32,7 @@ summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 })
summary.summary: Text("Create the requirements document") summary.summary: Text("Create the requirements document")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
PRIORITY:1 PRIORITY:1
@@ -57,7 +57,7 @@ END:VCALENDAR
# Make sure B received the todo # Make sure B received the todo
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
PRIORITY:1 PRIORITY:1
@@ -103,7 +103,7 @@ summary.attendee: Participants([ItipParticipant { email: "[email protected]", name:
summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 }) summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 })
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
STATUS:IN-PROCESS STATUS:IN-PROCESS
@@ -172,7 +172,7 @@ summary.attendee: Participants([ItipParticipant { email: "[email protected]", name:
summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 }) summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 })
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
PERCENT-COMPLETE:75 PERCENT-COMPLETE:75
@@ -241,7 +241,7 @@ summary.attendee: Participants([ItipParticipant { email: "[email protected]", name:
summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 }) summary.dtstart: Time(ItipTime { start: 867776400, tz_id: 32768 })
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
DUE:19970722T170000Z DUE:19970722T170000Z
@@ -317,7 +317,7 @@ summary.summary: Text("Send Status Reports to Area Managers")
~summary.summary: Text("Create the requirements document") ~summary.summary: Text("Create the requirements document")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
PRIORITY:1 PRIORITY:1
@@ -347,7 +347,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: None, count
summary.summary: Text("Create the requirements document") summary.summary: Text("Create the requirements document")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
STATUS:CANCELLED STATUS:CANCELLED
@@ -367,7 +367,7 @@ END:VCALENDAR
# Make sure "C" received the cancel request # Make sure "C" received the cancel request
> get [email protected] [email protected] > get [email protected] [email protected]
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
PRIORITY:1 PRIORITY:1
@@ -451,7 +451,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Monthly, until: None, count
summary.summary: Text("Send Status Reports to Area Managers") summary.summary: Text("Send Status Reports to Area Managers")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VTODO BEGIN:VTODO
PERCENT-COMPLETE:75 PERCENT-COMPLETE:75
+4 -4
View File
@@ -47,7 +47,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Daily, until: None, count:
summary.summary: Text("Review Internet-Draft") summary.summary: Text("Review Internet-Draft")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Review Internet-Draft SUMMARY:Review Internet-Draft
@@ -89,7 +89,7 @@ END:VCALENDAR
# Make sure the participant receives the event # Make sure the participant receives the event
> get [email protected] 9263504FD3AD > get [email protected] 9263504FD3AD
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Review Internet-Draft SUMMARY:Review Internet-Draft
@@ -185,7 +185,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Daily, until: None, count:
summary.summary: Text("Review Internet-Draft") summary.summary: Text("Review Internet-Draft")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Review Internet-Draft SUMMARY:Review Internet-Draft
@@ -343,7 +343,7 @@ summary.rrule: Rrule(ICalendarRecurrenceRule { freq: Daily, until: None, count:
summary.summary: Text("Review Internet-Draft") summary.summary: Text("Review Internet-Draft")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Review Internet-Draft SUMMARY:Review Internet-Draft
+3 -3
View File
@@ -30,7 +30,7 @@ summary.dtstart: Time(ItipTime { start: 1243958400, tz_id: 32768 })
summary.summary: Text("Lunch") summary.summary: Text("Lunch")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Lunch SUMMARY:Lunch
@@ -83,7 +83,7 @@ END:VCALENDAR
# Make sure the message was received by the attendees # Make sure the message was received by the attendees
> get [email protected] 9263504FD3AD > get [email protected] 9263504FD3AD
BEGIN:VCALENDAR BEGIN:VCALENDAR
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Lunch SUMMARY:Lunch
@@ -170,7 +170,7 @@ summary.dtstart: Time(ItipTime { start: 1243958400, tz_id: 32768 })
summary.summary: Text("Lunch") summary.summary: Text("Lunch")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Lunch SUMMARY:Lunch
+4 -4
View File
@@ -26,7 +26,7 @@ summary.dtstart: Time(ItipTime { start: 1794322800, tz_id: 433 })
summary.summary: Text("Berlin meeting") summary.summary: Text("Berlin meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Berlin meeting SUMMARY:Berlin meeting
@@ -92,7 +92,7 @@ summary.dtstart: Time(ItipTime { start: 1794322800, tz_id: 433 })
summary.summary: Text("Berlin meeting") summary.summary: Text("Berlin meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REPLY METHOD:REPLY
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Berlin meeting SUMMARY:Berlin meeting
@@ -144,7 +144,7 @@ summary.dtstart: Time(ItipTime { start: 1794322800, tz_id: 433 })
summary.summary: Text("Berlin meeting") summary.summary: Text("Berlin meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:CANCEL METHOD:CANCEL
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
STATUS:CANCELLED STATUS:CANCELLED
@@ -228,7 +228,7 @@ summary.dtstart: Time(ItipTime { start: 1794322800, tz_id: 433 })
summary.summary: Text("Berlin meeting") summary.summary: Text("Berlin meeting")
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST METHOD:REQUEST
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
VERSION:2.0 VERSION:2.0
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Berlin meeting SUMMARY:Berlin meeting
+1 -1
View File
@@ -47,7 +47,7 @@ pub async fn test(imap: &mut ImapConnection, _imap_check: &mut ImapConnection) {
imap.send("ID").await; imap.send("ID").await;
imap.assert_read(Type::Tagged, ResponseType::Ok) imap.assert_read(Type::Tagged, ResponseType::Ok)
.await .await
.assert_contains("* ID (\"name\" \"INBUXA\" \"version\" "); .assert_contains("* ID (\"name\" \"inbuxa\" \"version\" ");
// Login should be disabled // Login should be disabled
imap.send("LOGIN [email protected] secret").await; imap.send("LOGIN [email protected] secret").await;
+2 -2
View File
@@ -45,7 +45,7 @@ pub async fn test(test: &TestServer) {
list[0], list[0],
json!({ json!({
"id": default_calendar_id, "id": default_calendar_id,
"name": "INBUXA Calendar ([email protected])", "name": "inbuxa Calendar ([email protected])",
"description": null, "description": null,
"sortOrder": 0, "sortOrder": 0,
"isSubscribed": true, "isSubscribed": true,
@@ -310,7 +310,7 @@ pub async fn test(test: &TestServer) {
})); }));
response.list()[1].assert_is_equal(json!({ response.list()[1].assert_is_equal(json!({
"id": default_calendar_id, "id": default_calendar_id,
"name": "INBUXA Calendar ([email protected])", "name": "inbuxa Calendar ([email protected])",
"description": (), "description": (),
"sortOrder": 0, "sortOrder": 0,
"isSubscribed": true, "isSubscribed": true,
+2 -2
View File
@@ -38,7 +38,7 @@ pub async fn test(test: &TestServer) {
assert_eq!( assert_eq!(
list[0], list[0],
json!({ json!({
"name": "INBUXA Address Book ([email protected])", "name": "inbuxa Address Book ([email protected])",
"description": (), "description": (),
"sortOrder": 0, "sortOrder": 0,
"isSubscribed": true, "isSubscribed": true,
@@ -148,7 +148,7 @@ pub async fn test(test: &TestServer) {
"id": addressbook_id, "id": addressbook_id,
}), }),
json!({ json!({
"name": "INBUXA Address Book ([email protected])", "name": "inbuxa Address Book ([email protected])",
"description": (), "description": (),
"sortOrder": 0, "sortOrder": 0,
"isSubscribed": true, "isSubscribed": true,
+1 -1
View File
@@ -106,7 +106,7 @@ async fn discovery(scim: &ScimTest) {
); );
assert!( assert!(
!config.body.contains("stalw"), !config.body.contains("stalw"),
"SCIM-4: documentation is INBUXA's own" "SCIM-4: documentation is inbuxa's own"
); );
let types = anonymous.get("/ResourceTypes").await; let types = anonymous.get("/ResourceTypes").await;
+1 -1
View File
@@ -503,7 +503,7 @@ pub async fn branding_compat() {
let admin = std::env::var("INBUXA_COMPAT_ADMIN").expect("INBUXA_COMPAT_ADMIN"); let admin = std::env::var("INBUXA_COMPAT_ADMIN").expect("INBUXA_COMPAT_ADMIN");
assert!( assert!(
std::env::var("NO_INSERT").is_ok(), std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped" "NO_INSERT must be set, or the copy of inbuxa's data is wiped"
); );
let test = TestServerBuilder::new("branding_compat") let test = TestServerBuilder::new("branding_compat")
.await .await
+1 -1
View File
@@ -431,7 +431,7 @@ pub async fn masked_email_compat() {
.expect("masks JSON"); .expect("masks JSON");
assert!( assert!(
std::env::var("NO_INSERT").is_ok(), std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped" "NO_INSERT must be set, or the copy of inbuxa's data is wiped"
); );
let test = TestServerBuilder::new("masked_email_compat") let test = TestServerBuilder::new("masked_email_compat")
+1 -1
View File
@@ -908,7 +908,7 @@ pub async fn tenant_compat() {
.expect("expected JSON"); .expect("expected JSON");
assert!( assert!(
std::env::var("NO_INSERT").is_ok(), std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped" "NO_INSERT must be set, or the copy of inbuxa's data is wiped"
); );
let test = TestServerBuilder::new("tenant_compat") let test = TestServerBuilder::new("tenant_compat")
+1 -1
View File
@@ -618,7 +618,7 @@ pub async fn undelete_compat() {
.expect("archived items JSON"); .expect("archived items JSON");
assert!( assert!(
std::env::var("NO_INSERT").is_ok(), std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped" "NO_INSERT must be set, or the copy of inbuxa's data is wiped"
); );
let test = TestServerBuilder::new("undelete_compat") let test = TestServerBuilder::new("undelete_compat")
+2 -2
View File
@@ -907,7 +907,7 @@ const REPORT_10: &str = r#"<?xml version="1.0" encoding="utf-8" ?>
const REPORT_10_RESPONSE: &str = r#"BEGIN:VCALENDAR const REPORT_10_RESPONSE: &str = r#"BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VFREEBUSY BEGIN:VFREEBUSY
DTSTART:20060104T140000Z DTSTART:20060104T140000Z
DTEND:20060105T220000Z DTEND:20060105T220000Z
@@ -928,7 +928,7 @@ const REPORT_11: &str = r#"<?xml version="1.0" encoding="utf-8" ?>
const REPORT_11_RESPONSE: &str = r#"BEGIN:VCALENDAR const REPORT_11_RESPONSE: &str = r#"BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VFREEBUSY BEGIN:VFREEBUSY
DTSTART:20060101T000000Z DTSTART:20060101T000000Z
DTEND:20060104T140000Z DTEND:20060104T140000Z