Skip to content

Commit 1e7bf3a

Browse files
committed
separate default locale to default user and default template locale
1 parent 8ce3661 commit 1e7bf3a

File tree

14 files changed

+57
-25
lines changed

14 files changed

+57
-25
lines changed

changelog.d/2-features/pr-2028

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Specialize `setDefaultLocale` to distinguish between default user locale and default template locale if the user's locale is n/a.

charts/brig/templates/configmap.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,8 @@ data:
204204
suspendTimeout: {{ .setSuspendInactiveUsers.suspendTimeout }}
205205
{{- end }}
206206
setRichInfoLimit: {{ .setRichInfoLimit }}
207-
setDefaultLocale: {{ .setDefaultLocale }}
207+
setDefaultTemplateLocale: en
208+
setDefaultUserLocale: {{ .setDefaultUserLocale }}
208209
setMaxTeamSize: {{ .setMaxTeamSize }}
209210
setMaxConvSize: {{ .setMaxConvSize }}
210211
setEmailVisibility: {{ .setEmailVisibility }}

charts/brig/values.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ config:
5353
legalholdUserTokenTimeout: 4838400
5454
legalholdAccessTokenTimeout: 900
5555
optSettings:
56-
setDefaultLocale: en
5756
setActivationTimeout: 1209600
5857
setTeamInvitationTimeout: 1814400
5958
setUserMaxConnections: 1000
@@ -64,7 +63,8 @@ config:
6463
stdDev: 3000
6564
retryAfter: 86400
6665
setRichInfoLimit: 5000
67-
setDefaultLocale: en
66+
setDefaultTemplateLocale: en
67+
setDefaultUserLocale: en
6868
setMaxTeamSize: 500
6969
setMaxConvSize: 500
7070
# Allowed values: https://github.com/wireapp/wire-server/blob/0126651a25aabc0c5589edc2b1988bb06550a03a/services/brig/src/Brig/Options.hs#L304-L306

deploy/services-demo/conf/brig.demo-docker.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ optSettings:
109109
stdDev: 3000 # 50 minutes
110110
retryAfter: 86400 # 1 day
111111
setRichInfoLimit: 5000 # should be in sync with Spar
112-
setDefaultLocale: en
112+
setDefaultTemplateLocale: en
113+
setDefaultUserLocale: en
113114
setMaxTeamSize: 128
114115
setMaxConvSize: 128
115116
setEmailVisibility: visible_to_self

deploy/services-demo/conf/brig.demo.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ optSettings:
109109
stdDev: 3000 # 50 minutes
110110
retryAfter: 86400 # 1 day
111111
setRichInfoLimit: 5000 # should be in sync with Spar
112-
setDefaultLocale: en
112+
setDefaultTemplateLocale: en
113+
setDefaultUserLocale: en
113114
setMaxTeamSize: 128
114115
setMaxConvSize: 128
115116
setEmailVisibility: visible_to_self

hack/helm_vars/wire-server/values.yaml.gotmpl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ brig:
6969
retryLimit: 5 # how many times can you have a failed login in that timeframe.
7070
setSuspendInactiveUsers:
7171
suspendTimeout: 10
72-
setDefaultLocale: en
72+
setDefaultTemplateLocale: en
73+
setDefaultUserLocale: en
7374
setMaxConvAndTeamSize: 16
7475
setMaxTeamSize: 32
7576
setMaxConvSize: 16

services/brig/brig.integration.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ optSettings:
152152
setSuspendInactiveUsers: # if this is omitted: never suspend inactive users.
153153
suspendTimeout: 10
154154
setRichInfoLimit: 5000 # should be in sync with Spar
155-
setDefaultLocale: en
155+
setDefaultTemplateLocale: en
156+
setDefaultUserLocale: en
156157
setMaxTeamSize: 32
157158
setMaxConvSize: 16
158159
setEmailVisibility: visible_to_self

