]> Untitled Git - lemmy.git/commitdiff
Fix review comments
authorFelix Ableitner <me@nutomic.com>
Thu, 26 Dec 2019 19:48:13 +0000 (20:48 +0100)
committerFelix Ableitner <me@nutomic.com>
Fri, 27 Dec 2019 16:30:46 +0000 (17:30 +0100)
12 files changed:
.gitignore
docker/dev/Dockerfile
docker/dev/Dockerfile.aarch64
docker/dev/Dockerfile.armv7hf
docker/dev/Dockerfile.libc
server/config/defaults.hjson
server/src/db/community.rs
server/src/db/password_reset_request.rs
server/src/db/user.rs
server/src/feeds.rs
server/src/lib.rs
server/src/webfinger.rs

index e36af1295cd05c382da5a5c7b71f77dcb74d32af..4cb8939f5f67c82a2011fa209332ca0f4b444ffe 100644 (file)
@@ -2,4 +2,3 @@ ansible/inventory
 ansible/passwords/
 build/
 .idea/
-docker/dev/config/config.hjson
index 080b7fb3e938ac3c70a39ce15fee8b53ca6c25f8..d62e7b279b262aa5a185b6f51591a105559aeffd 100644 (file)
@@ -38,7 +38,7 @@ FROM alpine:3.10
 RUN apk add libpq
 
 # Copy resources
-COPY server/config /config
+COPY server/config/defaults.hjson /config/defaults.hjson
 COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server /app/lemmy
 COPY --from=node /app/ui/dist /app/dist
 
index 1b08c64e57cf5f850b35b2ce73d615800aefa3ad..15810f785978b98877c87db75206fc441fd91f64 100644 (file)
@@ -69,7 +69,7 @@ RUN addgroup --gid 1000 lemmy
 RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy
 
 # Copy resources
-COPY server/config /app/config
+COPY server/config/defaults.hjson /config/defaults.hjson
 COPY --from=rust /app/server/ready /app/lemmy
 COPY --from=node /app/ui/dist /app/dist
 
index 67067a18a45c9d0b74d332858f726f4aed841988..c2c9084c1326fca89a798c78fe2d8cd7da60b8f6 100644 (file)
@@ -69,7 +69,7 @@ RUN addgroup --gid 1000 lemmy
 RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy
 
 # Copy resources
-COPY server/config /config
+COPY server/config/defaults.hjson /config/defaults.hjson
 COPY --from=rust /app/server/ready /app/lemmy
 COPY --from=node /app/ui/dist /app/dist
 
index 22d8d910043434635cb7c39cd30038e690c9c713..6b9b347efe6e261d9ddf663d3f65b671615e0d86 100644 (file)
@@ -65,7 +65,7 @@ RUN addgroup --gid 1000 lemmy
 RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy
 
 # Copy resources
-COPY server/config /app/config
+COPY server/config/defaults.hjson /config/defaults.hjson
 COPY --from=rust /app/server/ready /app/lemmy
 COPY --from=node /app/ui/dist /app/dist
 
index ceb21db0ebff0c2a445183e6e09b474f874b9e49..e5a8f6dc03e1f7090e94dca0ac66b4a34c4e5b6f 100644 (file)
@@ -1,19 +1,19 @@
 {
   # settings related to the postgresql database
   database: {
-      # username to connect to postgres
-      user: "lemmy"
-      # password to connect to postgres
-      password: "password"
-      # host where postgres is running
-      host: "localhost"
-      # port where postgres can be accessed
-      port: 5432
-      # name of the postgres database for lemmy
-      database: "lemmy"
-      # maximum number of active sql connections
-      pool_size: 5
-    }
+    # username to connect to postgres
+    user: "lemmy"
+    # password to connect to postgres
+    password: "password"
+    # host where postgres is running
+    host: "localhost"
+    # port where postgres can be accessed
+    port: 5432
+    # name of the postgres database for lemmy
+    database: "lemmy"
+    # maximum number of active sql connections
+    pool_size: 5
+  }
   # the domain name of your instance (eg "dev.lemmy.ml")
   hostname: "rrr"
   # address where lemmy should listen for incoming requests
index 74579535eab92ffcbfa0e23de25920610cb6692b..e8bf5bbc4e6af6182c84280b1f0cab0bd54e46cd 100644 (file)
@@ -69,8 +69,8 @@ impl Community {
       .first::<Self>(conn)
   }
 
-  pub fn get_community_url(community_name: &str) -> String {
-    format!("https://{}/c/{}", Settings::get().hostname, community_name)
+  pub fn get_url(&self) -> String {
+    format!("https://{}/c/{}", Settings::get().hostname, self.name)
   }
 }
 
index d620f1794cd35d83d5cc8e43a89467b0684fd7f6..337b2e6b0a8f28e978e01f57a5a56aa897026d1a 100644 (file)
@@ -1,7 +1,7 @@
 use super::*;
 use crate::schema::password_reset_request;
 use crate::schema::password_reset_request::dsl::*;
-use sha2::{Sha256, Digest};
+use sha2::{Digest, Sha256};
 
 #[derive(Queryable, Identifiable, PartialEq, Debug)]
 #[table_name = "password_reset_request"]
index 21407e58c382982ede9a022c492aab909e4c3238..c636f4e673e9e64003b623bad21b8c1a0d475db6 100644 (file)
@@ -151,8 +151,8 @@ impl User_ {
     }
   }
 
