Skip to content

Commit a91c531

Browse files
Merge branch 'staging' of https://github.com/benawad/dogehouse into staging
2 parents 4768dc5 + a86ed06 commit a91c531

File tree

5 files changed

+71
-40
lines changed

5 files changed

+71
-40
lines changed

CONTRIBUTING.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ This project is using the [conventional commits](https://www.conventionalcommits
1919
commit messages are standardized:
2020
1. Make sure your shell path is in the root of the project (not inside any of the packages).
2121
2. Run `yarn`.
22-
3. Stage the files you are commiting with `git add [files]`.
22+
3. Stage the files you are committing with `git add [files]`.
2323
4. Run `yarn commit`. This will start an interactive prompt that generates your commit message:
2424
1. Select the type of change.
2525
2. Type the scope. This is either `global` for project-wide changes or one of the packages (kibbeh, shawarma etc.).
@@ -48,14 +48,14 @@ Do this if you only want to do React stuff and don't want to touch Elixir:
4848
Navigate to `/kibbeh`
4949

5050
- Run `yarn`
51-
- Run `yarn staging` (this tells React to connect to a hosted version of the backend for development purposes)
52-
- Read `kibbeh/README.md` for more information and a fixes for known development issues.
51+
- Run `yarn staging` (this tells React to connect to a hosted version of the backend for development purposes).
52+
- Read `kibbeh/README.md` for more information and fixes for known development issues.
5353
> **NOTE:** Please follow the [design guidelines](https://github.com/benawad/dogehouse/blob/staging/DESIGN_GUIDELINES.md) and [figma mockups](https://www.figma.com/file/CS01VVLR7ArQl0afYFkNj3/Web-App) and if what you're trying to do isn't in there, consult [@ajmnz](https://github.com/ajmnz)/[@benawad](https://github.com/benawad) beforehand.
5454
5555
## Translating
5656
1. Set up the front-end (previous step).
5757
2. Go to `kibbeh/public/locales`.
58-
3. Check if a folder with the language you want to add / edit already exists. If not, copy `en/translation`, create the folder and paste it there.
58+
3. Check if a folder with the language you want to add/ edit already exists. If not, copy `en/translation`, create the folder and paste it there.
5959
4. Edit the JSON file. Make sure that it's valid.
6060
5. Go to `kibbeh/src/ui/LanguageSelector.tsx` and edit the object to include your language.
6161
6. Test and make a pull request.
@@ -67,7 +67,7 @@ Navigate to `/kibbeh`
6767
4. Run `yarn i18` to generate all fields into all other `translation.json`.
6868

6969
## Devcontainer Full Local Development
70-
For VSCode users, we're able to use devcontainers which allows to create development environments that already have all the tools and services configured and ready to go.
70+
For VSCode users, we're able to use devcontainers which allows you to create development environments that already have all the tools and services configured and ready to go.
7171

7272
### Usage
7373

kibbeh/public/locales/de/translation.json

+33-33
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
{
23
"_comment": "if you change this file, do: yarn i18",
34
"common": {
@@ -16,13 +17,13 @@
1617
"copied": "kopiert",
1718
"formattedIntlDate": "{{date, intlDate}}",
1819
"formattedIntlTime": "{{time, intlTime}}",
19-
"requestPermissions": "Bitte erteile DogeHouse Browserpermissions."
20+
"requestPermissions": "Bitte erteile DogeHouse Browserberechtigungen."
2021
},
2122
"header": {
2223
"_comment": "Main Header UI Internationalization Strings",
2324
"title": "DogeHouse",
2425
"mutedTitle": "Stumm | DogeHouse",
25-
"deafenedTitle": "Deafened | DogeHouse",
26+
"deafenedTitle": "Lautsprecher stumm | DogeHouse",
2627
"dashboard": "Dashboard",
2728
"connectionTaken": "Verbindung getrennt"
2829
},
@@ -73,8 +74,7 @@
7374
"soundSettings": "Soundeinstellungen",
7475
"deleteAccount": "Konto löschen",
7576
"overlaySettings": "Overlay-Einstellungen löschen",
76-
"couldNotFindUser": "Wir konnten diesen Benutzer leider nicht finden. ",
77-
"privacySettings": "Privacy settings"
77+
"couldNotFindUser": "Wir konnten diesen Benutzer leider nicht finden. "
7878
},
7979
"notFound": {
8080
"whoopsError": "Hoppla! Diese Seite ging im Gespräch verloren.",
@@ -89,10 +89,10 @@
8989
"allowAllConfirm": "Bist du sicher? Damit erteilst du {{count}} Benutzern Redeberechtigungen."
9090
},
9191
"searchUser": { "search": "Suchen..." },
92-
"soundEffectSettings": { "header": "Ton", "title": "Sound Settings" },
92+
"soundEffectSettings": { "header": "Ton", "title": "Toneinstellungen" },
9393
"viewUser": {
9494
"editProfile": "Profil bearbeiten",
95-
"followsYou": "folgt dir",
95+
"followsYou": "Folgt dir",
9696
"following": "Abonniert",
9797
"followers": "Abonnenten",
9898
"followHim": "Folgen",
@@ -134,7 +134,7 @@
134134
"avatar": {},
135135
"backBar": {},
136136
"blockedFromRoomUsers": {
137-
"header": "blockierte Benutzer",
137+
"header": "Blockierte Benutzer",
138138
"unban": "Blockierung aufheben",
139139
"noBans": "Du hast aktuell (noch) niemanden blockiert"
140140
},
@@ -158,18 +158,18 @@
158158
},
159159
"micPermissionBanner": {
160160
"permissionDenied": "Wir haben keinen Zugriff auf dein Mikrofon. Öffne deine Browsereinstellungen, setze die nötigen Berechtigungen und lade die Seite erneut.",
161-
"dismiss": "verstanden",
162-
"tryAgain": "erneut versuchen"
161+
"dismiss": "Verstanden",
162+
"tryAgain": "Erneut versuchen"
163163
},
164164
"modals": {
165165
"createRoomModal": {
166166
"public": "Öffentlich",
167167
"private": "Privat",
168168
"roomName": "Raumname",
169169
"roomDescription": "Raumbeschreibung",
170-
"descriptionError": "die maximale Länge beträgt 500 Zeichen",
171-
"nameError": "muss zwischen 2 und 60 Zeichen lang sein",
172-
"subtitle": "Fill the following fields to start a new room"
170+
"descriptionError": "Die maximale Länge beträgt 500 Zeichen",
171+
"nameError": "Muss zwischen 2 und 60 Zeichen lang sein",
172+
"subtitle": "Fülle die folgenden Felder aus, um einen Raum zu erstellen"
173173
},
174174
"invitedToJoinRoomModal": {
175175
"newRoomCreated": "Neuen Raum erstellt",
@@ -180,28 +180,28 @@
180180
},
181181
"editProfileModal": {
182182
"usernameTaken": "Benutzername ist bereits vergeben",
183-
"avatarUrlError": "ungültiges Bild",
183+
"avatarUrlError": "Ungültiges Bild",
184184
"avatarUrlLabel": "GitHub / Twitter Avatar URL",
185185
"displayNameError": "Länge: 2 bis 50 Buchstaben",
186186
"displayNameLabel": "Anzeigename",
187187
"usernameError": "Länge: 4 bis 15 alphanumerische Zeichen und Unterstriche",
188188
"usernameLabel": "Benutzername",
189189
"bioError": "Maximal 160 Buchstaben",
190-
"bioLabel": "Bio",
191-
"bannerUrlLabel": "Twitter banner URL"
190+
"bioLabel": "Biografie",
191+
"bannerUrlLabel": "Twitter Banner URL"
192192
},
193193
"profileModal": {
194194
"blockUserConfirm": "Bist du sicher, dass du diesen Benutzer aus allen deinen zukünftigen Räumen ausschließen möchtest?",
195195
"blockUser": "Benutzer blockieren",
196196
"makeMod": "Zum Moderator befördern",
197197
"unmod": "Moderator Status aufheben",
198-
"addAsSpeaker": "zu Sprecher befördern",
199-
"moveToListener": "zu Zuhörer herabstufen",
198+
"addAsSpeaker": "Zu Sprecher befördern",
199+
"moveToListener": "Zu Zuhörer herabstufen",
200200
"banFromChat": "Im Chat blockieren",
201201
"banFromRoom": "Aus Raum ausschließen",
202202
"goBackToListener": "Zurück zum Zuhörer",
203203
"deleteMessage": "Nachricht löschen",
204-
"makeRoomCreator": "zum Raumadmin befördern",
204+
"makeRoomCreator": "Zum Raumadmin befördern",
205205
"unBanFromChat": "Vom Chat entbannen"
206206
},
207207
"roomSettingsModal": {
@@ -210,7 +210,7 @@
210210
"makePrivate": "Raum privat machen",
211211
"renamePublic": "Öffentlichen Raum-Namen setzen",
212212
"renamePrivate": "Privaten Raum-Namen setzen",
213-
"chatDisabled": "disable chat"
213+
"chatDisabled": "Chat ausschalten"
214214
}
215215
},
216216
"userVolumeSlider": {
@@ -234,17 +234,17 @@
234234
"addSupport": "erstellen und ich werde versuchen, die Unterstützung für dein Gerät hinzuzufügen."
235235
},
236236
"inviteButton": {
237-
"invited": "eingeladen",
238-
"inviteToRoom": "zum Raum einladen"
237+
"invited": "Eingeladen",
238+
"inviteToRoom": "Zum Raum einladen"
239239
},
240240
"followingOnline": {
241-
"people": "People",
241+
"people": "Leute",
242242
"online": "ONLINE",
243243
"noOnline": "Aktuell sind keine deiner Freunde online.",
244244
"showMore": "Zeige mehr"
245245
},
246246
"upcomingRoomsCard": {
247-
"upcomingRooms": "Kommende Räume",
247+
"upcomingRooms": "Anstehende Räume",
248248
"exploreMoreRooms": "Finde weitere Räume"
249249
},
250250
"search": {
@@ -261,7 +261,7 @@
261261
"modalSubtitle": "Möchtest du dich wirklich abmelden?"
262262
},
263263
"debugAudio": {
264-
"debugAudio": "Debug Audio",
264+
"debugAudio": "Ton debuggen",
265265
"stopDebugger": "Stoppe Debugger"
266266
},
267267
"downloadApp": "App herunterladen"
@@ -282,15 +282,15 @@
282282
"minLength": "minimale Länge: 2",
283283
"roomDescription": "Raumbeschreibung"
284284
},
285-
"tommorow": "morgen",
286-
"today": "heute",
285+
"tommorow": "Morgen",
286+
"today": "Heute",
287287
"deleteModal": {
288288
"areYouSure": "Möchtest du diesen geplanten Raum wirklich löschen?"
289289
}
290290
},
291291
"roomChat": {
292292
"title": "Chat",
293-
"emotesSoon": "[emotes bald]",
293+
"emotesSoon": "[emotes kommen bald]",
294294
"bannedAlert": "Du wurdest aus dem Chat ausgeschlossen",
295295
"waitAlert": "Du musst eine Sekunde warten, bevor du eine weitere Nachricht schreiben kannst",
296296
"search": "Suchen",
@@ -300,19 +300,19 @@
300300
"whisper": "Flüstern",
301301
"welcomeMessage": "Willkommen im Chat!",
302302
"roomDescription": "Raumbeschreibung",
303-
"disabled": "room chat has been disabled"
303+
"disabled": "Der Chat wurde vom Raum ausgeschaltet"
304304
},
305305
"roomStatus": {
306-
"fuelingRocket": "Rakete wird getankt",
306+
"fuelingRocket": "Rakete wird getankt!",
307307
"takingOff": "Am Abheben",
308308
"inSpace": "Im Weltall",
309-
"approachingMoon": "Nähert sich dem Mond",
309+
"approachingMoon": "Nähert sich dem Mond!",
310310
"lunarDoge": "Lunar doge",
311-
"approachingSun": "Nähert sich der Sonne",
311+
"approachingSun": "Nähert sich der Sonne!",
312312
"solarDoge": "Solar doge",
313-
"approachingGalaxy": "Nähert sich einer Galaxie",
313+
"approachingGalaxy": "Nähert sich einer Galaxie!",
314314
"galacticDoge": "Galactic Doge",
315-
"spottedLife": "Planet mit Leben gefunden"
315+
"spottedLife": "Planet mit Leben gefunden!"
316316
},
317317
"feed": { "yourFeed": "Dein Feed" }
318318
}