services/brig/src/Brig/API/User.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1062,7 +1062,7 @@ deleteAccount account@(accountUser -> user) = do
10621062
revokeAllCookies uid
10631063
where
10641064
mkTombstone = do
1065-
defLoc <- setDefaultLocale <$> view settings
1065+
defLoc <- setDefaultUserLocale <$> view settings
10661066
return $
10671067
account
10681068
{ accountStatus = Deleted,

services/brig/src/Brig/Data/User.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ data ReAuthError
118118
-- there, it was claimed properly.
119119
newAccount :: NewUser -> Maybe InvitationId -> Maybe TeamId -> Maybe Handle -> AppIO (UserAccount, Maybe Password)
120120
newAccount u inv tid mbHandle = do
121-
defLoc <- setDefaultLocale <$> view settings
121+
defLoc <- setDefaultUserLocale <$> view settings
122122
domain <- viewFederationDomain
123123
uid <-
124124
Id <$> do
@@ -132,7 +132,7 @@ newAccount u inv tid mbHandle = do
132132
-- Ephemeral users' expiry time is in expires_in (default sessionTokenTimeout) seconds
133133
e <- view zauthEnv
134134
let ZAuth.SessionTokenTimeout defTTL = e ^. ZAuth.settings . ZAuth.sessionTokenTimeout
135-
ttl = fromMaybe defTTL (fromRange <$> newUserExpiresIn u)
135+
ttl = maybe defTTL fromRange (newUserExpiresIn u)
136136
now <- liftIO =<< view currentTime
137137
return . Just . toUTCTimeMillis $ addUTCTime (fromIntegral ttl) now
138138
_ -> return Nothing
@@ -154,7 +154,7 @@ newAccount u inv tid mbHandle = do
154154

155155
newAccountInviteViaScim :: UserId -> TeamId -> Maybe Locale -> Name -> Email -> AppIO UserAccount
156156
newAccountInviteViaScim uid tid locale name email = do
157-
defLoc <- setDefaultLocale <$> view settings
157+
defLoc <- setDefaultUserLocale <$> view settings
158158
domain <- viewFederationDomain
159159
return (UserAccount (user domain (fromMaybe defLoc locale)) PendingInvitation)
160160
where
@@ -370,7 +370,7 @@ deactivateUser u =
370370

371371
lookupLocale :: UserId -> AppIO (Maybe Locale)
372372
lookupLocale u = do
373-
defLoc <- setDefaultLocale <$> view settings
373+
defLoc <- setDefaultUserLocale <$> view settings
374374
fmap (toLocale defLoc) <$> retry x1 (query1 localeSelect (params LocalQuorum (Identity u)))
375375

376376
lookupName :: UserId -> AppIO (Maybe Name)
@@ -417,7 +417,7 @@ lookupAuth u = fmap f <$> retry x1 (query1 authSelect (params LocalQuorum (Ident
417417
-- Skips nonexistent users. /Does not/ skip users who have been deleted.
418418
lookupUsers :: HavePendingInvitations -> [UserId] -> AppIO [User]
419419
lookupUsers hpi usrs = do
420-
loc <- setDefaultLocale <$> view settings
420+
loc <- setDefaultUserLocale <$> view settings
421421
domain <- viewFederationDomain
422422
toUsers domain loc hpi <$> retry x1 (query usersSelect (params LocalQuorum (Identity usrs)))
423423

@@ -426,7 +426,7 @@ lookupAccount u = listToMaybe <$> lookupAccounts [u]
426426

427427
lookupAccounts :: [UserId] -> AppIO [UserAccount]
428428
lookupAccounts usrs = do
429-
loc <- setDefaultLocale <$> view settings
429+
loc <- setDefaultUserLocale <$> view settings
430430
domain <- viewFederationDomain
431431
fmap (toUserAccount domain loc) <$> retry x1 (query accountsSelect (params LocalQuorum (Identity usrs)))
432432

services/brig/src/Brig/Options.hs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ import Brig.Types
2626
import Brig.User.Auth.Cookie.Limit
2727
import Brig.Whitelist (Whitelist (..))
2828
import qualified Brig.ZAuth as ZAuth
29+
import Control.Applicative
2930
import qualified Control.Lens as Lens
30-
import Data.Aeson (withText)
31+
import Data.Aeson (defaultOptions, fieldLabelModifier, genericParseJSON, withText)
3132
import qualified Data.Aeson as Aeson
3233
import Data.Aeson.Types (typeMismatch)
3334
import qualified Data.Char as Char
3435
import Data.Domain (Domain (..))
3536
import Data.Id
37+
import Data.LanguageCodes (ISO639_1 (EN))
3638
import Data.Misc (HttpsUrl)
3739
import Data.Range
3840
import Data.Scientific (toBoundedInteger)
@@ -439,9 +441,12 @@ data Settings = Settings
439441
-- field names and values), should be in sync
440442
-- with Spar
441443
setRichInfoLimit :: !Int,
442-
-- | Default locale to use
443-
-- (e.g. when selecting templates)
444-
setDefaultLocale :: !Locale,
444+
-- | Default locale to use when selecting templates
445+
-- use `setDefaultTemplateLocale` as the getter function which always provides a default value
446+
setDefaultTemplateLocaleInternal :: !(Maybe Locale),
447+
-- | Default locale to use for users
448+
-- use `setDefaultUserLocale` as the getter function which always provides a default value
449+
setDefaultUserLocaleInternal :: !(Maybe Locale),
445450
-- | Max. # of members in a team.
446451
-- NOTE: This must be in sync with galley
447452
setMaxTeamSize :: !Word32,
@@ -474,7 +479,7 @@ data Settings = Settings
474479
-- setFederationAllowedDomains:
475480
-- - wire.com
476481
-- - example.com
477-
setFederationDomain :: !(Domain),
482+
setFederationDomain :: !Domain,
478483
-- | The amount of time in milliseconds to wait after reading from an SQS queue
479484
-- returns no message, before asking for messages from SQS again.
480485
-- defaults to 'defSqsThrottleMillis'.
@@ -499,6 +504,18 @@ data Settings = Settings
499504
}
500505
deriving (Show, Generic)
501506

507+
defaultUserLocale :: Locale
508+
defaultUserLocale = Locale (Language EN) Nothing
509+
510+
defaultTemplateLocale :: Locale
511+
defaultTemplateLocale = defaultUserLocale
512+
513+
setDefaultUserLocale :: Settings -> Locale
514+
setDefaultUserLocale = fromMaybe defaultUserLocale . setDefaultUserLocaleInternal
515+
516+
setDefaultTemplateLocale :: Settings -> Locale
517+
setDefaultTemplateLocale = fromMaybe defaultTemplateLocale . setDefaultTemplateLocaleInternal
518+
502519
-- | The analog to `GT.FeatureFlags`. This type tracks only the things that we need to
503520
-- express our current cloud business logic.
504521
--
@@ -664,7 +681,16 @@ instance FromJSON Timeout where
664681
maybe defaultV fromIntegral bounded
665682
parseJSON v = typeMismatch "activationTimeout" v
666683

667-
instance FromJSON Settings
684+
instance FromJSON Settings where
685+
parseJSON = genericParseJSON customOptions
686+
where
687+
customOptions =
688+
defaultOptions
689+
{ fieldLabelModifier = \case
690+
"setDefaultUserLocaleInternal" -> "setDefaultUserLocale"
691+
"setDefaultTemplateLocaleInternal" -> "setDefaultTemplateLocale"
692+
other -> other
693+
}
668694

669695
instance FromJSON Opts
670696

0 commit comments

Comments
 (0)