-  pub fn get_user_profile_url(username: &str) -> String {
-    format!("https://{}/u/{}", Settings::get().hostname, username)
+  pub fn get_profile_url(&self) -> String {
+    format!("https://{}/u/{}", Settings::get().hostname, self.name)
   }
 
   pub fn find_by_jwt(conn: &PgConnection, jwt: &str) -> Result<Self, Error> {
index c735688bea6fe36d0575dfd252d107b5cc4d06c3..c624bcc53d1b7db00463a6df81528896511741ab 100644 (file)
@@ -111,7 +111,7 @@ fn get_feed_user(sort_type: &SortType, user_name: String) -> Result<String, Erro
 
   let site_view = SiteView::read(&conn)?;
   let user = User_::find_by_username(&conn, &user_name)?;
-  let user_url = User_::get_user_profile_url(&user_name);
+  let user_url = user.get_profile_url();
 
   let posts = PostQueryBuilder::create(&conn)
     .listing_type(ListingType::All)
@@ -135,7 +135,7 @@ fn get_feed_community(sort_type: &SortType, community_name: String) -> Result<St
 
   let site_view = SiteView::read(&conn)?;
   let community = Community::read_from_name(&conn, community_name)?;
-  let community_url = Community::get_community_url(&community.name);
+  let community_url = community.get_url();
 
   let posts = PostQueryBuilder::create(&conn)
     .listing_type(ListingType::All)
index 79cd712230ecc19a417b922ac9df4fc3efbc45a6..ed76b22bf868dfd8a0bb53028ca0e3e1c6c7d6fb 100644 (file)
@@ -11,7 +11,6 @@ pub extern crate actix;
 pub extern crate actix_web;
 pub extern crate bcrypt;
 pub extern crate chrono;
-pub extern crate sha2;
 pub extern crate dotenv;
 pub extern crate jsonwebtoken;
 pub extern crate lettre;
@@ -20,6 +19,7 @@ pub extern crate rand;
 pub extern crate regex;
 pub extern crate serde;
 pub extern crate serde_json;
+pub extern crate sha2;
 pub extern crate strum;
 
 pub mod api;
index 47e2037b17c374a264dbc18ee3462882ef5b1bc5..558947458564c7245055fdab233fcf0c5be87c81 100644 (file)
@@ -4,6 +4,7 @@ use crate::Settings;
 use actix_web::body::Body;
 use actix_web::web::Query;
 use actix_web::HttpResponse;
+use regex::Regex;
 use serde::Deserialize;
 use serde_json::json;
 
@@ -12,6 +13,14 @@ pub struct Params {
   resource: String,
 }
 
+lazy_static! {
+  static ref WEBFINGER_COMMUNITY_REGEX: Regex = Regex::new(&format!(
+    "^group:([a-z0-9_]{{3, 20}})@{}$",
+    Settings::get().hostname
+  ))
+  .unwrap();
+}
+
 /// Responds to webfinger requests of the following format. There isn't any real documentation for
 /// this, but it described in this blog post:
 /// https://mastodon.social/.well-known/webfinger?resource=acct:gargron@mastodon.social
@@ -19,26 +28,27 @@ pub struct Params {
 /// You can also view the webfinger response that Mastodon sends:
 /// https://radical.town/.well-known/webfinger?resource=acct:felix@radical.town
 pub fn get_webfinger_response(info: Query<Params>) -> HttpResponse<Body> {
-  // NOTE: Calling the parameter "account" maybe doesn't really make sense, but should give us the
-  // best compatibility with existing implementations. We could also support an alternative name
-  // like "group", and encourage others to use that.
-  let community_identifier = info.resource.replace("acct:", "");
-  let split_identifier: Vec<&str> = community_identifier.split("@").collect();
-  let community_name = split_identifier[0];
-  // It looks like Mastodon does not return webfinger requests for users from other instances, so we
-  // don't do that either.
-  if split_identifier.len() != 2 || split_identifier[1] != Settings::get().hostname {
-    return HttpResponse::NotFound().finish();
-  }
+  let regex_parsed = WEBFINGER_COMMUNITY_REGEX
+    .captures(&info.resource)
+    .map(|c| c.get(1));
+  // TODO: replace this with .flatten() once we are running rust 1.40
+  let regex_parsed_flattened = match regex_parsed {
+    Some(s) => s,
+    None => None,
+  };
+  let community_name = match regex_parsed_flattened {
+    Some(c) => c.as_str(),
+    None => return HttpResponse::NotFound().finish(),
+  };
 
   // Make sure the requested community exists.
   let conn = establish_connection();
-  match Community::read_from_name(&conn, community_name.to_owned()) {
+  let community = match Community::read_from_name(&conn, community_name.to_string()) {
+    Ok(o) => o,
     Err(_) => return HttpResponse::NotFound().finish(),
-    Ok(c) => c,
   };
 
-  let community_url = Community::get_community_url(&community_name);
+  let community_url = community.get_url();
 
   let json = json!({
     "subject": info.resource,
@@ -54,7 +64,8 @@ pub fn get_webfinger_response(info: Query<Params>) -> HttpResponse<Body> {
       {
         "rel": "self",
         "type": "application/activity+json",
-        "href": community_url // Yes this is correct, this link doesn't include the `.json` extension
+        // Yes this is correct, this link doesn't include the `.json` extension
+        "href": community_url
       }
       // TODO: this also needs to return the subscribe link once that's implemented
       //{
@@ -63,7 +74,7 @@ pub fn get_webfinger_response(info: Query<Params>) -> HttpResponse<Body> {
       //}
     ]
   });
-  return HttpResponse::Ok()
+  HttpResponse::Ok()
     .content_type("application/activity+json")
-    .body(json.to_string());
+    .body(json.to_string())
 }