Merge branch 'master' into dev

This commit is contained in:
Dessalines 2020-03-13 11:11:32 -04:00
commit 50afe1a3dc
12 changed files with 42 additions and 27 deletions

1
.dockerignore vendored
View file

@ -2,4 +2,5 @@ ui/node_modules
ui/dist ui/dist
server/target server/target
docker/dev/volumes docker/dev/volumes
docker/federation-test/volumes
.git .git

View file

@ -6,6 +6,8 @@ services:
ports: ports:
- "127.0.0.1:8536:8536" - "127.0.0.1:8536:8536"
restart: always restart: always
environment:
- RUST_LOG=debug
volumes: volumes:
- ./lemmy.hjson:/config/config.hjson:ro - ./lemmy.hjson:/config/config.hjson:ro
depends_on: depends_on:
@ -43,4 +45,4 @@ services:
image: mwader/postfix-relay image: mwader/postfix-relay
environment: environment:
- POSTFIX_myhostname={{ domain }} - POSTFIX_myhostname={{ domain }}
restart: "always" restart: "always"

View file

@ -18,6 +18,8 @@ services:
ports: ports:
- "127.0.0.1:8536:8536" - "127.0.0.1:8536:8536"
restart: always restart: always
environment:
- RUST_LOG=debug
volumes: volumes:
- ../lemmy.hjson:/config/config.hjson:ro - ../lemmy.hjson:/config/config.hjson:ro
depends_on: depends_on:

View file

@ -16,6 +16,8 @@ services:
ports: ports:
- "127.0.0.1:8536:8536" - "127.0.0.1:8536:8536"
restart: always restart: always
environment:
- RUST_LOG=debug
volumes: volumes:
- ./lemmy.hjson:/config/config.hjson:ro - ./lemmy.hjson:/config/config.hjson:ro
depends_on: depends_on:

4
install.sh vendored
View file

@ -16,7 +16,7 @@ init_db_final=0
while [ "$init_db_valid" == 0 ] while [ "$init_db_valid" == 0 ]
do do
read -p "Initialize database (y/n)? " init_db read -p "Initialize database (y/n)? " init_db
case "${init_db,,}" in case "${init_db,,}" in
y|yes ) init_db_valid=1; init_db_final=1;; y|yes ) init_db_valid=1; init_db_final=1;;
n|no ) init_db_valid=1; init_db_final=0;; n|no ) init_db_valid=1; init_db_final=0;;
* ) echo "Invalid input" 1>&2;; * ) echo "Invalid input" 1>&2;;
@ -37,7 +37,7 @@ yarn build
# Build and run the backend # Build and run the backend
cd ../server cd ../server
cargo run RUST_LOG=debug cargo run
# For live coding, where both the front and back end, automagically reload on any save, do: # For live coding, where both the front and back end, automagically reload on any save, do:
# cd ui && yarn start # cd ui && yarn start

1
server/Cargo.lock generated vendored
View file

@ -1448,6 +1448,7 @@ dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",

1
server/Cargo.toml vendored
View file

@ -19,6 +19,7 @@ actix-web = "2.0.0"
actix-files = "0.2.1" actix-files = "0.2.1"
actix-web-actors = "2.0.0" actix-web-actors = "2.0.0"
actix-rt = "1.0.0" actix-rt = "1.0.0"
log = "0.4.0"
env_logger = "0.7.1" env_logger = "0.7.1"
rand = "0.7.3" rand = "0.7.3"
strum = "0.17.1" strum = "0.17.1"

View file

