Merge pull request #1536 from LemmyNet/change_preferred_to_display_name

Changing preferred to display name. Fixes #1211
This commit is contained in:
Nutomic 2021-04-06 12:02:50 +00:00 committed by GitHub
commit bcdbced0dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 65 additions and 45 deletions

View File

@ -16,7 +16,7 @@
"eslint": "^7.18.0",
"eslint-plugin-jane": "^9.0.3",
"jest": "^26.6.3",
"lemmy-js-client": "0.10.0-rc.13",
"lemmy-js-client": "0.11.0-rc.1",
"node-fetch": "^2.6.1",
"prettier": "^2.1.2",
"ts-jest": "^26.4.4",

View File

@ -19,7 +19,7 @@ let apShortname: string;
function assertUserFederation(userOne: PersonViewSafe, userTwo: PersonViewSafe) {
expect(userOne.person.name).toBe(userTwo.person.name);
expect(userOne.person.preferred_username).toBe(userTwo.person.preferred_username);
expect(userOne.person.display_name).toBe(userTwo.person.display_name);
expect(userOne.person.bio).toBe(userTwo.person.bio);
expect(userOne.person.actor_id).toBe(userTwo.person.actor_id);
expect(userOne.person.avatar).toBe(userTwo.person.avatar);
@ -49,7 +49,7 @@ test('Set some user settings, check that they are federated', async () => {
lang: '',
avatar,
banner,
preferred_username: 'user321',
display_name: 'user321',
show_avatars: false,
send_notifications_to_email: false,
bio,

View File

@ -3233,10 +3233,10 @@ language-tags@^1.0.5:
dependencies:
language-subtag-registry "~0.3.2"
lemmy-js-client@0.10.0-rc.13:
version "0.10.0-rc.13"
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.10.0-rc.13.tgz#ea2e88857243374d7fbd49ee6b4bb94c34359d85"
integrity sha512-zodvYkwBYR7iP27ah6L/QPUphUUdq38kCH7QF2CUYBrsSAEkGmq2kdz+iusnQ1Ht7Ad80GtYycFprsZBveV5eQ==
lemmy-js-client@0.11.0-rc.1:
version "0.11.0-rc.1"
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.0-rc.1.tgz#0031676be9fc787157a21dd3f5095dd1ee9e6a57"
integrity sha512-dtpxe/hHTbYEv2WnfGkAieOB9jyKUVED+y4DosUp/FcaatjPcMTiKOvCdMNjlvvG/9GyclWEoyNitPEsvJwjmg==
leven@^3.1.0:
version "3.1.0"

View File

@ -60,7 +60,7 @@ use lemmy_utils::{
email::send_email,
location_info,
settings::structs::Settings,
utils::{generate_random_string, is_valid_preferred_username, naive_from_unix},
utils::{generate_random_string, is_valid_display_name, naive_from_unix},
ApiError,
ConnectionId,
LemmyError,
@ -172,7 +172,7 @@ impl Perform for SaveUserSettings {
let banner = diesel_option_overwrite_to_url(&data.banner)?;
let email = diesel_option_overwrite(&data.email);
let bio = diesel_option_overwrite(&data.bio);
let preferred_username = diesel_option_overwrite(&data.preferred_username);
let display_name = diesel_option_overwrite(&data.display_name);
let matrix_user_id = diesel_option_overwrite(&data.matrix_user_id);
if let Some(Some(bio)) = &bio {
@ -181,8 +181,8 @@ impl Perform for SaveUserSettings {
}
}
if let Some(Some(preferred_username)) = &preferred_username {
if !is_valid_preferred_username(preferred_username.trim()) {
if let Some(Some(display_name)) = &display_name {
if !is_valid_display_name(display_name.trim()) {
return Err(ApiError::err("invalid_username").into());
}
}
@ -233,7 +233,7 @@ impl Perform for SaveUserSettings {
avatar,
banner,
inbox_url: None,
preferred_username,
display_name,
published: None,
updated: Some(naive_now()),
banned: None,

View File

@ -55,7 +55,7 @@ pub struct SaveUserSettings {
pub lang: Option<String>,
pub avatar: Option<String>,
pub banner: Option<String>,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub email: Option<String>,
pub bio: Option<String>,
pub matrix_user_id: Option<String>,

View File

@ -64,7 +64,8 @@ impl ToApub for DbPerson {
set_content_and_source(&mut person, bio)?;
}
if let Some(i) = self.preferred_username.to_owned() {
// In apub, the "name" is a display name
if let Some(i) = self.display_name.to_owned() {
person.set_name(i);
}
@ -161,7 +162,7 @@ impl FromApubToForm<PersonExt> for PersonForm {
.preferred_username()
.context(location_info!())?
.to_string();
let preferred_username: Option<String> = person
let display_name: Option<String> = person
.name()
.map(|n| n.one())
.flatten()
@ -176,12 +177,12 @@ impl FromApubToForm<PersonExt> for PersonForm {
.map(|s| s.to_owned().into());
check_slurs(&name)?;
check_slurs_opt(&preferred_username)?;
check_slurs_opt(&display_name)?;
check_slurs_opt(&bio)?;
Ok(PersonForm {
name,
preferred_username: Some(preferred_username),
display_name: Some(display_name),
banned: None,
deleted: None,
avatar: avatar.map(|o| o.map(|i| i.into())),

View File

@ -15,7 +15,7 @@ mod safe_type {
type Columns = (
id,
name,
preferred_username,
display_name,
avatar,
banned,
published,
@ -37,7 +37,7 @@ mod safe_type {
(
id,
name,
preferred_username,
display_name,
avatar,
banned,
published,
@ -63,7 +63,7 @@ mod safe_type_alias_1 {
type Columns = (
id,
name,
preferred_username,
display_name,
avatar,
banned,
published,
@ -85,7 +85,7 @@ mod safe_type_alias_1 {
(
id,
name,
preferred_username,
display_name,
avatar,
banned,
published,
@ -111,7 +111,7 @@ mod safe_type_alias_2 {
type Columns = (
id,
name,
preferred_username,
display_name,
avatar,
banned,
published,
@ -133,7 +133,7 @@ mod safe_type_alias_2 {
(
id,
name,
preferred_username,
display_name,
avatar,
banned,
published,
@ -236,7 +236,7 @@ impl Person_ for Person {
diesel::update(person.find(person_id))
.set((
preferred_username.eq::<Option<String>>(None),
display_name.eq::<Option<String>>(None),
bio.eq::<Option<String>>(None),
matrix_user_id.eq::<Option<String>>(None),
deleted.eq(true),
@ -264,7 +264,7 @@ mod tests {
let expected_person = Person {
id: inserted_person.id,
name: "holly".into(),
preferred_username: None,
display_name: None,
avatar: None,
banner: None,
banned: false,

View File

@ -271,7 +271,7 @@ table! {
person (id) {
id -> Int4,
name -> Varchar,
preferred_username -> Nullable<Varchar>,
display_name -> Nullable<Varchar>,
avatar -> Nullable<Varchar>,
banned -> Bool,
published -> Timestamp,
@ -471,7 +471,7 @@ table! {
person_alias_1 (id) {
id -> Int4,
name -> Varchar,
preferred_username -> Nullable<Varchar>,
display_name -> Nullable<Varchar>,
avatar -> Nullable<Varchar>,
banned -> Bool,
published -> Timestamp,
@ -495,7 +495,7 @@ table! {
person_alias_2 (id) {
id -> Int4,
name -> Varchar,
preferred_username -> Nullable<Varchar>,
display_name -> Nullable<Varchar>,
avatar -> Nullable<Varchar>,
banned -> Bool,
published -> Timestamp,

View File

@ -10,7 +10,7 @@ use serde::Serialize;
pub struct Person {
pub id: PersonId,
pub name: String,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub avatar: Option<DbUrl>,
pub banned: bool,
pub published: chrono::NaiveDateTime,
@ -35,7 +35,7 @@ pub struct Person {
pub struct PersonSafe {
pub id: PersonId,
pub name: String,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub avatar: Option<DbUrl>,
pub banned: bool,
pub published: chrono::NaiveDateTime,
@ -56,7 +56,7 @@ pub struct PersonSafe {
pub struct PersonAlias1 {
pub id: PersonId,
pub name: String,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub avatar: Option<DbUrl>,
pub banned: bool,
pub published: chrono::NaiveDateTime,
@ -80,7 +80,7 @@ pub struct PersonAlias1 {
pub struct PersonSafeAlias1 {
pub id: PersonId,
pub name: String,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub avatar: Option<DbUrl>,
pub banned: bool,
pub published: chrono::NaiveDateTime,
@ -101,7 +101,7 @@ pub struct PersonSafeAlias1 {
pub struct PersonAlias2 {
pub id: PersonId,
pub name: String,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub avatar: Option<DbUrl>,
pub banned: bool,
pub published: chrono::NaiveDateTime,
@ -125,7 +125,7 @@ pub struct PersonAlias2 {
pub struct PersonSafeAlias2 {
pub id: PersonId,
pub name: String,
pub preferred_username: Option<String>,
pub display_name: Option<String>,
pub avatar: Option<DbUrl>,
pub banned: bool,
pub published: chrono::NaiveDateTime,
@ -145,7 +145,7 @@ pub struct PersonSafeAlias2 {
#[table_name = "person"]
pub struct PersonForm {
pub name: String,
pub preferred_username: Option<Option<String>>,
pub display_name: Option<Option<String>>,
pub avatar: Option<Option<DbUrl>>,
pub banned: Option<bool>,
pub published: Option<chrono::NaiveDateTime>,

View File

@ -519,7 +519,7 @@ mod tests {
creator: PersonSafe {
id: inserted_person.id,
name: "timmy".into(),
preferred_username: None,
display_name: None,
published: inserted_person.published,
avatar: None,
actor_id: inserted_person.actor_id.to_owned(),

View File

@ -541,7 +541,7 @@ mod tests {
creator: PersonSafe {
id: inserted_person.id,
name: person_name,
preferred_username: None,
display_name: None,
published: inserted_person.published,
avatar: None,
actor_id: inserted_person.actor_id.to_owned(),

View File

@ -1,7 +1,7 @@
use crate::utils::{
is_valid_community_name,
is_valid_display_name,
is_valid_post_title,
is_valid_preferred_username,
is_valid_username,
remove_slurs,
scrape_text_for_mentions,
@ -29,9 +29,15 @@ fn test_valid_register_username() {
}
#[test]
fn test_valid_preferred_username() {
assert!(is_valid_preferred_username("hello @there"));
assert!(!is_valid_preferred_username("@hello there"));
fn test_valid_display_name() {
assert!(is_valid_display_name("hello @there"));
assert!(!is_valid_display_name("@hello there"));
// Make sure zero-space with an @ doesn't work
assert!(!is_valid_display_name(&format!(
"{}@my name is",
'\u{200b}'
)));
}
#[test]

View File

@ -108,10 +108,11 @@ pub fn is_valid_username(name: &str) -> bool {
}
// Can't do a regex here, reverse lookarounds not supported
pub fn is_valid_preferred_username(preferred_username: &str) -> bool {
!preferred_username.starts_with('@')
&& preferred_username.chars().count() >= 3
&& preferred_username.chars().count() <= 20
pub fn is_valid_display_name(name: &str) -> bool {
!name.starts_with('@')
&& !name.starts_with('\u{200b}')
&& name.chars().count() >= 3
&& name.chars().count() <= 20
}
pub fn is_valid_community_name(name: &str) -> bool {

View File

@ -0,0 +1,6 @@
alter table person rename display_name to preferred_username;
-- Regenerate the person_alias views
drop view person_alias_1, person_alias_2;
create view person_alias_1 as select * from person;
create view person_alias_2 as select * from person;

View File

@ -0,0 +1,6 @@
alter table person rename preferred_username to display_name;
-- Regenerate the person_alias views
drop view person_alias_1, person_alias_2;
create view person_alias_1 as select * from person;
create view person_alias_2 as select * from person;