kibbeh/src/shared-hooks/useMainWsHandler.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export const useMainWsHandler = () => {
255255
);
256256
}
257257
),
258-
conn.addListener<any>("mod_changed", ({ userId, roomId }) => {
258+
conn.addListener<any>("mod_changed", ({ userId, roomId, isMod }) => {
259259
updateQuery(["joinRoomAndGetInfo", roomId], (data) =>
260260
!data || "error" in data
261261
? data
@@ -267,7 +267,7 @@ export const useMainWsHandler = () => {
267267
...x,
268268
roomPermissions: mergeRoomPermission(
269269
x.roomPermissions,
270-
{ isMod: !x.roomPermissions?.isMod }
270+
{ isMod }
271271
),
272272
}
273273
: x

kousa/lib/broth/message/user/update.ex

+12
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ defmodule Broth.Message.User.Update do
2424
:whisperPrivacySetting
2525
])
2626
|> validate_required([:username])
27+
|> update_change(:displayName, &String.trim/1)
28+
|> validate_length(:bio, min: 0, max: 160)
29+
|> validate_length(:displayName, min: 2, max: 50)
30+
|> validate_format(:username, ~r/^[\w\.]{4,15}$/)
31+
|> validate_format(
32+
:avatarUrl,
33+
~r/^https?:\/\/(www\.|)((a|p)bs.twimg.com\/(profile_images|sticky\/default_profile_images)\/(.*)\.(jpg|png|jpeg|webp)|avatars\.githubusercontent\.com\/u\/[^\s]+|github.com\/identicons\/[^\s]+|cdn.discordapp.com\/avatars\/[^\s]+\/[^\s]+\.(jpg|png|jpeg|webp))/
34+
)
35+
|> validate_format(
36+
:bannerUrl,
37+
~r/^https?:\/\/(www\.|)(pbs.twimg.com\/profile_banners\/(.+)\/(.+)\/(.+)(?:\.(jpg|png|jpeg|webp))?|avatars\.githubusercontent\.com\/u\/)/
38+
)
2739
|> unique_constraint(:username)
2840
end
2941

kousa/test/broth/user/update_test.exs

+19
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,25 @@ defmodule BrothTest.User.UpdateTest do
101101
"https://pbs.twimg.com/profile_images/1152793238761345024/VRBvxeCM_400x400.jpg"
102102
end
103103

104+
test "a bad avatar", t do
105+
user_id = t.user.id
106+
107+
ref =
108+
WsClient.send_call(
109+
t.client_ws,
110+
"user:update",
111+
%{
112+
"avatarUrl" => "https://bob.example.com/"
113+
}
114+
)
115+
116+
WsClient.assert_error("user:update", ref, %{"avatarUrl" => "has invalid format"})
117+
118+
user = Users.get_by_id(user_id)
119+
120+
assert user.avatarUrl == t.user.avatarUrl
121+
end
122+
104123
@tag :skip
105124
test "when you have two websockets connected updating one propagates change to other"
106125

0 commit comments

Comments
 (0)