Skip to content

Commit

Permalink
Enable site languages for new user (fixes LemmyNet#5234) (LemmyNet#5235)
Browse files Browse the repository at this point in the history
* Enable site languages for new user (fixes LemmyNet#5234)

* test coverage
  • Loading branch information
Nutomic authored Nov 28, 2024
1 parent 5a403bc commit f6de3b0
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 5 deletions.
14 changes: 12 additions & 2 deletions api_tests/src/user.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ import {
unfollows,
saveUserSettingsBio,
} from "./shared";
import { LemmyHttp, SaveUserSettings, UploadImage } from "lemmy-js-client";
import {
EditSite,
LemmyHttp,
SaveUserSettings,
UploadImage,
} from "lemmy-js-client";
import { GetPosts } from "lemmy-js-client/dist/types/GetPosts";

beforeAll(setupLogins);
Expand Down Expand Up @@ -149,9 +154,14 @@ test("Create user with Arabic name", async () => {
});

test("Create user with accept-language", async () => {
const edit: EditSite = {
discussion_languages: [32],
};
await alpha.editSite(edit);

let lemmy_http = new LemmyHttp(alphaUrl, {
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language#syntax
headers: { "Accept-Language": "fr-CH, en;q=0.8, de;q=0.7, *;q=0.5" },
headers: { "Accept-Language": "fr-CH, en;q=0.8, *;q=0.5" },
});
let user = await registerUser(lemmy_http, alphaUrl);

Expand Down
27 changes: 24 additions & 3 deletions crates/api_crud/src/user/create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ use lemmy_api_common::{
};
use lemmy_db_schema::{
aggregates::structs::PersonAggregates,
newtypes::{InstanceId, OAuthProviderId},
newtypes::{InstanceId, OAuthProviderId, SiteId},
source::{
actor_language::SiteLanguage,
captcha_answer::{CaptchaAnswer, CheckCaptchaAnswer},
language::Language,
local_site::LocalSite,
Expand Down Expand Up @@ -145,7 +146,13 @@ pub async fn register(
..LocalUserInsertForm::new(inserted_person.id, Some(data.password.to_string()))
};

let inserted_local_user = create_local_user(&context, language_tags, &local_user_form).await?;
let inserted_local_user = create_local_user(
&context,
language_tags,
&local_user_form,
local_site.site_id,
)
.await?;

if local_site.site_setup && require_registration_application {
if let Some(answer) = data.answer.clone() {
Expand Down Expand Up @@ -358,7 +365,13 @@ pub async fn authenticate_with_oauth(
..LocalUserInsertForm::new(person.id, None)
};

local_user = create_local_user(&context, language_tags, &local_user_form).await?;
local_user = create_local_user(
&context,
language_tags,
&local_user_form,
local_site.site_id,
)
.await?;

// Create the oauth account
let oauth_account_form =
Expand Down Expand Up @@ -449,15 +462,23 @@ async fn create_local_user(
context: &Data<LemmyContext>,
language_tags: Vec<String>,
local_user_form: &LocalUserInsertForm,
local_site_id: SiteId,
) -> Result<LocalUser, LemmyError> {
let all_languages = Language::read_all(&mut context.pool()).await?;
// use hashset to avoid duplicates
let mut language_ids = HashSet::new();

// Enable languages from `Accept-Language` header
for l in language_tags {
if let Some(found) = all_languages.iter().find(|all| all.code == l) {
language_ids.insert(found.id);
}
}

// Enable site languages. Ignored if all languages are enabled.
let discussion_languages = SiteLanguage::read(&mut context.pool(), local_site_id).await?;
language_ids.extend(discussion_languages);

let language_ids = language_ids.into_iter().collect();

let inserted_local_user =
Expand Down

0 comments on commit f6de3b0

Please sign in to comment.