@ -2,6 +2,7 @@ use super::*;
use crate::send_email; use crate::send_email;
use crate::settings::Settings; use crate::settings::Settings;
use diesel::PgConnection; use diesel::PgConnection;
use log::error;
use std::str::FromStr; use std::str::FromStr;
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
@ -128,7 +129,7 @@ impl Perform<CommentResponse> for Oper<CreateComment> {
// Let the uniqueness handle this fail // Let the uniqueness handle this fail
match UserMention::create(&conn, &user_mention_form) { match UserMention::create(&conn, &user_mention_form) {
Ok(_mention) => (), Ok(_mention) => (),
Err(_e) => eprintln!("{}", &_e), Err(_e) => error!("{}", &_e),
}; };
// Send an email to those users that have notifications on // Send an email to those users that have notifications on
@ -145,7 +146,7 @@ impl Perform<CommentResponse> for Oper<CreateComment> {
); );
match send_email(subject, &mention_email, &mention_user.name, html) { match send_email(subject, &mention_email, &mention_user.name, html) {
Ok(_o) => _o, Ok(_o) => _o,
Err(e) => eprintln!("{}", e), Err(e) => error!("{}", e),
}; };
} }
} }
@ -174,7 +175,7 @@ impl Perform<CommentResponse> for Oper<CreateComment> {
); );
match send_email(subject, &comment_reply_email, &parent_user.name, html) { match send_email(subject, &comment_reply_email, &parent_user.name, html) {
Ok(_o) => _o, Ok(_o) => _o,
Err(e) => eprintln!("{}", e), Err(e) => error!("{}", e),
}; };
} }
} }
@ -199,7 +200,7 @@ impl Perform<CommentResponse> for Oper<CreateComment> {
); );
match send_email(subject, &post_reply_email, &parent_user.name, html) { match send_email(subject, &post_reply_email, &parent_user.name, html) {
Ok(_o) => _o, Ok(_o) => _o,
Err(e) => eprintln!("{}", e), Err(e) => error!("{}", e),
}; };
} }
} }
@ -318,7 +319,7 @@ impl Perform<CommentResponse> for Oper<EditComment> {
// Let the uniqueness handle this fail // Let the uniqueness handle this fail
match UserMention::create(&conn, &user_mention_form) { match UserMention::create(&conn, &user_mention_form) {
Ok(_mention) => (), Ok(_mention) => (),
Err(_e) => eprintln!("{}", &_e), Err(_e) => error!("{}", &_e),
} }
} }
} }

View file

@ -3,6 +3,7 @@ use crate::settings::Settings;
use crate::{generate_random_string, send_email}; use crate::{generate_random_string, send_email};
use bcrypt::verify; use bcrypt::verify;
use diesel::PgConnection; use diesel::PgConnection;
use log::error;
use std::str::FromStr; use std::str::FromStr;
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
@ -1008,7 +1009,7 @@ impl Perform<PrivateMessageResponse> for Oper<CreatePrivateMessage> {
); );
match send_email(subject, &email, &recipient_user.name, html) { match send_email(subject, &email, &recipient_user.name, html) {
Ok(_o) => _o, Ok(_o) => _o,
Err(e) => eprintln!("{}", e), Err(e) => error!("{}", e),
}; };
} }
} }

View file

