From bd45d503e5d007e730f4e81dccd7e7864c9a85cc Mon Sep 17 00:00:00 2001
From: Chocobozzz <me@florianbigard.com>
Date: Thu, 6 Aug 2020 14:58:01 +0200
Subject: Reorganize shared models

---
 .../core-utils/abuse/abuse-predefined-reasons.ts   |  14 +++
 shared/core-utils/abuse/index.ts                   |   1 +
 shared/core-utils/i18n/i18n.ts                     | 105 +++++++++++++++++++++
 shared/core-utils/i18n/index.ts                    |   1 +
 shared/core-utils/users/index.ts                   |   1 +
 shared/core-utils/users/user-role.ts               |  35 +++++++
 6 files changed, 157 insertions(+)
 create mode 100644 shared/core-utils/abuse/abuse-predefined-reasons.ts
 create mode 100644 shared/core-utils/abuse/index.ts
 create mode 100644 shared/core-utils/i18n/i18n.ts
 create mode 100644 shared/core-utils/i18n/index.ts
 create mode 100644 shared/core-utils/users/index.ts
 create mode 100644 shared/core-utils/users/user-role.ts

(limited to 'shared/core-utils')

diff --git a/shared/core-utils/abuse/abuse-predefined-reasons.ts b/shared/core-utils/abuse/abuse-predefined-reasons.ts
new file mode 100644
index 000000000..9967e54dd
--- /dev/null
+++ b/shared/core-utils/abuse/abuse-predefined-reasons.ts
@@ -0,0 +1,14 @@
+import { AbusePredefinedReasons, AbusePredefinedReasonsString } from '../../models/moderation/abuse/abuse-reason.model'
+
+export const abusePredefinedReasonsMap: {
+  [key in AbusePredefinedReasonsString]: AbusePredefinedReasons
+} = {
+  violentOrRepulsive: AbusePredefinedReasons.VIOLENT_OR_REPULSIVE,
+  hatefulOrAbusive: AbusePredefinedReasons.HATEFUL_OR_ABUSIVE,
+  spamOrMisleading: AbusePredefinedReasons.SPAM_OR_MISLEADING,
+  privacy: AbusePredefinedReasons.PRIVACY,
+  rights: AbusePredefinedReasons.RIGHTS,
+  serverRules: AbusePredefinedReasons.SERVER_RULES,
+  thumbnails: AbusePredefinedReasons.THUMBNAILS,
+  captions: AbusePredefinedReasons.CAPTIONS
+}
diff --git a/shared/core-utils/abuse/index.ts b/shared/core-utils/abuse/index.ts
new file mode 100644
index 000000000..244b83cff
--- /dev/null
+++ b/shared/core-utils/abuse/index.ts
@@ -0,0 +1 @@
+export * from './abuse-predefined-reasons'
diff --git a/shared/core-utils/i18n/i18n.ts b/shared/core-utils/i18n/i18n.ts
new file mode 100644
index 000000000..9ad0f456d
--- /dev/null
+++ b/shared/core-utils/i18n/i18n.ts
@@ -0,0 +1,105 @@
+export const LOCALE_FILES = [ 'player', 'server' ]
+
+export const I18N_LOCALES = {
+  // Always first to avoid issues when using express acceptLanguages function when no accept language header is set
+  'en-US': 'English',
+
+  'ar': 'العربية',
+  'ca-ES': 'Català',
+  'cs-CZ': 'Čeština',
+  'de-DE': 'Deutsch',
+  'el-GR': 'ελληνικά',
+  'eo': 'Esperanto',
+  'es-ES': 'Español',
+  'eu-ES': 'Euskara',
+  'fi-FI': 'suomi',
+  'fr-FR': 'Français',
+  'gd': 'Gàidhlig',
+  'hu-HU': 'magyar',
+  'it-IT': 'Italiano',
+  'ja-JP': '日本語',
+  'kab': 'Taqbaylit',
+  'nl-NL': 'Nederlands',
+  'oc': 'Occitan',
+  'pl-PL': 'Polski',
+  'pt-BR': 'Português (Brasil)',
+  'pt-PT': 'Português (Portugal)',
+  'ru-RU': 'русский',
+  'sv-SE': 'svenska',
+  'th-TH': 'ไทย',
+  'vi-VN': 'Tiếng Việt',
+  'zh-Hans-CN': '简体中文(中国)',
+  'zh-Hant-TW': '繁體中文(台灣)'
+}
+
+const I18N_LOCALE_ALIAS = {
+  'ar-001': 'ar',
+  'ca': 'ca-ES',
+  'cs': 'cs-CZ',
+  'de': 'de-DE',
+  'el': 'el-GR',
+  'en': 'en-US',
+  'es': 'es-ES',
+  'eu': 'eu-ES',
+  'fi': 'fi-FI',
+  'fr': 'fr-FR',
+  'hu': 'hu-HU',
+  'it': 'it-IT',
+  'ja': 'ja-JP',
+  'nl': 'nl-NL',
+  'pl': 'pl-PL',
+  'pt': 'pt-BR',
+  'ru': 'ru-RU',
+  'sv': 'sv-SE',
+  'th': 'th-TH',
+  'vi': 'vi-VN',
+  'zh-CN': 'zh-Hans-CN',
+  'zh-Hans': 'zh-Hans-CN',
+  'zh-Hant': 'zh-Hant-TW',
+  'zh-TW': 'zh-Hant-TW',
+  'zh': 'zh-Hans-CN'
+}
+
+export const POSSIBLE_LOCALES = Object.keys(I18N_LOCALES)
+                                      .concat(Object.keys(I18N_LOCALE_ALIAS))
+
+export function getDefaultLocale () {
+  return 'en-US'
+}
+
+export function isDefaultLocale (locale: string) {
+  return getCompleteLocale(locale) === getCompleteLocale(getDefaultLocale())
+}
+
+export function peertubeTranslate (str: string, translations?: { [ id: string ]: string }) {
+  // FIXME: remove disable rule when the client is upgraded to typescript 3.7
+  // eslint-disable-next-line
+  return translations && translations[str] ? translations[str] : str
+}
+
+const possiblePaths = POSSIBLE_LOCALES.map(l => '/' + l)
+export function is18nPath (path: string) {
+  return possiblePaths.includes(path)
+}
+
+export function is18nLocale (locale: string) {
+  return POSSIBLE_LOCALES.includes(locale)
+}
+
+export function getCompleteLocale (locale: string) {
+  if (!locale) return locale
+
+  if (I18N_LOCALE_ALIAS[locale]) return I18N_LOCALE_ALIAS[locale]
+
+  return locale
+}
+
+export function getShortLocale (locale: string) {
+  if (locale.includes('-') === false) return locale
+
+  return locale.split('-')[0]
+}
+
+export function buildFileLocale (locale: string) {
+  return getCompleteLocale(locale)
+}
diff --git a/shared/core-utils/i18n/index.ts b/shared/core-utils/i18n/index.ts
new file mode 100644
index 000000000..8f7cbe2c7
--- /dev/null
+++ b/shared/core-utils/i18n/index.ts
@@ -0,0 +1 @@
+export * from './i18n'
diff --git a/shared/core-utils/users/index.ts b/shared/core-utils/users/index.ts
new file mode 100644
index 000000000..1cbf0af1b
--- /dev/null
+++ b/shared/core-utils/users/index.ts
@@ -0,0 +1 @@
+export * from './user-role'
diff --git a/shared/core-utils/users/user-role.ts b/shared/core-utils/users/user-role.ts
new file mode 100644
index 000000000..2b322faf3
--- /dev/null
+++ b/shared/core-utils/users/user-role.ts
@@ -0,0 +1,35 @@
+import { UserRight, UserRole } from '../../models/users'
+
+export const USER_ROLE_LABELS: { [ id in UserRole ]: string } = {
+  [UserRole.USER]: 'User',
+  [UserRole.MODERATOR]: 'Moderator',
+  [UserRole.ADMINISTRATOR]: 'Administrator'
+}
+
+const userRoleRights: { [ id in UserRole ]: UserRight[] } = {
+  [UserRole.ADMINISTRATOR]: [
+    UserRight.ALL
+  ],
+
+  [UserRole.MODERATOR]: [
+    UserRight.MANAGE_VIDEO_BLACKLIST,
+    UserRight.MANAGE_ABUSES,
+    UserRight.REMOVE_ANY_VIDEO,
+    UserRight.REMOVE_ANY_VIDEO_CHANNEL,
+    UserRight.REMOVE_ANY_VIDEO_PLAYLIST,
+    UserRight.REMOVE_ANY_VIDEO_COMMENT,
+    UserRight.UPDATE_ANY_VIDEO,
+    UserRight.SEE_ALL_VIDEOS,
+    UserRight.MANAGE_ACCOUNTS_BLOCKLIST,
+    UserRight.MANAGE_SERVERS_BLOCKLIST,
+    UserRight.MANAGE_USERS
+  ],
+
+  [UserRole.USER]: []
+}
+
+export function hasUserRight (userRole: UserRole, userRight: UserRight) {
+  const userRights = userRoleRights[userRole]
+
+  return userRights.includes(UserRight.ALL) || userRights.includes(userRight)
+}
-- 
cgit v1.2.3