mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-22 12:21:18 +00:00
Merge pull request #1536 from LemmyNet/change_preferred_to_display_name
Changing preferred to display name. Fixes #1211
This commit is contained in:
commit
bcdbced0dd
15 changed files with 65 additions and 45 deletions
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>,
|
||||
|
|
|
@ -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())),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>,
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
Loading…
Reference in a new issue