Struct mailpot::Connection
source · pub struct Connection {
pub connection: DbConnection,
conf: Configuration,
}
Expand description
A connection to a mailpot
database.
Fields§
§connection: DbConnection
The rusqlite
connection handle.
conf: Configuration
Implementations§
source§impl Connection
impl Connection
source§impl Connection
impl Connection
sourcepub fn insert_to_queue(&self, entry: QueueEntry) -> Result<DbVal<QueueEntry>>
pub fn insert_to_queue(&self, entry: QueueEntry) -> Result<DbVal<QueueEntry>>
Insert a received email into a queue.
sourcepub fn delete_from_queue(
&mut self,
queue: Queue,
index: Vec<i64>
) -> Result<Vec<QueueEntry>>
pub fn delete_from_queue( &mut self, queue: Queue, index: Vec<i64> ) -> Result<Vec<QueueEntry>>
Delete queue entries returning the deleted values.
source§impl Connection
impl Connection
source§impl Connection
impl Connection
sourcepub fn insert_post(
&self,
list_pk: i64,
message: &[u8],
env: &Envelope
) -> Result<i64>
pub fn insert_post( &self, list_pk: i64, message: &[u8], env: &Envelope ) -> Result<i64>
Insert a mailing list post into the database.
sourcepub fn post(&mut self, env: &Envelope, raw: &[u8], _dry_run: bool) -> Result<()>
pub fn post(&mut self, env: &Envelope, raw: &[u8], _dry_run: bool) -> Result<()>
Process a new mailing list post.
fn inner_post(&mut self, env: &Envelope, raw: &[u8], _dry_run: bool) -> Result<()>
sourcepub fn request(
&mut self,
list: &DbVal<MailingList>,
request: ListRequest,
env: &Envelope,
raw: &[u8]
) -> Result<()>
pub fn request( &mut self, list: &DbVal<MailingList>, request: ListRequest, env: &Envelope, raw: &[u8] ) -> Result<()>
Process a new mailing list request.
sourcepub fn months(&self, list_pk: i64) -> Result<Vec<String>>
pub fn months(&self, list_pk: i64) -> Result<Vec<String>>
Fetch all year and month values for which at least one post exists in
yyyy-mm
format.
sourcepub fn list_post_by_message_id(
&self,
list_pk: i64,
message_id: &str
) -> Result<Option<DbVal<Post>>>
pub fn list_post_by_message_id( &self, list_pk: i64, message_id: &str ) -> Result<Option<DbVal<Post>>>
Find a post by its Message-ID
email header.
sourcepub fn send_reply_with_list_template<'ctx, F: Fn() -> Template>(
&self,
render_context: TemplateRenderContext<'ctx, F>,
recipients: impl Iterator<Item = Cow<'ctx, Address>>
) -> Result<()>
pub fn send_reply_with_list_template<'ctx, F: Fn() -> Template>( &self, render_context: TemplateRenderContext<'ctx, F>, recipients: impl Iterator<Item = Cow<'ctx, Address>> ) -> Result<()>
Helper function to send a template reply.
source§impl Connection
impl Connection
sourcepub fn list_subscriptions(&self, pk: i64) -> Result<Vec<DbVal<ListSubscription>>>
pub fn list_subscriptions(&self, pk: i64) -> Result<Vec<DbVal<ListSubscription>>>
Fetch all subscriptions of a mailing list.
sourcepub fn list_subscription(
&self,
list_pk: i64,
pk: i64
) -> Result<DbVal<ListSubscription>>
pub fn list_subscription( &self, list_pk: i64, pk: i64 ) -> Result<DbVal<ListSubscription>>
Fetch mailing list subscription.
sourcepub fn list_subscription_by_address(
&self,
list_pk: i64,
address: &str
) -> Result<DbVal<ListSubscription>>
pub fn list_subscription_by_address( &self, list_pk: i64, address: &str ) -> Result<DbVal<ListSubscription>>
Fetch mailing list subscription by their address.
sourcepub fn add_subscription(
&self,
list_pk: i64,
new_val: ListSubscription
) -> Result<DbVal<ListSubscription>>
pub fn add_subscription( &self, list_pk: i64, new_val: ListSubscription ) -> Result<DbVal<ListSubscription>>
Add subscription to mailing list.
sourcepub fn add_candidate_subscription(
&mut self,
list_pk: i64,
new_val: ListSubscription
) -> Result<DbVal<ListCandidateSubscription>>
pub fn add_candidate_subscription( &mut self, list_pk: i64, new_val: ListSubscription ) -> Result<DbVal<ListCandidateSubscription>>
Create subscription candidate.
sourcepub fn accept_candidate_subscription(
&mut self,
pk: i64
) -> Result<DbVal<ListSubscription>>
pub fn accept_candidate_subscription( &mut self, pk: i64 ) -> Result<DbVal<ListSubscription>>
Accept subscription candidate.
sourcepub fn remove_subscription(&self, list_pk: i64, address: &str) -> Result<()>
pub fn remove_subscription(&self, list_pk: i64, address: &str) -> Result<()>
Remove a subscription by their address.
sourcepub fn update_subscription(
&mut self,
change_set: ListSubscriptionChangeset
) -> Result<()>
pub fn update_subscription( &mut self, change_set: ListSubscriptionChangeset ) -> Result<()>
Update a mailing list subscription.
sourcepub fn account_by_address(&self, address: &str) -> Result<Option<DbVal<Account>>>
pub fn account_by_address(&self, address: &str) -> Result<Option<DbVal<Account>>>
Fetch account by address.
sourcepub fn account_subscriptions(
&self,
pk: i64
) -> Result<Vec<DbVal<ListSubscription>>>
pub fn account_subscriptions( &self, pk: i64 ) -> Result<Vec<DbVal<ListSubscription>>>
Fetch all subscriptions of an account by primary key.
sourcepub fn remove_account(&self, address: &str) -> Result<()>
pub fn remove_account(&self, address: &str) -> Result<()>
Remove an account by their address.
sourcepub fn update_account(&mut self, change_set: AccountChangeset) -> Result<()>
pub fn update_account(&mut self, change_set: AccountChangeset) -> Result<()>
Update an account.
source§impl Connection
impl Connection
sourcepub fn list_post_policy(&self, pk: i64) -> Result<Option<DbVal<PostPolicy>>>
pub fn list_post_policy(&self, pk: i64) -> Result<Option<DbVal<PostPolicy>>>
Fetch the post policy of a mailing list.
sourcepub fn remove_list_post_policy(&self, list_pk: i64, policy_pk: i64) -> Result<()>
pub fn remove_list_post_policy(&self, list_pk: i64, policy_pk: i64) -> Result<()>
Remove an existing list policy.
let db = Connection::open_or_create_db(config).unwrap().trusted();
let list_pk = db
.create_list(MailingList {
pk: 0,
name: "foobar chat".into(),
id: "foo-chat".into(),
address: "foo-chat@example.com".into(),
description: None,
archive_url: None,
})
.unwrap()
.pk;
db.set_list_post_policy(PostPolicy {
pk: 0,
list: list_pk,
announce_only: false,
subscription_only: true,
approval_needed: false,
open: false,
custom: false,
})
.unwrap();
db.remove_list_post_policy(1, 1).unwrap();
sourcepub fn remove_list_post_policy_panic()
pub fn remove_list_post_policy_panic()
let db = Connection::open_or_create_db(config).unwrap().trusted();
db.remove_list_post_policy(1, 1).unwrap();
sourcepub fn set_list_post_policy(
&self,
policy: PostPolicy
) -> Result<DbVal<PostPolicy>>
pub fn set_list_post_policy( &self, policy: PostPolicy ) -> Result<DbVal<PostPolicy>>
Set the unique post policy for a list.
source§impl Connection
impl Connection
sourcepub fn list_subscription_policy(
&self,
pk: i64
) -> Result<Option<DbVal<SubscriptionPolicy>>>
pub fn list_subscription_policy( &self, pk: i64 ) -> Result<Option<DbVal<SubscriptionPolicy>>>
Fetch the subscription policy of a mailing list.
sourcepub fn remove_list_subscription_policy(
&self,
list_pk: i64,
policy_pk: i64
) -> Result<()>
pub fn remove_list_subscription_policy( &self, list_pk: i64, policy_pk: i64 ) -> Result<()>
Remove an existing list policy.
let db = Connection::open_or_create_db(config).unwrap().trusted();
let list_pk = db
.create_list(MailingList {
pk: 0,
name: "foobar chat".into(),
id: "foo-chat".into(),
address: "foo-chat@example.com".into(),
description: None,
archive_url: None,
})
.unwrap()
.pk;
db.set_list_post_policy(PostPolicy {
pk: 0,
list: list_pk,
announce_only: false,
subscription_only: true,
approval_needed: false,
open: false,
custom: false,
})
.unwrap();
db.remove_list_post_policy(1, 1).unwrap();
sourcepub fn remove_list_subscription_policy_panic()
pub fn remove_list_subscription_policy_panic()
let db = Connection::open_or_create_db(config).unwrap().trusted();
db.remove_list_post_policy(1, 1).unwrap();
sourcepub fn set_list_subscription_policy(
&self,
policy: SubscriptionPolicy
) -> Result<DbVal<SubscriptionPolicy>>
pub fn set_list_subscription_policy( &self, policy: SubscriptionPolicy ) -> Result<DbVal<SubscriptionPolicy>>
Set the unique post policy for a list.
source§impl Connection
impl Connection
sourcepub fn open_db(conf: Configuration) -> Result<Self>
pub fn open_db(conf: Configuration) -> Result<Self>
Creates a new database connection.
Connection
supports a limited subset of operations by default (see
Connection::untrusted
).
Use Connection::trusted
to remove these limits.
sourcepub fn trusted(self) -> Self
pub fn trusted(self) -> Self
Removes operational limits from this connection. (see
Connection::untrusted
)
sourcepub fn untrusted(self) -> Self
pub fn untrusted(self) -> Self
Sets operational limits for this connection.
- Allow
INSERT
,DELETE
only for “queue”, “candidate_subscription”, “subscription”. - Allow
UPDATE
only for “subscription” user facing settings. - Allow
INSERT
only for “post”. - Allow read access to all tables.
- Allow
SELECT
,TRANSACTION
,SAVEPOINT
, and thestrftime
function. - Deny everything else.
sourcepub fn open_or_create_db(conf: Configuration) -> Result<Self>
pub fn open_or_create_db(conf: Configuration) -> Result<Self>
Create a database if it doesn’t exist and then open it.
sourcepub fn conf(&self) -> &Configuration
pub fn conf(&self) -> &Configuration
Returns a connection’s configuration.
sourcepub fn load_archives(&self) -> Result<()>
pub fn load_archives(&self) -> Result<()>
Loads archive databases from Configuration::data_path
, if any.
sourcepub fn lists(&self) -> Result<Vec<DbVal<MailingList>>>
pub fn lists(&self) -> Result<Vec<DbVal<MailingList>>>
Returns a vector of existing mailing lists.
sourcepub fn list(&self, pk: i64) -> Result<Option<DbVal<MailingList>>>
pub fn list(&self, pk: i64) -> Result<Option<DbVal<MailingList>>>
Fetch a mailing list by primary key.
sourcepub fn list_by_id<S: AsRef<str>>(
&self,
id: S
) -> Result<Option<DbVal<MailingList>>>
pub fn list_by_id<S: AsRef<str>>( &self, id: S ) -> Result<Option<DbVal<MailingList>>>
Fetch a mailing list by id.
sourcepub fn create_list(&self, new_val: MailingList) -> Result<DbVal<MailingList>>
pub fn create_list(&self, new_val: MailingList) -> Result<DbVal<MailingList>>
Create a new list.
sourcepub fn list_posts(
&self,
list_pk: i64,
_date_range: Option<(String, String)>
) -> Result<Vec<DbVal<Post>>>
pub fn list_posts( &self, list_pk: i64, _date_range: Option<(String, String)> ) -> Result<Vec<DbVal<Post>>>
Fetch all posts of a mailing list.
sourcepub fn list_owners(&self, pk: i64) -> Result<Vec<DbVal<ListOwner>>>
pub fn list_owners(&self, pk: i64) -> Result<Vec<DbVal<ListOwner>>>
Fetch the owners of a mailing list.
sourcepub fn remove_list_owner(&self, list_pk: i64, owner_pk: i64) -> Result<()>
pub fn remove_list_owner(&self, list_pk: i64, owner_pk: i64) -> Result<()>
Remove an owner of a mailing list.
sourcepub fn add_list_owner(&self, list_owner: ListOwner) -> Result<DbVal<ListOwner>>
pub fn add_list_owner(&self, list_owner: ListOwner) -> Result<DbVal<ListOwner>>
Add an owner of a mailing list.
sourcepub fn update_list(&mut self, change_set: MailingListChangeset) -> Result<()>
pub fn update_list(&mut self, change_set: MailingListChangeset) -> Result<()>
Update a mailing list.
sourcepub fn list_filters(
&self,
_list: &DbVal<MailingList>
) -> Vec<Box<dyn PostFilter>> ⓘ
pub fn list_filters( &self, _list: &DbVal<MailingList> ) -> Vec<Box<dyn PostFilter>> ⓘ
Return the post filters of a mailing list.