Run 'cargo fmt' to format code (#489)
This commit is contained in:
committed by
Baptiste Gelez
parent
732f514da7
commit
b945d1f602
+139
-173
@@ -1,6 +1,5 @@
|
||||
use activitypub::{
|
||||
actor::Person, collection::OrderedCollection, object::Image, Activity, CustomObject,
|
||||
Endpoint,
|
||||
actor::Person, collection::OrderedCollection, object::Image, Activity, CustomObject, Endpoint,
|
||||
};
|
||||
use bcrypt;
|
||||
use chrono::{NaiveDateTime, Utc};
|
||||
@@ -27,7 +26,10 @@ use rocket::{
|
||||
request::{self, FromRequest, Request},
|
||||
};
|
||||
use serde_json;
|
||||
use std::{cmp::PartialEq, hash::{Hash, Hasher}};
|
||||
use std::{
|
||||
cmp::PartialEq,
|
||||
hash::{Hash, Hasher},
|
||||
};
|
||||
use url::Url;
|
||||
use webfinger::*;
|
||||
|
||||
@@ -41,7 +43,7 @@ use posts::Post;
|
||||
use safe_string::SafeString;
|
||||
use schema::users;
|
||||
use search::Searcher;
|
||||
use {ap_url, Connection, BASE_URL, USE_HTTPS, Error, Result};
|
||||
use {ap_url, Connection, Error, Result, BASE_URL, USE_HTTPS};
|
||||
|
||||
pub type CustomPerson = CustomObject<ApSignature, Person>;
|
||||
|
||||
@@ -97,42 +99,24 @@ impl User {
|
||||
insert!(users, NewUser, |inserted, conn| {
|
||||
let instance = inserted.get_instance(conn)?;
|
||||
if inserted.outbox_url.is_empty() {
|
||||
inserted.outbox_url = instance.compute_box(
|
||||
USER_PREFIX,
|
||||
&inserted.username,
|
||||
"outbox",
|
||||
);
|
||||
inserted.outbox_url = instance.compute_box(USER_PREFIX, &inserted.username, "outbox");
|
||||
}
|
||||
|
||||
if inserted.inbox_url.is_empty() {
|
||||
inserted.inbox_url = instance.compute_box(
|
||||
USER_PREFIX,
|
||||
&inserted.username,
|
||||
"inbox",
|
||||
);
|
||||
inserted.inbox_url = instance.compute_box(USER_PREFIX, &inserted.username, "inbox");
|
||||
}
|
||||
|
||||
if inserted.ap_url.is_empty() {
|
||||
inserted.ap_url = instance.compute_box(
|
||||
USER_PREFIX,
|
||||
&inserted.username,
|
||||
"",
|
||||
);
|
||||
inserted.ap_url = instance.compute_box(USER_PREFIX, &inserted.username, "");
|
||||
}
|
||||
|
||||
if inserted.shared_inbox_url.is_none() {
|
||||
inserted.shared_inbox_url = Some(ap_url(&format!(
|
||||
"{}/inbox",
|
||||
instance.public_domain
|
||||
)));
|
||||
inserted.shared_inbox_url = Some(ap_url(&format!("{}/inbox", instance.public_domain)));
|
||||
}
|
||||
|
||||
if inserted.followers_endpoint.is_empty() {
|
||||
inserted.followers_endpoint = instance.compute_box(
|
||||
USER_PREFIX,
|
||||
&inserted.username,
|
||||
"followers",
|
||||
);
|
||||
inserted.followers_endpoint =
|
||||
instance.compute_box(USER_PREFIX, &inserted.username, "followers");
|
||||
}
|
||||
|
||||
if inserted.fqn.is_empty() {
|
||||
@@ -162,7 +146,8 @@ impl User {
|
||||
|
||||
for blog in Blog::find_for_author(conn, self)?
|
||||
.iter()
|
||||
.filter(|b| b.count_authors(conn).map(|c| c <= 1).unwrap_or(false)) {
|
||||
.filter(|b| b.count_authors(conn).map(|c| c <= 1).unwrap_or(false))
|
||||
{
|
||||
blog.delete(conn, searcher)?;
|
||||
}
|
||||
// delete the posts if they is the only author
|
||||
@@ -180,10 +165,10 @@ impl User {
|
||||
.count()
|
||||
.load(conn)?
|
||||
.first()
|
||||
.unwrap_or(&0) > &0;
|
||||
.unwrap_or(&0)
|
||||
> &0;
|
||||
if !has_other_authors {
|
||||
Post::get(conn, post_id)?
|
||||
.delete(&(conn, searcher))?;
|
||||
Post::get(conn, post_id)?.delete(&(conn, searcher))?;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,12 +198,18 @@ impl User {
|
||||
.map_err(Error::from)
|
||||
}
|
||||
|
||||
pub fn update(&self, conn: &Connection, name: String, email: String, summary: String) -> Result<User> {
|
||||
pub fn update(
|
||||
&self,
|
||||
conn: &Connection,
|
||||
name: String,
|
||||
email: String,
|
||||
summary: String,
|
||||
) -> Result<User> {
|
||||
diesel::update(self)
|
||||
.set((
|
||||
users::display_name.eq(name),
|
||||
users::email.eq(email),
|
||||
users::summary_html.eq(utils::md_to_html(&summary,"").0),
|
||||
users::summary_html.eq(utils::md_to_html(&summary, "").0),
|
||||
users::summary.eq(summary),
|
||||
))
|
||||
.execute(conn)?;
|
||||
@@ -278,16 +269,13 @@ impl User {
|
||||
}
|
||||
|
||||
pub fn fetch_from_url(conn: &Connection, url: &str) -> Result<User> {
|
||||
User::fetch(url).and_then(|json| User::from_activity(
|
||||
conn,
|
||||
&json,
|
||||
Url::parse(url)?.host_str()?,
|
||||
))
|
||||
User::fetch(url)
|
||||
.and_then(|json| User::from_activity(conn, &json, Url::parse(url)?.host_str()?))
|
||||
}
|
||||
|
||||
fn from_activity(conn: &Connection, acct: &CustomPerson, inst: &str) -> Result<User> {
|
||||
let instance = Instance::find_by_domain(conn, inst)
|
||||
.or_else(|_| Instance::insert(
|
||||
let instance = Instance::find_by_domain(conn, inst).or_else(|_| {
|
||||
Instance::insert(
|
||||
conn,
|
||||
NewInstance {
|
||||
name: inst.to_owned(),
|
||||
@@ -301,9 +289,15 @@ impl User {
|
||||
short_description_html: String::new(),
|
||||
long_description_html: String::new(),
|
||||
},
|
||||
))?;
|
||||
)
|
||||
})?;
|
||||
|
||||
if acct.object.ap_actor_props.preferred_username_string()?.contains(&['<', '>', '&', '@', '\'', '"'][..]) {
|
||||
if acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.preferred_username_string()?
|
||||
.contains(&['<', '>', '&', '@', '\'', '"'][..])
|
||||
{
|
||||
return Err(Error::InvalidValue);
|
||||
}
|
||||
let user = User::insert(
|
||||
@@ -314,20 +308,11 @@ impl User {
|
||||
.ap_actor_props
|
||||
.preferred_username_string()
|
||||
.unwrap(),
|
||||
display_name: acct
|
||||
.object
|
||||
.object_props
|
||||
.name_string()?,
|
||||
outbox_url: acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.outbox_string()?,
|
||||
inbox_url: acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.inbox_string()?,
|
||||
display_name: acct.object.object_props.name_string()?,
|
||||
outbox_url: acct.object.ap_actor_props.outbox_string()?,
|
||||
inbox_url: acct.object.ap_actor_props.inbox_string()?,
|
||||
is_admin: false,
|
||||
summary:acct
|
||||
summary: acct
|
||||
.object
|
||||
.object_props
|
||||
.summary_string()
|
||||
@@ -342,10 +327,7 @@ impl User {
|
||||
email: None,
|
||||
hashed_password: None,
|
||||
instance_id: instance.id,
|
||||
ap_url: acct
|
||||
.object
|
||||
.object_props
|
||||
.id_string()?,
|
||||
ap_url: acct.object.object_props.id_string()?,
|
||||
public_key: acct
|
||||
.custom_props
|
||||
.public_key_publickey()?
|
||||
@@ -357,10 +339,7 @@ impl User {
|
||||
.endpoints_endpoint()
|
||||
.and_then(|e| e.shared_inbox_string())
|
||||
.ok(),
|
||||
followers_endpoint: acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.followers_string()?,
|
||||
followers_endpoint: acct.object.ap_actor_props.followers_string()?,
|
||||
avatar_id: None,
|
||||
},
|
||||
)?;
|
||||
@@ -392,26 +371,15 @@ impl User {
|
||||
.object_props
|
||||
.url_string()?,
|
||||
&self,
|
||||
).ok();
|
||||
)
|
||||
.ok();
|
||||
|
||||
diesel::update(self)
|
||||
.set((
|
||||
users::username.eq(json
|
||||
.object
|
||||
.ap_actor_props
|
||||
.preferred_username_string()?),
|
||||
users::display_name.eq(json
|
||||
.object
|
||||
.object_props
|
||||
.name_string()?),
|
||||
users::outbox_url.eq(json
|
||||
.object
|
||||
.ap_actor_props
|
||||
.outbox_string()?),
|
||||
users::inbox_url.eq(json
|
||||
.object
|
||||
.ap_actor_props
|
||||
.inbox_string()?),
|
||||
users::username.eq(json.object.ap_actor_props.preferred_username_string()?),
|
||||
users::display_name.eq(json.object.object_props.name_string()?),
|
||||
users::outbox_url.eq(json.object.ap_actor_props.outbox_string()?),
|
||||
users::inbox_url.eq(json.object.ap_actor_props.inbox_string()?),
|
||||
users::summary.eq(SafeString::new(
|
||||
&json
|
||||
.object
|
||||
@@ -419,10 +387,7 @@ impl User {
|
||||
.summary_string()
|
||||
.unwrap_or_default(),
|
||||
)),
|
||||
users::followers_endpoint.eq(json
|
||||
.object
|
||||
.ap_actor_props
|
||||
.followers_string()?),
|
||||
users::followers_endpoint.eq(json.object.ap_actor_props.followers_string()?),
|
||||
users::avatar_id.eq(avatar.map(|a| a.id)),
|
||||
users::last_fetched_date.eq(Utc::now().naive_utc()),
|
||||
users::public_key.eq(json
|
||||
@@ -441,7 +406,8 @@ impl User {
|
||||
}
|
||||
|
||||
pub fn auth(&self, pass: &str) -> bool {
|
||||
self.hashed_password.clone()
|
||||
self.hashed_password
|
||||
.clone()
|
||||
.map(|hashed| bcrypt::verify(pass, hashed.as_ref()).unwrap_or(false))
|
||||
.unwrap_or(false)
|
||||
}
|
||||
@@ -468,8 +434,7 @@ impl User {
|
||||
let n_acts = acts.len();
|
||||
let mut coll = OrderedCollection::default();
|
||||
coll.collection_props.items = serde_json::to_value(acts)?;
|
||||
coll.collection_props
|
||||
.set_total_items_u64(n_acts as u64)?;
|
||||
coll.collection_props.set_total_items_u64(n_acts as u64)?;
|
||||
Ok(ActivityStream::new(coll))
|
||||
}
|
||||
|
||||
@@ -483,12 +448,11 @@ impl User {
|
||||
.into_iter()
|
||||
.collect::<Vec<_>>()
|
||||
.join(", "),
|
||||
)?
|
||||
)?,
|
||||
)
|
||||
.send()?;
|
||||
let text = &res.text()?;
|
||||
let json: serde_json::Value =
|
||||
serde_json::from_str(text)?;
|
||||
let json: serde_json::Value = serde_json::from_str(text)?;
|
||||
Ok(json["items"]
|
||||
.as_array()
|
||||
.unwrap_or(&vec![])
|
||||
@@ -507,7 +471,7 @@ impl User {
|
||||
.into_iter()
|
||||
.collect::<Vec<_>>()
|
||||
.join(", "),
|
||||
)?
|
||||
)?,
|
||||
)
|
||||
.send()?;
|
||||
let text = &res.text()?;
|
||||
@@ -531,7 +495,9 @@ impl User {
|
||||
Ok(posts
|
||||
.into_iter()
|
||||
.filter_map(|p| {
|
||||
p.create_activity(conn).ok().and_then(|a| serde_json::to_value(a).ok())
|
||||
p.create_activity(conn)
|
||||
.ok()
|
||||
.and_then(|a| serde_json::to_value(a).ok())
|
||||
})
|
||||
.collect::<Vec<serde_json::Value>>())
|
||||
}
|
||||
@@ -555,7 +521,11 @@ impl User {
|
||||
.map_err(Error::from)
|
||||
}
|
||||
|
||||
pub fn get_followers_page(&self, conn: &Connection, (min, max): (i32, i32)) -> Result<Vec<User>> {
|
||||
pub fn get_followers_page(
|
||||
&self,
|
||||
conn: &Connection,
|
||||
(min, max): (i32, i32),
|
||||
) -> Result<Vec<User>> {
|
||||
use schema::follows;
|
||||
let follows = Follow::belonging_to(self).select(follows::follower_id);
|
||||
users::table
|
||||
@@ -584,7 +554,11 @@ impl User {
|
||||
.map_err(Error::from)
|
||||
}
|
||||
|
||||
pub fn get_followed_page(&self, conn: &Connection, (min, max): (i32, i32)) -> Result<Vec<User>> {
|
||||
pub fn get_followed_page(
|
||||
&self,
|
||||
conn: &Connection,
|
||||
(min, max): (i32, i32),
|
||||
) -> Result<Vec<User>> {
|
||||
use schema::follows;
|
||||
let follows = follows::table
|
||||
.filter(follows::follower_id.eq(self.id))
|
||||
@@ -653,33 +627,32 @@ impl User {
|
||||
}
|
||||
|
||||
pub fn get_keypair(&self) -> Result<PKey<Private>> {
|
||||
PKey::from_rsa(
|
||||
Rsa::private_key_from_pem(
|
||||
self.private_key
|
||||
.clone()?
|
||||
.as_ref(),
|
||||
)?,
|
||||
).map_err(Error::from)
|
||||
PKey::from_rsa(Rsa::private_key_from_pem(
|
||||
self.private_key.clone()?.as_ref(),
|
||||
)?)
|
||||
.map_err(Error::from)
|
||||
}
|
||||
|
||||
pub fn rotate_keypair(&self, conn: &Connection) -> Result<PKey<Private>> {
|
||||
if self.private_key.is_none() {
|
||||
return Err(Error::InvalidValue)
|
||||
return Err(Error::InvalidValue);
|
||||
}
|
||||
if (Utc::now().naive_utc() - self.last_fetched_date).num_minutes() < 10 {
|
||||
//rotated recently
|
||||
self.get_keypair()
|
||||
} else {
|
||||
let (public_key, private_key) = gen_keypair();
|
||||
let public_key = String::from_utf8(public_key).expect("NewUser::new_local: public key error");
|
||||
let private_key = String::from_utf8(private_key).expect("NewUser::new_local: private key error");
|
||||
let res = PKey::from_rsa(
|
||||
Rsa::private_key_from_pem(private_key.as_ref())?
|
||||
)?;
|
||||
let public_key =
|
||||
String::from_utf8(public_key).expect("NewUser::new_local: public key error");
|
||||
let private_key =
|
||||
String::from_utf8(private_key).expect("NewUser::new_local: private key error");
|
||||
let res = PKey::from_rsa(Rsa::private_key_from_pem(private_key.as_ref())?)?;
|
||||
diesel::update(self)
|
||||
.set((users::public_key.eq(public_key),
|
||||
.set((
|
||||
users::public_key.eq(public_key),
|
||||
users::private_key.eq(Some(private_key)),
|
||||
users::last_fetched_date.eq(Utc::now().naive_utc())))
|
||||
users::last_fetched_date.eq(Utc::now().naive_utc()),
|
||||
))
|
||||
.execute(conn)
|
||||
.map_err(Error::from)
|
||||
.map(|_| res)
|
||||
@@ -688,18 +661,14 @@ impl User {
|
||||
|
||||
pub fn to_activity(&self, conn: &Connection) -> Result<CustomPerson> {
|
||||
let mut actor = Person::default();
|
||||
actor
|
||||
.object_props
|
||||
.set_id_string(self.ap_url.clone())?;
|
||||
actor.object_props.set_id_string(self.ap_url.clone())?;
|
||||
actor
|
||||
.object_props
|
||||
.set_name_string(self.display_name.clone())?;
|
||||
actor
|
||||
.object_props
|
||||
.set_summary_string(self.summary_html.get().clone())?;
|
||||
actor
|
||||
.object_props
|
||||
.set_url_string(self.ap_url.clone())?;
|
||||
actor.object_props.set_url_string(self.ap_url.clone())?;
|
||||
actor
|
||||
.ap_actor_props
|
||||
.set_inbox_string(self.inbox_url.clone())?;
|
||||
@@ -714,42 +683,31 @@ impl User {
|
||||
.set_followers_string(self.followers_endpoint.clone())?;
|
||||
|
||||
let mut endpoints = Endpoint::default();
|
||||
endpoints
|
||||
.set_shared_inbox_string(ap_url(&format!("{}/inbox/", BASE_URL.as_str())))?;
|
||||
actor
|
||||
.ap_actor_props
|
||||
.set_endpoints_endpoint(endpoints)?;
|
||||
endpoints.set_shared_inbox_string(ap_url(&format!("{}/inbox/", BASE_URL.as_str())))?;
|
||||
actor.ap_actor_props.set_endpoints_endpoint(endpoints)?;
|
||||
|
||||
let mut public_key = PublicKey::default();
|
||||
public_key
|
||||
.set_id_string(format!("{}#main-key", self.ap_url))?;
|
||||
public_key
|
||||
.set_owner_string(self.ap_url.clone())?;
|
||||
public_key
|
||||
.set_public_key_pem_string(self.public_key.clone())?;
|
||||
public_key.set_id_string(format!("{}#main-key", self.ap_url))?;
|
||||
public_key.set_owner_string(self.ap_url.clone())?;
|
||||
public_key.set_public_key_pem_string(self.public_key.clone())?;
|
||||
let mut ap_signature = ApSignature::default();
|
||||
ap_signature
|
||||
.set_public_key_publickey(public_key)?;
|
||||
ap_signature.set_public_key_publickey(public_key)?;
|
||||
|
||||
let mut avatar = Image::default();
|
||||
avatar
|
||||
.object_props
|
||||
.set_url_string(
|
||||
self.avatar_id
|
||||
.and_then(|id| Media::get(conn, id).and_then(|m| m.url(conn)).ok())
|
||||
.unwrap_or_default(),
|
||||
)?;
|
||||
actor
|
||||
.object_props
|
||||
.set_icon_object(avatar)?;
|
||||
avatar.object_props.set_url_string(
|
||||
self.avatar_id
|
||||
.and_then(|id| Media::get(conn, id).and_then(|m| m.url(conn)).ok())
|
||||
.unwrap_or_default(),
|
||||
)?;
|
||||
actor.object_props.set_icon_object(avatar)?;
|
||||
|
||||
Ok(CustomPerson::new(actor, ap_signature))
|
||||
}
|
||||
|
||||
pub fn avatar_url(&self, conn: &Connection) -> String {
|
||||
self.avatar_id.and_then(|id|
|
||||
Media::get(conn, id).and_then(|m| m.url(conn)).ok()
|
||||
).unwrap_or_else(|| "/static/default-avatar.png".to_string())
|
||||
self.avatar_id
|
||||
.and_then(|id| Media::get(conn, id).and_then(|m| m.url(conn)).ok())
|
||||
.unwrap_or_else(|| "/static/default-avatar.png".to_string())
|
||||
}
|
||||
|
||||
pub fn webfinger(&self, conn: &Connection) -> Result<Webfinger> {
|
||||
@@ -866,21 +824,15 @@ impl Signer for User {
|
||||
fn sign(&self, to_sign: &str) -> Result<Vec<u8>> {
|
||||
let key = self.get_keypair()?;
|
||||
let mut signer = sign::Signer::new(MessageDigest::sha256(), &key)?;
|
||||
signer
|
||||
.update(to_sign.as_bytes())?;
|
||||
signer
|
||||
.sign_to_vec()
|
||||
.map_err(Error::from)
|
||||
signer.update(to_sign.as_bytes())?;
|
||||
signer.sign_to_vec().map_err(Error::from)
|
||||
}
|
||||
|
||||
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool> {
|
||||
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref())?)?;
|
||||
let mut verifier = sign::Verifier::new(MessageDigest::sha256(), &key)?;
|
||||
verifier
|
||||
.update(data.as_bytes())?;
|
||||
verifier
|
||||
.verify(&signature)
|
||||
.map_err(Error::from)
|
||||
verifier.update(data.as_bytes())?;
|
||||
verifier.verify(&signature).map_err(Error::from)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -915,7 +867,7 @@ impl NewUser {
|
||||
display_name,
|
||||
is_admin,
|
||||
summary: summary.to_owned(),
|
||||
summary_html: SafeString::new(&utils::md_to_html(&summary,"").0),
|
||||
summary_html: SafeString::new(&utils::md_to_html(&summary, "").0),
|
||||
email: Some(email),
|
||||
hashed_password: Some(password),
|
||||
instance_id: Instance::get_local(conn)?.id,
|
||||
@@ -947,7 +899,8 @@ pub(crate) mod tests {
|
||||
"Hello there, I'm the admin",
|
||||
"admin@example.com".to_owned(),
|
||||
"invalid_admin_password".to_owned(),
|
||||
).unwrap();
|
||||
)
|
||||
.unwrap();
|
||||
let user = NewUser::new_local(
|
||||
conn,
|
||||
"user".to_owned(),
|
||||
@@ -956,7 +909,8 @@ pub(crate) mod tests {
|
||||
"Hello there, I'm no one",
|
||||
"user@example.com".to_owned(),
|
||||
"invalid_user_password".to_owned(),
|
||||
).unwrap();
|
||||
)
|
||||
.unwrap();
|
||||
let other = NewUser::new_local(
|
||||
conn,
|
||||
"other".to_owned(),
|
||||
@@ -965,8 +919,9 @@ pub(crate) mod tests {
|
||||
"Hello there, I'm someone else",
|
||||
"other@example.com".to_owned(),
|
||||
"invalid_other_password".to_owned(),
|
||||
).unwrap();
|
||||
vec![ admin, user, other ]
|
||||
)
|
||||
.unwrap();
|
||||
vec![admin, user, other]
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -982,7 +937,8 @@ pub(crate) mod tests {
|
||||
"Hello I'm a test",
|
||||
"test@example.com".to_owned(),
|
||||
User::hash_pass("test_password").unwrap(),
|
||||
).unwrap();
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
@@ -996,9 +952,7 @@ pub(crate) mod tests {
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_email(conn, "test@example.com")
|
||||
.unwrap()
|
||||
.id
|
||||
User::find_by_email(conn, "test@example.com").unwrap().id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
@@ -1009,8 +963,9 @@ pub(crate) mod tests {
|
||||
Instance::get_local(conn).unwrap().public_domain,
|
||||
"test"
|
||||
)
|
||||
).unwrap()
|
||||
.id
|
||||
)
|
||||
.unwrap()
|
||||
.id
|
||||
);
|
||||
|
||||
Ok(())
|
||||
@@ -1040,7 +995,11 @@ pub(crate) mod tests {
|
||||
let mut i = 0;
|
||||
while local_inst.has_admin(conn).unwrap() {
|
||||
assert!(i < 100); //prevent from looping indefinitelly
|
||||
local_inst.main_admin(conn).unwrap().revoke_admin_rights(conn).unwrap();
|
||||
local_inst
|
||||
.main_admin(conn)
|
||||
.unwrap()
|
||||
.revoke_admin_rights(conn)
|
||||
.unwrap();
|
||||
i += 1;
|
||||
}
|
||||
inserted[0].grant_admin_rights(conn).unwrap();
|
||||
@@ -1055,12 +1014,14 @@ pub(crate) mod tests {
|
||||
let conn = &db();
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inserted = fill_database(conn);
|
||||
let updated = inserted[0].update(
|
||||
conn,
|
||||
"new name".to_owned(),
|
||||
"em@il".to_owned(),
|
||||
"<p>summary</p><script></script>".to_owned(),
|
||||
).unwrap();
|
||||
let updated = inserted[0]
|
||||
.update(
|
||||
conn,
|
||||
"new name".to_owned(),
|
||||
"em@il".to_owned(),
|
||||
"<p>summary</p><script></script>".to_owned(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(updated.display_name, "new name");
|
||||
assert_eq!(updated.email.unwrap(), "em@il");
|
||||
assert_eq!(updated.summary_html.get(), "<p>summary</p>");
|
||||
@@ -1082,7 +1043,8 @@ pub(crate) mod tests {
|
||||
"Hello I'm a test",
|
||||
"test@example.com".to_owned(),
|
||||
User::hash_pass("test_password").unwrap(),
|
||||
).unwrap();
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert!(test_user.auth("test_password"));
|
||||
assert!(!test_user.auth("other_password"));
|
||||
@@ -1101,7 +1063,9 @@ pub(crate) mod tests {
|
||||
assert_eq!(page.len(), 2);
|
||||
assert!(page[0].username <= page[1].username);
|
||||
|
||||
let mut last_username = User::get_local_page(conn, (0, 1)).unwrap()[0].username.clone();
|
||||
let mut last_username = User::get_local_page(conn, (0, 1)).unwrap()[0]
|
||||
.username
|
||||
.clone();
|
||||
for i in 1..User::count_local(conn).unwrap() as i32 {
|
||||
let page = User::get_local_page(conn, (i, i + 1)).unwrap();
|
||||
assert_eq!(page.len(), 1);
|
||||
@@ -1109,7 +1073,9 @@ pub(crate) mod tests {
|
||||
last_username = page[0].username.clone();
|
||||
}
|
||||
assert_eq!(
|
||||
User::get_local_page(conn, (0, User::count_local(conn).unwrap() as i32 + 10)).unwrap().len() as i64,
|
||||
User::get_local_page(conn, (0, User::count_local(conn).unwrap() as i32 + 10))
|
||||
.unwrap()
|
||||
.len() as i64,
|
||||
User::count_local(conn).unwrap()
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user