Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 23 additions & 15 deletions crates/libtiny_client/src/stream.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use tokio_rustls::rustls::pki_types::{CertificateDer, PrivatePkcs8KeyDer};
use lazy_static::lazy_static;
use std::{
net::SocketAddr,
Expand Down Expand Up @@ -39,34 +40,38 @@ lazy_static! {
#[cfg(feature = "tls-rustls")]
fn tls_connector(sasl: Option<&Vec<u8>>) -> tokio_rustls::TlsConnector {
use std::io::{Cursor, Seek, SeekFrom};
use tokio_rustls::rustls::{Certificate, ClientConfig, PrivateKey, RootCertStore};
use tokio_rustls::rustls::{ClientConfig, RootCertStore};

let mut roots = RootCertStore::empty();
for cert in rustls_native_certs::load_native_certs().expect("could not load platform certs") {
roots.add(&Certificate(cert.0)).unwrap();
roots.add(cert).unwrap();
// roots.add(CertificateDer::from(cert.0)).unwrap();
}

let builder = ClientConfig::builder()
.with_safe_defaults()
.with_root_certificates(roots);

let config = if let Some(pem) = sasl {
let mut buf = Cursor::new(pem);
// extract certificate
let cert = rustls_pemfile::certs(&mut buf)
.expect("Could not parse PKCS8 PEM")
.pop()
let certs = rustls_pemfile::certs(&mut buf).collect::<Result<Vec<_>, _>>()
// let certs = rustls_pemfile::certs(&mut buf)
.expect("Could not parse PKCS8 PEM");
let cert = certs.into_iter()
.next()
.expect("Cert PEM must have at least one cert");

// extract private key
buf.seek(SeekFrom::Start(0)).unwrap();
let key = rustls_pemfile::pkcs8_private_keys(&mut buf)
.expect("Could not parse PKCS8 PEM")
.pop()
let keys = rustls_pemfile::pkcs8_private_keys(&mut buf).collect::<Result<Vec<_>, _>>()
// let keys = rustls_pemfile::pkcs8_private_keys(&mut buf)
.expect("Could not parse PKCS8 PEM");
let key = keys.into_iter()
.next()
.expect("Cert PEM must have at least one private key");

builder
.with_client_auth_cert(vec![Certificate(cert)], PrivateKey(key))
.with_client_auth_cert(vec![CertificateDer::from(cert)], PrivatePkcs8KeyDer::from(key).into())
.expect("Client auth cert")
} else {
builder.with_no_client_auth()
Expand Down Expand Up @@ -131,15 +136,18 @@ impl Stream {
host_name: &str,
sasl: Option<&Vec<u8>>,
) -> Result<Stream, StreamError> {
use tokio_rustls::rustls::ServerName;

use tokio_rustls::rustls::pki_types::ServerName;
let tcp_stream = TcpStream::connect(addr).await?;
let name = ServerName::try_from(host_name).unwrap();
let name = ServerName::try_from(host_name.to_owned())
.map_err(|e| std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("invalid server name: {}: {}", host_name, e)
))?;
// If SASL EXTERNAL is enabled create a new TLS connector with client auth cert
let tls_stream = if sasl.is_some() {
tls_connector(sasl).connect(name, tcp_stream).await?
tls_connector(sasl).connect(name.clone(), tcp_stream).await?
} else {
TLS_CONNECTOR.connect(name, tcp_stream).await?
TLS_CONNECTOR.connect(name.clone(), tcp_stream).await?
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unrelated changes in this file. Please revert the file.

};
Ok(Stream::TlsStream(tls_stream.into()))
}
Expand Down
36 changes: 18 additions & 18 deletions crates/libtiny_logger/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::io;
use std::io::Write;
use std::path::{Path, PathBuf};
use std::rc::Rc;
use time::Tm;
use time::OffsetDateTime;

use libtiny_common::{ChanName, ChanNameRef, MsgTarget};
use libtiny_wire::formatting::remove_irc_control_chars;
Expand Down Expand Up @@ -50,26 +50,26 @@ impl Logger {
delegate!(close_chan_tab(serv: &str, chan: &ChanNameRef,));
delegate!(close_user_tab(serv: &str, nick: &str,));
delegate!(add_client_msg(msg: &str, target: &MsgTarget,));
delegate!(add_msg(msg: &str, ts: Tm, target: &MsgTarget,));
delegate!(add_msg(msg: &str, ts: OffsetDateTime, target: &MsgTarget,));
delegate!(add_privmsg(
sender: &str,
msg: &str,
ts: Tm,
ts: OffsetDateTime,
target: &MsgTarget,
highlight: bool,
is_action: bool,
));
delegate!(add_nick(nick: &str, ts: Option<Tm>, target: &MsgTarget,));
delegate!(remove_nick(nick: &str, ts: Option<Tm>, target: &MsgTarget,));
delegate!(add_nick(nick: &str, ts: Option<OffsetDateTime>, target: &MsgTarget,));
delegate!(remove_nick(nick: &str, ts: Option<OffsetDateTime>, target: &MsgTarget,));
delegate!(rename_nick(
old_nick: &str,
new_nick: &str,
ts: Tm,
ts: OffsetDateTime,
target: &MsgTarget,
));
delegate!(set_topic(
topic: &str,
ts: Tm,
ts: OffsetDateTime,
serv: &str,
chan: &ChanNameRef,
));
Expand Down Expand Up @@ -105,7 +105,7 @@ fn print_header(fd: &mut File) -> io::Result<()> {
writeln!(
fd,
"*** Logging started at {}",
time::strftime("%Y-%m-%d %H:%M:%S", &time::now()).unwrap()
time::OffsetDateTime::now_utc().format(&time::format_description::parse("[year]-[month]-[day] [hour]:[minute]:[second]").unwrap()).unwrap()
)?;
writeln!(fd)
}
Expand All @@ -115,7 +115,7 @@ fn print_footer(fd: &mut File) -> io::Result<()> {
writeln!(
fd,
"*** Logging ended at {}",
time::strftime("%Y-%m-%d %H:%M:%S", &time::now()).unwrap()
time::OffsetDateTime::now_utc().format(&time::format_description::parse("[year]-[month]-[day] [hour]:[minute]:[second]").unwrap()).unwrap()
)?;
writeln!(fd)
}
Expand Down Expand Up @@ -292,7 +292,7 @@ impl LoggerInner {
});
}

fn add_msg(&mut self, msg: &str, ts: Tm, target: &MsgTarget) {
fn add_msg(&mut self, msg: &str, ts: OffsetDateTime, target: &MsgTarget) {
self.apply_to_target(target, |fd: &mut File, report_err: &dyn Fn(String)| {
report_io_err!(report_err, writeln!(fd, "[{}] {}", strf(&ts), msg));
});
Expand All @@ -302,7 +302,7 @@ impl LoggerInner {
&mut self,
sender: &str,
msg: &str,
ts: Tm,
ts: OffsetDateTime,
target: &MsgTarget,
_highlight: bool,
is_action: bool,
Expand All @@ -318,7 +318,7 @@ impl LoggerInner {
});
}

fn add_nick(&mut self, nick: &str, ts: Option<Tm>, target: &MsgTarget) {
fn add_nick(&mut self, nick: &str, ts: Option<OffsetDateTime>, target: &MsgTarget) {
if let Some(_ts) = ts {
// This method is only called when a user joins a chan
self.apply_to_target(target, |fd: &mut File, report_err: &dyn Fn(String)| {
Expand All @@ -330,7 +330,7 @@ impl LoggerInner {
}
}

fn remove_nick(&mut self, nick: &str, ts: Option<Tm>, target: &MsgTarget) {
fn remove_nick(&mut self, nick: &str, ts: Option<OffsetDateTime>, target: &MsgTarget) {
if let Some(_ts) = ts {
// TODO: Did the user leave a channel or the server? Currently we can't tell.
self.apply_to_target(target, |fd: &mut File, report_err: &dyn Fn(String)| {
Expand All @@ -339,7 +339,7 @@ impl LoggerInner {
}
}

fn rename_nick(&mut self, old_nick: &str, new_nick: &str, ts: Tm, target: &MsgTarget) {
fn rename_nick(&mut self, old_nick: &str, new_nick: &str, ts: OffsetDateTime, target: &MsgTarget) {
self.apply_to_target(target, |fd: &mut File, report_err: &dyn Fn(String)| {
report_io_err!(
report_err,
Expand All @@ -354,7 +354,7 @@ impl LoggerInner {
});
}

fn set_topic(&mut self, topic: &str, ts: Tm, serv: &str, chan: &ChanNameRef) {
fn set_topic(&mut self, topic: &str, ts: OffsetDateTime, serv: &str, chan: &ChanNameRef) {
let target = MsgTarget::Chan { serv, chan };
self.apply_to_target(&target, |fd: &mut File, report_err: &dyn Fn(String)| {
report_io_err!(
Expand Down Expand Up @@ -452,9 +452,9 @@ impl LoggerInner {
}

fn now() -> String {
time::strftime("%H:%M:%S", &time::now()).unwrap()
time::OffsetDateTime::now_utc().format(&time::format_description::parse("[year]-[month]-[day] [hour]:[minute]:[second]").unwrap()).unwrap()
}

fn strf(tm: &Tm) -> String {
time::strftime("%H:%M:%S", tm).unwrap()
fn strf(tm: &OffsetDateTime) -> String {
tm.format(&time::format_description::parse("[hour]:[minute]:[second]").unwrap()).unwrap()
}
2 changes: 1 addition & 1 deletion crates/libtiny_tui/benches/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ fn tui_resize(b: &mut Bencher) {
let server = "<server>";
tui.new_server_tab(server, None);

let ts: Tm = time::empty_tm();
let ts: time::OffsetDateTime = time::empty_tm();
let target = MsgTarget::CurrentTab;

let f = File::open("test/lipsum.txt").unwrap();
Expand Down
2 changes: 1 addition & 1 deletion crates/libtiny_tui/examples/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ fn run_bench() {

async fn bench_task(tui: TUI, lines: Vec<String>) {
let msg_target = MsgTarget::Server { serv: "mentions" };
let time = time::now();
let time = time::OffsetDateTime::now_utc();

for line in &lines {
tui.add_privmsg("server", line, time, &msg_target, false, false);
Expand Down
4 changes: 2 additions & 2 deletions crates/libtiny_tui/examples/chat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ fn main() {
tui.new_chan_tab("debug", ChanNameRef::new("chan"));
tui.set_topic(
"This is channel topic",
time::now(),
time::OffsetDateTime::now_utc(),
SERV,
ChanNameRef::new(CHAN),
);
Expand All @@ -46,7 +46,7 @@ fn main() {
file.read_to_string(&mut text).unwrap();

for (line_idx, line) in text.lines().enumerate() {
let now = time::now();
let now = time::OffsetDateTime::now_utc();
let nick = format!("nick_{}", line_idx);
tui.add_nick(&nick, Some(now), &chan_target);
tui.add_privmsg(&nick, line, now, &chan_target, false, false);
Expand Down
4 changes: 2 additions & 2 deletions crates/libtiny_tui/examples/completion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ fn main() {

tui.add_msg(
"Loading word list for auto-completion ...",
time::now(),
time::OffsetDateTime::now_utc(),
&debug_tab,
);
tui.draw();
Expand All @@ -34,7 +34,7 @@ fn main() {
}
}

tui.add_msg("Done.", time::now(), &debug_tab);
tui.add_msg("Done.", time::OffsetDateTime::now_utc(), &debug_tab);
tui.draw();
});

Expand Down
2 changes: 1 addition & 1 deletion crates/libtiny_tui/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ pub(crate) fn parse_config(config_path: &Path) -> Result<Config, serde_yaml::Err
// tiny creates a config file with the defaults when it can't find one, but the config file can
// be deleted before a `/reload`.
let contents = std::fs::read_to_string(config_path).map_err(|err| {
de::Error::custom(format!(
<serde_yaml::Error as de::Error>::custom(format!(
"Can't read config file '{}': {}",
config_path.to_string_lossy(),
err
Expand Down
15 changes: 7 additions & 8 deletions crates/libtiny_tui/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ use std::cell::RefCell;
use std::path::PathBuf;
use std::rc::{Rc, Weak};

use time::Tm;
use tokio::select;
use tokio::signal::unix::{signal, SignalKind};
use tokio::sync::mpsc;
Expand Down Expand Up @@ -240,30 +239,30 @@ impl TUI {
delegate!(close_chan_tab(serv_name: &str, chan: &ChanNameRef,));
delegate!(close_user_tab(serv_name: &str, nick: &str,));
delegate!(add_client_msg(msg: &str, target: &MsgTarget,));
delegate!(add_msg(msg: &str, ts: Tm, target: &MsgTarget,));
delegate!(add_err_msg(msg: &str, ts: Tm, target: &MsgTarget,));
delegate!(add_msg(msg: &str, ts: time::OffsetDateTime, target: &MsgTarget,));
delegate!(add_err_msg(msg: &str, ts: time::OffsetDateTime, target: &MsgTarget,));
delegate!(add_client_err_msg(msg: &str, target: &MsgTarget,));
delegate!(clear_nicks(serv_name: &str,));
delegate!(set_nick(serv_name: &str, new_nick: &str,));
delegate!(add_privmsg(
sender: &str,
msg: &str,
ts: Tm,
ts: time::OffsetDateTime,
target: &MsgTarget,
highlight: bool,
is_action: bool,
));
delegate!(add_nick(nick: &str, ts: Option<Tm>, target: &MsgTarget,));
delegate!(remove_nick(nick: &str, ts: Option<Tm>, target: &MsgTarget,));
delegate!(add_nick(nick: &str, ts: Option<time::OffsetDateTime>, target: &MsgTarget,));
delegate!(remove_nick(nick: &str, ts: Option<time::OffsetDateTime>, target: &MsgTarget,));
delegate!(rename_nick(
old_nick: &str,
new_nick: &str,
ts: Tm,
ts: time::OffsetDateTime,
target: &MsgTarget,
));
delegate!(set_topic(
topic: &str,
ts: Tm,
ts: time::OffsetDateTime,
serv_name: &str,
chan_name: &ChanNameRef,
));
Expand Down
10 changes: 5 additions & 5 deletions crates/libtiny_tui/src/messaging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use termbox_simple::Termbox;

use std::convert::From;

use time::{self, Tm};
use time;

use crate::config::Colors;
use crate::exit_dialogue::ExitDialogue;
Expand Down Expand Up @@ -68,11 +68,11 @@ impl Timestamp {
}
}

impl From<Tm> for Timestamp {
fn from(tm: Tm) -> Timestamp {
impl From<time::OffsetDateTime> for Timestamp {
fn from(tm: time::OffsetDateTime) -> Timestamp {
Timestamp {
hour: tm.tm_hour,
min: tm.tm_min,
hour: tm.hour() as i32,
min: tm.minute() as i32,
}
}
}
Expand Down
Loading