ldap0r/src/tests.rs
finga 7b0e4b4a31 Password reset functionality
On the `reset` page an email address can be submitted. If an account
associated with the submitted email address an email is sent
containing an URL. This URL can be used to set a new password.

- Add GPLv3 for licensing
- Add dependencies
  - `rocket_contrib` to be able to use handlebar templates
  - `anyhow` to handle errors
  - `log` for logging
  - `ldap3` to communicate with a LDAP server
  - `lettre` and `lettre_email` to handle the generation of emails and
    to send them
  - `rand` to generate random keys
- Add `README.org` which is also used to generate `README.md`
- Add configuration parameters
  - domain
  - LDAP
    - server
    - base
    - filter
    - bind
    - password
- Change default development address to 0.0.0.0
- Add structs to handle data
- Add functions to handle password reset actions
  - `reset_prepare()` to generate a new key, send it to the requestor
    and keep it in the memory
  - `set_password()` to check for the key and set the password
- Add routes
- Add tests
- Add templates
  - `reset.html.hbs` to submit an email address
  - `reset_key.html.hbs` to set the new password
2020-07-06 15:30:45 +02:00

26 lines
870 B
Rust

use rocket::{self, local::Client, routes};
#[test]
fn index() {
let rocket = rocket::ignite().mount("/", routes![super::index, super::reset]);
let client = Client::new(rocket).unwrap();
let mut response = client.get("/").dispatch();
assert_eq!(response.status().code, 303);
assert!(response.body().is_none());
for h in response.headers().iter() {
match h.name.as_str() {
"Location" => assert_eq!(h.value, "/reset"),
"Content-Length" => assert_eq!(h.value.parse::<i32>().unwrap(), 0),
_ => { /* let these through */ }
}
}
}
#[test]
fn reset() {
let rocket = rocket::ignite().mount("/", routes![super::reset]);
let client = Client::new(rocket).unwrap();
let mut response = client.get("/reset").dispatch();
assert_eq!(response.body_string(), Some("Reset ldap0r!".into()));
}