Struct mpot_http::Connection
source · pub struct Connection {
pub connection: Connection,
conf: Configuration,
}
Expand description
A connection to a mailpot
database.
Fields§
§connection: Connection
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>, Error>
pub fn insert_to_queue( &self, entry: QueueEntry ) -> Result<DbVal<QueueEntry>, Error>
Insert a received email into a queue.
source§impl Connection
impl Connection
source§impl Connection
impl Connection
sourcepub fn insert_post(
&self,
list_pk: i64,
message: &[u8],
env: &Envelope
) -> Result<i64, Error>
pub fn insert_post( &self, list_pk: i64, message: &[u8], env: &Envelope ) -> Result<i64, Error>
Insert a mailing list post into the database.
sourcepub fn post(
&mut self,
env: &Envelope,
raw: &[u8],
_dry_run: bool
) -> Result<(), Error>
pub fn post( &mut self, env: &Envelope, raw: &[u8], _dry_run: bool ) -> Result<(), Error>
Process a new mailing list post.
sourcepub fn request(
&mut self,
list: &DbVal<MailingList>,
request: ListRequest,
env: &Envelope,
raw: &[u8]
) -> Result<(), Error>
pub fn request( &mut self, list: &DbVal<MailingList>, request: ListRequest, env: &Envelope, raw: &[u8] ) -> Result<(), Error>
Process a new mailing list request.
sourcepub fn months(&self, list_pk: i64) -> Result<Vec<String, Global>, Error>
pub fn months(&self, list_pk: i64) -> Result<Vec<String, Global>, Error>
Fetch all year and month values for which at least one post exists in
yyyy-mm
format.
source§impl Connection
impl Connection
sourcepub fn list_subscriptions(
&self,
pk: i64
) -> Result<Vec<DbVal<ListSubscription>, Global>, Error>
pub fn list_subscriptions( &self, pk: i64 ) -> Result<Vec<DbVal<ListSubscription>, Global>, Error>
Fetch all subscriptions of a mailing list.
sourcepub fn list_subscription(
&self,
list_pk: i64,
pk: i64
) -> Result<DbVal<ListSubscription>, Error>
pub fn list_subscription( &self, list_pk: i64, pk: i64 ) -> Result<DbVal<ListSubscription>, Error>
Fetch mailing list subscription.
sourcepub fn list_subscription_by_address(
&self,
list_pk: i64,
address: &str
) -> Result<DbVal<ListSubscription>, Error>
pub fn list_subscription_by_address( &self, list_pk: i64, address: &str ) -> Result<DbVal<ListSubscription>, Error>
Fetch mailing list subscription by their address.
sourcepub fn add_subscription(
&self,
list_pk: i64,
new_val: ListSubscription
) -> Result<DbVal<ListSubscription>, Error>
pub fn add_subscription( &self, list_pk: i64, new_val: ListSubscription ) -> Result<DbVal<ListSubscription>, Error>
Add subscription to mailing list.
sourcepub fn add_candidate_subscription(
&mut self,
list_pk: i64,
new_val: ListSubscription
) -> Result<DbVal<ListCandidateSubscription>, Error>
pub fn add_candidate_subscription( &mut self, list_pk: i64, new_val: ListSubscription ) -> Result<DbVal<ListCandidateSubscription>, Error>
Create subscription candidate.
sourcepub fn accept_candidate_subscription(
&mut self,
pk: i64
) -> Result<DbVal<ListSubscription>, Error>
pub fn accept_candidate_subscription( &mut self, pk: i64 ) -> Result<DbVal<ListSubscription>, Error>
Accept subscription candidate.
sourcepub fn remove_subscription(
&self,
list_pk: i64,
address: &str
) -> Result<(), Error>
pub fn remove_subscription( &self, list_pk: i64, address: &str ) -> Result<(), Error>
Remove a subscription by their address.
sourcepub fn update_subscription(
&mut self,
change_set: ListSubscriptionChangeset
) -> Result<(), Error>
pub fn update_subscription( &mut self, change_set: ListSubscriptionChangeset ) -> Result<(), Error>
Update a mailing list subscription.
sourcepub fn account_by_address(
&self,
address: &str
) -> Result<Option<DbVal<Account>>, Error>
pub fn account_by_address( &self, address: &str ) -> Result<Option<DbVal<Account>>, Error>
Fetch account by address.
sourcepub fn account_subscriptions(
&self,
pk: i64
) -> Result<Vec<DbVal<ListSubscription>, Global>, Error>
pub fn account_subscriptions( &self, pk: i64 ) -> Result<Vec<DbVal<ListSubscription>, Global>, Error>
Fetch all subscriptions of an account by primary key.
sourcepub fn remove_account(&self, address: &str) -> Result<(), Error>
pub fn remove_account(&self, address: &str) -> Result<(), Error>
Remove an account by their address.
sourcepub fn update_account(
&mut self,
change_set: AccountChangeset
) -> Result<(), Error>
pub fn update_account( &mut self, change_set: AccountChangeset ) -> Result<(), Error>
Update an account.
source§impl Connection
impl Connection
sourcepub fn list_post_policy(
&self,
pk: i64
) -> Result<Option<DbVal<PostPolicy>>, Error>
pub fn list_post_policy( &self, pk: i64 ) -> Result<Option<DbVal<PostPolicy>>, Error>
Fetch the post policy of a mailing list.
sourcepub fn remove_list_post_policy(
&self,
list_pk: i64,
policy_pk: i64
) -> Result<(), Error>
pub fn remove_list_post_policy( &self, list_pk: i64, policy_pk: i64 ) -> Result<(), Error>
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 set_list_post_policy(
&self,
policy: PostPolicy
) -> Result<DbVal<PostPolicy>, Error>
pub fn set_list_post_policy( &self, policy: PostPolicy ) -> Result<DbVal<PostPolicy>, Error>
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>>, Error>
pub fn list_subscription_policy( &self, pk: i64 ) -> Result<Option<DbVal<SubscriptionPolicy>>, Error>
Fetch the subscription policy of a mailing list.
sourcepub fn remove_list_subscription_policy(
&self,
list_pk: i64,
policy_pk: i64
) -> Result<(), Error>
pub fn remove_list_subscription_policy( &self, list_pk: i64, policy_pk: i64 ) -> Result<(), Error>
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 set_list_subscription_policy(
&self,
policy: SubscriptionPolicy
) -> Result<DbVal<SubscriptionPolicy>, Error>
pub fn set_list_subscription_policy( &self, policy: SubscriptionPolicy ) -> Result<DbVal<SubscriptionPolicy>, Error>
Set the unique post policy for a list.
source§impl Connection
impl Connection
sourcepub fn open_db(conf: Configuration) -> Result<Connection, Error>
pub fn open_db(conf: Configuration) -> Result<Connection, Error>
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) -> Connection
pub fn trusted(self) -> Connection
Removes operational limits from this connection. (see
Connection::untrusted
)
sourcepub fn untrusted(self) -> Connection
pub fn untrusted(self) -> Connection
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<Connection, Error>
pub fn open_or_create_db(conf: Configuration) -> Result<Connection, Error>
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<(), Error>
pub fn load_archives(&self) -> Result<(), Error>
Loads archive databases from Configuration::data_path
, if any.
sourcepub fn lists(&self) -> Result<Vec<DbVal<MailingList>, Global>, Error>
pub fn lists(&self) -> Result<Vec<DbVal<MailingList>, Global>, Error>
Returns a vector of existing mailing lists.
sourcepub fn list(&self, pk: i64) -> Result<Option<DbVal<MailingList>>, Error>
pub fn list(&self, pk: i64) -> Result<Option<DbVal<MailingList>>, Error>
Fetch a mailing list by primary key.
sourcepub fn list_by_id<S>(&self, id: S) -> Result<Option<DbVal<MailingList>>, Error>where
S: AsRef<str>,
pub fn list_by_id<S>(&self, id: S) -> Result<Option<DbVal<MailingList>>, Error>where S: AsRef<str>,
Fetch a mailing list by id.
sourcepub fn create_list(
&self,
new_val: MailingList
) -> Result<DbVal<MailingList>, Error>
pub fn create_list( &self, new_val: MailingList ) -> Result<DbVal<MailingList>, Error>
Create a new list.
sourcepub fn list_posts(
&self,
list_pk: i64,
_date_range: Option<(String, String)>
) -> Result<Vec<DbVal<Post>, Global>, Error>
pub fn list_posts( &self, list_pk: i64, _date_range: Option<(String, String)> ) -> Result<Vec<DbVal<Post>, Global>, Error>
Fetch all posts of a mailing list.
sourcepub fn list_owners(
&self,
pk: i64
) -> Result<Vec<DbVal<ListOwner>, Global>, Error>
pub fn list_owners( &self, pk: i64 ) -> Result<Vec<DbVal<ListOwner>, Global>, Error>
Fetch the owners of a mailing list.
sourcepub fn remove_list_owner(&self, list_pk: i64, owner_pk: i64) -> Result<(), Error>
pub fn remove_list_owner(&self, list_pk: i64, owner_pk: i64) -> Result<(), Error>
Remove an owner of a mailing list.
sourcepub fn add_list_owner(
&self,
list_owner: ListOwner
) -> Result<DbVal<ListOwner>, Error>
pub fn add_list_owner( &self, list_owner: ListOwner ) -> Result<DbVal<ListOwner>, Error>
Add an owner of a mailing list.
sourcepub fn update_list(
&mut self,
change_set: MailingListChangeset
) -> Result<(), Error>
pub fn update_list( &mut self, change_set: MailingListChangeset ) -> Result<(), Error>
Update a mailing list.
sourcepub fn list_filters(
&self,
_list: &DbVal<MailingList>
) -> Vec<Box<dyn PostFilter + 'static, Global>, Global> ⓘ
pub fn list_filters( &self, _list: &DbVal<MailingList> ) -> Vec<Box<dyn PostFilter + 'static, Global>, Global> ⓘ
Return the post filters of a mailing list.
source§impl Connection
impl Connection
sourcepub fn new_smtp_connection(
&self
) -> Result<Pin<Box<dyn Future<Output = Result<SmtpConnection, Error>> + Send + 'static, Global>>, Error>
pub fn new_smtp_connection( &self ) -> Result<Pin<Box<dyn Future<Output = Result<SmtpConnection, Error>> + Send + 'static, Global>>, Error>
Return an SMTP connection handle if the database connection has one configured.
sourcepub async fn submit(
smtp_connection: &mut SmtpConnection,
message: &QueueEntry,
dry_run: bool
) -> impl Future<Output = Result<(), Error>>
pub async fn submit( smtp_connection: &mut SmtpConnection, message: &QueueEntry, dry_run: bool ) -> impl Future<Output = Result<(), Error>>
Submit queue items from values
to their recipients.