@ -230,7 +230,7 @@ pub fn register_route(
Ok ( register ::Response {
Ok ( register ::Response {
access_token : Some ( token ) ,
access_token : Some ( token ) ,
user_id ,
user_id ,
device_id : Some ( device_id .into ( ) ),
device_id : Some ( device_id ),
}
}
. into ( ) )
. into ( ) )
}
}
@ -257,11 +257,22 @@ pub fn login_route(
if let ( login ::UserInfo ::MatrixId ( username ) , login ::LoginInfo ::Password { password } ) =
if let ( login ::UserInfo ::MatrixId ( username ) , login ::LoginInfo ::Password { password } ) =
( body . user . clone ( ) , body . login_info . clone ( ) )
( body . user . clone ( ) , body . login_info . clone ( ) )
{
{
let user_id = UserId ::parse_with_server_name ( username , db . globals . server_name ( ) ) . map_err ( | _ | Error ::BadRequest ( ErrorKind ::InvalidUsername , "Username is invalid." ) ) ? ;
let user_id = UserId ::parse_with_server_name ( username , db . globals . server_name ( ) )
let hash = db . users . password_hash ( & user_id ) ? . ok_or ( Error ::BadRequest ( ErrorKind ::Forbidden , "Wrong username or password." ) ) ? ;
. map_err ( | _ | Error ::BadRequest (
ErrorKind ::InvalidUsername ,
"Username is invalid."
) ) ? ;
let hash = db . users . password_hash ( & user_id ) ?
. ok_or ( Error ::BadRequest (
ErrorKind ::Forbidden ,
"Wrong username or password."
) ) ? ;
if hash . is_empty ( ) {
if hash . is_empty ( ) {
return Err ( Error ::BadRequest ( ErrorKind ::UserDeactivated , "The user has been deactivated" ) ) ;
return Err ( Error ::BadRequest (
ErrorKind ::UserDeactivated ,
"The user has been deactivated"
) ) ;
}
}
let hash_matches =
let hash_matches =
@ -298,7 +309,7 @@ pub fn login_route(
user_id ,
user_id ,
access_token : token ,
access_token : token ,
home_server : Some ( db . globals . server_name ( ) . to_owned ( ) ) ,
home_server : Some ( db . globals . server_name ( ) . to_owned ( ) ) ,
device_id : device_id . into ( ) ,
device_id ,
well_known : None ,
well_known : None ,
}
}
. into ( ) )
. into ( ) )
@ -1702,8 +1713,7 @@ pub fn leave_room_route(
ErrorKind ::BadState ,
ErrorKind ::BadState ,
"Cannot leave a room you are not a member of." ,
"Cannot leave a room you are not a member of." ,
) ) ?
) ) ?
. content
. content ,
. clone ( ) ,
)
)
. map_err ( | _ | Error ::bad_database ( "Invalid member event in database." ) ) ?
. map_err ( | _ | Error ::bad_database ( "Invalid member event in database." ) ) ?
. deserialize ( )
. deserialize ( )
@ -1746,8 +1756,7 @@ pub fn kick_user_route(
ErrorKind ::BadState ,
ErrorKind ::BadState ,
"Cannot kick member that's not in the room." ,
"Cannot kick member that's not in the room." ,
) ) ?
) ) ?
. content
. content ,
. clone ( ) ,
)
)
. expect ( "Raw::from_value always works" )
. expect ( "Raw::from_value always works" )
. deserialize ( )
. deserialize ( )
@ -1882,8 +1891,7 @@ pub fn unban_user_route(
ErrorKind ::BadState ,
ErrorKind ::BadState ,
"Cannot unban a user who is not banned." ,
"Cannot unban a user who is not banned." ,
) ) ?
) ) ?
. content
. content ,
. clone ( ) ,
)
)
. map_err ( | _ | Error ::bad_database ( "Invalid member event in database." ) ) ?
. map_err ( | _ | Error ::bad_database ( "Invalid member event in database." ) ) ?
. deserialize ( )
. deserialize ( )
@ -2049,6 +2057,8 @@ pub async fn get_public_rooms_filtered_route(
db : State < ' _ , Database > ,
db : State < ' _ , Database > ,
_body : Ruma < get_public_rooms_filtered ::Request > ,
_body : Ruma < get_public_rooms_filtered ::Request > ,
) -> ConduitResult < get_public_rooms_filtered ::Response > {
) -> ConduitResult < get_public_rooms_filtered ::Response > {
use ruma ::events ::room ;
let mut chunk = db
let mut chunk = db
. rooms
. rooms
. public_rooms ( )
. public_rooms ( )
@ -2060,17 +2070,25 @@ pub async fn get_public_rooms_filtered_route(
let chunk = directory ::PublicRoomsChunk {
let chunk = directory ::PublicRoomsChunk {
aliases : Vec ::new ( ) ,
aliases : Vec ::new ( ) ,
canonical_alias : state . get ( & ( EventType ::RoomCanonicalAlias , "" . to_owned ( ) ) ) . map_or ( Ok ::< _ , Error > ( None ) , | s | {
canonical_alias : state
. get ( & ( EventType ::RoomCanonicalAlias , "" . to_owned ( ) ) )
. map_or ( Ok ::< _ , Error > ( None ) , | s | {
Ok ( serde_json ::from_value ::<
Ok ( serde_json ::from_value ::<
Raw < ruma ::events ::room ::canonical_alias ::CanonicalAliasEventContent > ,
Raw < r oom::canonical_alias ::CanonicalAliasEventContent > ,
> ( s . content . clone ( ) )
> ( s . content . clone ( ) )
. map_err ( | _ | Error ::bad_database ( "Invalid canonical alias event in database." ) ) ?
. map_err ( | _ | {
Error ::bad_database ( "Invalid canonical alias event in database." )
} ) ?
. deserialize ( )
. deserialize ( )
. map_err ( | _ | Error ::bad_database ( "Invalid canonical alias event in database." ) ) ?
. map_err ( | _ | {
Error ::bad_database ( "Invalid canonical alias event in database." )
} ) ?
. alias )
. alias )
} ) ? ,
} ) ? ,
name : state . get ( & ( EventType ::RoomName , "" . to_owned ( ) ) ) . map_or ( Ok ::< _ , Error > ( None ) , | s | {
name : state . get ( & ( EventType ::RoomName , "" . to_owned ( ) ) ) . map_or (
Ok ( serde_json ::from_value ::< Raw < ruma ::events ::room ::name ::NameEventContent > > (
Ok ::< _ , Error > ( None ) ,
| s | {
Ok ( serde_json ::from_value ::< Raw < room ::name ::NameEventContent > > (
s . content . clone ( ) ,
s . content . clone ( ) ,
)
)
. map_err ( | _ | Error ::bad_database ( "Invalid room name event in database." ) ) ?
. map_err ( | _ | Error ::bad_database ( "Invalid room name event in database." ) ) ?
@ -2078,45 +2096,84 @@ pub async fn get_public_rooms_filtered_route(
. map_err ( | _ | Error ::bad_database ( "Invalid room name event in database." ) ) ?
. map_err ( | _ | Error ::bad_database ( "Invalid room name event in database." ) ) ?
. name ( )
. name ( )
. map ( | n | n . to_owned ( ) ) )
. map ( | n | n . to_owned ( ) ) )
} ) ? ,
} ,
) ? ,
num_joined_members : ( db . rooms . room_members ( & room_id ) . count ( ) as u32 ) . into ( ) ,
num_joined_members : ( db . rooms . room_members ( & room_id ) . count ( ) as u32 ) . into ( ) ,
room_id ,
room_id ,
topic : state . get ( & ( EventType ::RoomTopic , "" . to_owned ( ) ) ) . map_or ( Ok ::< _ , Error > ( None ) , | s | {
topic : state . get ( & ( EventType ::RoomTopic , "" . to_owned ( ) ) ) . map_or (
Ok ( Some ( serde_json ::from_value ::<
Ok ::< _ , Error > ( None ) ,
Raw < ruma ::events ::room ::topic ::TopicEventContent > ,
| s | {
> ( s . content . clone ( ) )
Ok ( Some (
. map_err ( | _ | Error ::bad_database ( "Invalid room topic event in database." ) ) ?
serde_json ::from_value ::< Raw < room ::topic ::TopicEventContent > > (
s . content . clone ( ) ,
)
. map_err ( | _ | {
Error ::bad_database ( "Invalid room topic event in database." )
} ) ?
. deserialize ( )
. deserialize ( )
. map_err ( | _ | Error ::bad_database ( "Invalid room topic event in database." ) ) ?
. map_err ( | _ | {
. topic ) )
Error ::bad_database ( "Invalid room topic event in database." )
} ) ? ,
} ) ?
world_readable : state . get ( & ( EventType ::RoomHistoryVisibility , "" . to_owned ( ) ) ) . map_or ( Ok ::< _ , Error > ( false ) , | s | {
. topic ,
) )
} ,
) ? ,
world_readable : state
. get ( & ( EventType ::RoomHistoryVisibility , "" . to_owned ( ) ) )
. map_or ( Ok ::< _ , Error > ( false ) , | s | {
Ok ( serde_json ::from_value ::<
Ok ( serde_json ::from_value ::<
Raw < ruma ::events ::room ::history_visibility ::HistoryVisibilityEventContent > ,
Raw < r oom::history_visibility ::HistoryVisibilityEventContent > ,
> ( s . content . clone ( ) )
> ( s . content . clone ( ) )
. map_err ( | _ | Error ::bad_database ( "Invalid room history visibility event in database." ) ) ?
. map_err ( | _ | {
Error ::bad_database (
"Invalid room history visibility event in database." ,
)
} ) ?
. deserialize ( )
. deserialize ( )
. map_err ( | _ | Error ::bad_database ( "Invalid room history visibility event in database." ) ) ?
. map_err ( | _ | {
. history_visibility = = history_visibility ::HistoryVisibility ::WorldReadable )
Error ::bad_database (
"Invalid room history visibility event in database." ,
)
} ) ?
. history_visibility
= = history_visibility ::HistoryVisibility ::WorldReadable )
} ) ? ,
} ) ? ,
guest_can_join : state . get ( & ( EventType ::RoomGuestAccess , "" . to_owned ( ) ) ) . map_or ( Ok ::< _ , Error > ( false ) , | s | {
guest_can_join : state
Ok ( serde_json ::from_value ::<
. get ( & ( EventType ::RoomGuestAccess , "" . to_owned ( ) ) )
Raw < ruma ::events ::room ::guest_access ::GuestAccessEventContent > ,
. map_or ( Ok ::< _ , Error > ( false ) , | s | {
Ok (
serde_json ::from_value ::<
Raw < room ::guest_access ::GuestAccessEventContent > ,
> ( s . content . clone ( ) )
> ( s . content . clone ( ) )
. map_err ( | _ | Error ::bad_database ( "Invalid room guest access event in database." ) ) ?
. map_err ( | _ | {
Error ::bad_database ( "Invalid room guest access event in database." )
} ) ?
. deserialize ( )
. deserialize ( )
. map_err ( | _ | Error ::bad_database ( "Invalid room guest access event in database." ) ) ?
. map_err ( | _ | {
. guest_access = = guest_access ::GuestAccess ::CanJoin )
Error ::bad_database ( "Invalid room guest access event in database." )
} ) ?
. guest_access
= = guest_access ::GuestAccess ::CanJoin ,
)
} ) ? ,
} ) ? ,
avatar_url : state . get ( & ( EventType ::RoomAvatar , "" . to_owned ( ) ) ) . map_or ( Ok ::< _ , Error > ( None ) , | s | {
avatar_url : state . get ( & ( EventType ::RoomAvatar , "" . to_owned ( ) ) ) . map_or (
Ok ( Some ( serde_json ::from_value ::<
Ok ::< _ , Error > ( None ) ,
Raw < ruma ::events ::room ::avatar ::AvatarEventContent > ,
| s | {
> ( s . content . clone ( ) )
Ok ( Some (
. map_err ( | _ | Error ::bad_database ( "Invalid room avatar event in database." ) ) ?
serde_json ::from_value ::< Raw < room ::avatar ::AvatarEventContent > > (
s . content . clone ( ) ,
)
. map_err ( | _ | {
Error ::bad_database ( "Invalid room avatar event in database." )
} ) ?
. deserialize ( )
. deserialize ( )
. map_err ( | _ | Error ::bad_database ( "Invalid room avatar event in database." ) ) ?
. map_err ( | _ | {
. url ) )
Error ::bad_database ( "Invalid room avatar event in database." )
} ) ? ,
} ) ?
. url ,
) )
} ,
) ? ,
} ;
} ;
Ok ::< _ , Error > ( chunk )
Ok ::< _ , Error > ( chunk )
} )
} )
@ -2338,7 +2395,11 @@ pub fn create_state_event_for_key_route(
. filter ( | room | room = = & body . room_id ) // Make sure it's the right room
. filter ( | room | room = = & body . room_id ) // Make sure it's the right room
. is_none ( )
. is_none ( )
{
{
return Err ( Error ::BadRequest ( ErrorKind ::Forbidden , "You are only allowed to send canonical_alias events when it's aliases already exists" ) ) ;
return Err ( Error ::BadRequest (
ErrorKind ::Forbidden ,
" You are only allowed to send canonical_alias \
events when it ' s aliases already exists " ,
) ) ;
}
}
}
}
}
}