@ -39,6 +39,7 @@ use lettre::smtp::extension::ClientId;
use lettre::smtp::ConnectionReuseParameters; use lettre::smtp::ConnectionReuseParameters;
use lettre::{ClientSecurity, SmtpClient, Transport}; use lettre::{ClientSecurity, SmtpClient, Transport};
use lettre_email::Email; use lettre_email::Email;
use log::error;
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC}; use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
use rand::distributions::Alphanumeric; use rand::distributions::Alphanumeric;
use rand::{thread_rng, Rng}; use rand::{thread_rng, Rng};
@ -190,7 +191,7 @@ fn fetch_iframely_and_pictshare_data(
Some(url) => match fetch_iframely(&url) { Some(url) => match fetch_iframely(&url) {
Ok(res) => (res.title, res.description, res.thumbnail_url, res.html), Ok(res) => (res.title, res.description, res.thumbnail_url, res.html),
Err(e) => { Err(e) => {
eprintln!("iframely err: {}", e); error!("iframely err: {}", e);
(None, None, None, None) (None, None, None, None)
} }
}, },
@ -202,7 +203,7 @@ fn fetch_iframely_and_pictshare_data(
Some(iframely_thumbnail_url) => match fetch_pictshare(&iframely_thumbnail_url) { Some(iframely_thumbnail_url) => match fetch_pictshare(&iframely_thumbnail_url) {
Ok(res) => Some(res.url), Ok(res) => Some(res.url),
Err(e) => { Err(e) => {
eprintln!("pictshare err: {}", e); error!("pictshare err: {}", e);
None None
} }
}, },

View file

@ -3,6 +3,7 @@ use actix::prelude::*;
use actix_web::web; use actix_web::web;
use actix_web::*; use actix_web::*;
use actix_web_actors::ws; use actix_web_actors::ws;
use log::{error, info};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
pub fn config(cfg: &mut web::ServiceConfig) { pub fn config(cfg: &mut web::ServiceConfig) {
@ -99,7 +100,6 @@ impl Handler<WSMessage> for WSSession {
type Result = (); type Result = ();
fn handle(&mut self, msg: WSMessage, ctx: &mut Self::Context) { fn handle(&mut self, msg: WSMessage, ctx: &mut Self::Context) {
// println!("id: {} msg: {}", self.id, msg.0);
ctx.text(msg.0); ctx.text(msg.0);
} }
} }
@ -107,11 +107,10 @@ impl Handler<WSMessage> for WSSession {
/// WebSocket message handler /// WebSocket message handler
impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WSSession { impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WSSession {
fn handle(&mut self, result: Result<ws::Message, ws::ProtocolError>, ctx: &mut Self::Context) { fn handle(&mut self, result: Result<ws::Message, ws::ProtocolError>, ctx: &mut Self::Context) {
// println!("WEBSOCKET MESSAGE: {:?} from id: {}", msg, self.id);
let message = match result { let message = match result {
Ok(m) => m, Ok(m) => m,
Err(e) => { Err(e) => {
println!("{}", e); error!("{}", e);
return; return;
} }
}; };
@ -125,7 +124,7 @@ impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WSSession {
} }
ws::Message::Text(text) => { ws::Message::Text(text) => {
let m = text.trim().to_owned(); let m = text.trim().to_owned();
println!("WEBSOCKET MESSAGE: {:?} from id: {}", &m, self.id); info!("Message received: {:?} from id: {}", &m, self.id);
self self
.cs_addr .cs_addr
@ -138,14 +137,14 @@ impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WSSession {
match res { match res {
Ok(res) => ctx.text(res), Ok(res) => ctx.text(res),
Err(e) => { Err(e) => {
eprintln!("{}", &e); error!("{}", &e);
} }
} }
actix::fut::ready(()) actix::fut::ready(())
}) })
.wait(ctx); .wait(ctx);
} }
ws::Message::Binary(_bin) => println!("Unexpected binary"), ws::Message::Binary(_bin) => info!("Unexpected binary"),
ws::Message::Close(_) => { ws::Message::Close(_) => {
ctx.stop(); ctx.stop();
} }
@ -163,7 +162,7 @@ impl WSSession {
// check client heartbeats // check client heartbeats
if Instant::now().duration_since(act.hb) > CLIENT_TIMEOUT { if Instant::now().duration_since(act.hb) > CLIENT_TIMEOUT {
// heartbeat timed out // heartbeat timed out
println!("Websocket Client heartbeat failed, disconnecting!"); error!("Websocket Client heartbeat failed, disconnecting!");
// notify chat server // notify chat server
act.cs_addr.do_send(Disconnect { act.cs_addr.do_send(Disconnect {

View file

@ -6,6 +6,7 @@ use actix::prelude::*;
use diesel::r2d2::{ConnectionManager, Pool, PooledConnection}; use diesel::r2d2::{ConnectionManager, Pool, PooledConnection};
use diesel::PgConnection; use diesel::PgConnection;
use failure::Error; use failure::Error;
use log::{error, info, warn};
use rand::{rngs::ThreadRng, Rng}; use rand::{rngs::ThreadRng, Rng};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
@ -343,7 +344,7 @@ impl ChatServer {
} }
if rate_limit.allowance < 1.0 { if rate_limit.allowance < 1.0 {
println!( warn!(
"Rate limited IP: {}, time_passed: {}, allowance: {}", "Rate limited IP: {}, time_passed: {}, allowance: {}",
&info.ip, time_passed, rate_limit.allowance &info.ip, time_passed, rate_limit.allowance
); );
@ -387,7 +388,7 @@ impl Handler<Connect> for ChatServer {
fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result { fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result {
// register session with random id // register session with random id
let id = self.rng.gen::<usize>(); let id = self.rng.gen::<usize>();
println!("{} joined", &msg.ip); info!("{} joined", &msg.ip);
self.sessions.insert( self.sessions.insert(
id, id,
@ -448,13 +449,16 @@ impl Handler<StandardMessage> for ChatServer {
type Result = MessageResult<StandardMessage>; type Result = MessageResult<StandardMessage>;
fn handle(&mut self, msg: StandardMessage, _: &mut Context<Self>) -> Self::Result { fn handle(&mut self, msg: StandardMessage, _: &mut Context<Self>) -> Self::Result {
let msg_out = match parse_json_message(self, msg) { match parse_json_message(self, msg) {
Ok(m) => m, Ok(m) => {
Err(e) => e.to_string(), info!("Message Sent: {}", m);
}; MessageResult(m)
}
println!("Message Sent: {}", msg_out); Err(e) => {
MessageResult(msg_out) error!("Error during message handling {}", e);
MessageResult(e.to_string())
}
}
} }
} }