Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
"hosting_multisite_domain_configuration_ssl": "SSL",
"hosting_multisite_domain_configuration_country_ip_help": "Activez l'IP du pays pour géolocaliser les parties internationales de votre site afin d'optimiser leur référencement.",
"hosting_multisite_domain_configuration_firewall": "Activer le firewall",
"hosting_multisite_domain_configuration_firewall_help": "Activez le firewall pour bénéficier dune protection renforcée de votre site.",
"hosting_multisite_domain_configuration_firewall_help": "Activez le firewall pour bénéficier d'une protection renforcée de votre site.",
"hosting_multisite_domain_configuration_ownlog": "Logs séparés",
"hosting_multisite_domain_configuration_ownlog_help": "Activez cette option pour avoir des logs séparés pour votre multisite.",
"hosting_add_step2_mode_OVH_domain_name_www_question": "Créer également le sous domaine www.{{t0}}",
Expand Down Expand Up @@ -90,6 +90,125 @@
"hosting_dashboard_modal_update_headline": "Changer le nom de votre site",
"hosting_dashboard_modal_update_description": "Veuillez saisir le nouveau nom que vous souhaitez donner à votre site. Il s’agit d’un nom interne, visible uniquement par vous.",
"hosting_dashboard_modal_update_input_label": "Nouveau nom",
"hosting_dashboard_modal_update_success": "Le nom de votre site a été mis à jour avec succès"

"hosting_dashboard_modal_update_success": "Le nom de votre site a été mis à jour avec succès",
"tab_DOMAINS_configuration_add_failure": "Une erreur est survenue lors de l'ajout du ou des domaines à votre hébergement mutualisé.",
"cdn_shared_title": "Configurer votre CDN {{range}} pour {{domain}}",
"cdn_shared_breadcrumb": "Configuration CDN",
"cdn_shared_info": "Retrouvez les paramètres de l'option Shared CDN. Des réglages standards sont appliqués par défaut pour vous permettre de démarrer simplement et rapidement. Les options avancées CDN Security et CDN Advanced vous donnent accès à davantage de paramètres.",
"cdn_shared_help": "Besoin d'aide pour les statistiques et logs de votre site ?",
"cdn_shared_help_link": "Consultez nos guides en ligne.",
"cdn_shared_state_enable": "Activé",
"cdn_shared_state_disabled": "Désactivé",
"cdn_shared_option_category_performance": "Performances",
"cdn_shared_option_category_cache": "Cache",
"cdn_shared_option_category_security": "Sécurité",
"cdn_shared_option_always_online_title": "Always online",
"cdn_shared_option_always_online_info": "Le CDN continue à répondre aux requêtes, même en cas de panne du serveur d'origine.",
"cdn_shared_option_http_https_title": "HTTP/2",
"cdn_shared_option_http_https_info": "Augmentation de la performance et de la sécurité de votre site en utilisant le protocole HTTP/2.",
"cdn_shared_option_brotli_title": "Brotli",
"cdn_shared_option_brotli_info": "Réduire la taille des données transférées grâce aux algorithmes de dernière génération Brotli.",
"cdn_shared_option_dev_mode_title": "Dev-mode",
"cdn_shared_option_dev_mode_info": "Mode développeur pour forcer le CDN à récupérer systématiquement les valeurs sur le serveur d'origine.",
"cdn_shared_option_advanced_flush_title": "Purge avancée",
"cdn_shared_option_advanced_flush_info": "Personnaliser votre purge en choisissant les éléments du cache à vider: tout le site, un dossier, une URI, une extension de fichiers ou à l'aide d'une expression régulière personnalisée. Accessible directement depuis l'onglet Multisite dans la liste des actions.",
"cdn_shared_option_advanced_flush_info_for_basic_and_security": "Personnaliser votre purge en choisissant les éléments du cache à vider: tout le site, un dossier, une URI, une extension de fichiers ou à l'aide d'une expression régulière personnalisée. La purge avancée est disponible via l'option CDN Advanced. Souhaitez-vous changer d'offre ?",
"cdn_shared_option_query_string_title": "Query String",
"cdn_shared_option_query_string_info": "Gérer la mise en cache de contenu basée sur les paramètres de la requête URL, aussi appelée \"Query String\". En fonction de votre configuration, le CDN distribuera la ressource suivante:",
"cdn_shared_option_query_string_sort_ignored": "Désactivé = La ressource est mise en cache en triant ses paramètres.",
"cdn_shared_option_query_string_sort_true": "Activé - Trier les paramètres = La ressource est mise en cache en triant ses paramètres.",
"cdn_shared_option_query_string_sort_false": "Activé - Ignorer les paramètres = La ressource est mise en cache sans aucun paramètre",
"cdn_shared_option_query_string_list_sorted": "Trier les paramètres",
"cdn_shared_option_query_string_list_ignored": "Ignorer les paramètres",
"cdn_shared_option_prewarm_title": "Prewarm",
"cdn_shared_option_prewarm_info": "Forcer la mise en cache permanente de vos ressources primordiales. Le CDN anticipe et rafraîchit automatiquement le cache, sans attendre de requête de l'utilisateur.",
"cdn_shared_option_prewarm_quota": "Dernier calcul du quota",
"cdn_shared_option_prewarm_btn_edit_urls": "Editer la liste des URL",
"cdn_shared_option_http_geolocation_title": "Header HTTP de géolocalisation",
"cdn_shared_option_http_geolocation_info": "Connaître le pays du visiteur pour personnaliser l'expérience proposée. Le code pays est ajouté automatiquement dans le header de chaque requête pour être manipulé par votre serveur d'origine.",
"cdn_shared_option_prefetch_title": "Prefetch",
"cdn_shared_option_prefetch_info": "Anticiper le chargement de la ressource suivante. Précharger la ressource automatiquement dans le cache grâce au header Link. Celui-ci doit se trouver dans le header de chaque page du site web requérant du Prefetch.",
"cdn_shared_option_prefetch_info_link": "Consulter le guide",
"cdn_shared_option_mobile_redirect_title": "Mobile redirect",
"cdn_shared_option_mobile_redirect_info": "Rediriger automatiquement les visiteurs \"Mobile\" vers un site web optimisé. Au choix : rediriger systématiquement vers la racine d'un autre site web, ou conserver l'URL en ne remplaçant que le domaine (ou le sous-domaine).",
"cdn_shared_option_mobile_redirect_strategy_still": "Redirige vers une URL fixe",
"cdn_shared_option_mobile_redirect_strategy_keep": "Redirige et conserve l'URL",
"cdn_shared_option_mobile_redirect_url_placeholder": "https://www.monsiteweb.com",
"cdn_shared_option_cache_rule_title": "Cache rule",
"cdn_shared_option_cache_rule_btn_add_rule": "Ajouter une règle",
"cdn_shared_option_cache_rule_add_rule_max_rules": "L'offre {{range}} vous permet d'ajouter jusqu'à {{maxItems}} règles maximum.",
"cdn_shared_option_cache_rule_table_header_order_by": "Classement",
"cdn_shared_option_cache_rule_table_header_rule_name": "Nom de la règle",
"cdn_shared_option_cache_rule_table_header_resource": "Ressource",
"cdn_shared_option_cache_rule_table_header_options": "Options",
"cdn_shared_option_cache_rule_table_time_to_live": "Durée de vie",
"cdn_shared_option_cache_rule_table_items_type_extension": "Extension",
"cdn_shared_option_cache_rule_table_items_type_folder": "Dossier",
"cdn_shared_option_cache_rule_table_items_type_uri": "URI",
"cdn_shared_option_cache_rule_table_items_type_regex": "Expression régulière",
"cdn_shared_option_cache_rule_table_items_option_set_rule": "Modifier la règle",
"cdn_shared_option_cache_rule_table_items_option_delete_rule": "Supprimer la règle",
"cdn_shared_option_cache_rule_btn_validate": "Appliquer la configuration",
"cdn_shared_option_cors_description": "Spécifier les domaines extérieurs qui seront autorisés à accéder à vos ressources web",
"cdn_shared_option_cors_edit": "Editer la liste des ressources externes",
"cdn_shared_option_https_redirect_description": "Protégez la globalité du trafic de votre site web en le redirigeant vers le protocole HTTPS de façon temporaire ou permanente.",
"cdn_shared_option_https_redirect_301": "Redirection permanente (301)",
"cdn_shared_option_https_redirect_302": "Redirection temporaire (302)",
"cdn_shared_option_hsts_description": "Imposez l'accès à votre site web en HTTPS uniquement. Votre solution est ainsi sécurisée contre les attaques par rétrogradation.",
"cdn_shared_option_hsts_max_age": "Âge maximum.",
"cdn_shared_option_hsts_max_age_seconds": "Secondes",
"cdn_shared_option_hsts_max_age_days": "Jours",
"cdn_shared_option_hsts_max_age_months": "Mois",
"cdn_ssl_required_warning": "Attention l'option que vous avez activée nécessite que le SSL soit actif sur le sous-domaine. Veuillez vérifier la configuration du SSL sur le sous-domaine.",
"cdn_shared_option_mixed_content_description": "Forcez le chargement de l'intégralité du contenu de vos pages web de manière sécurisée, participant ainsi à une expérience utilisateur optimale. Toutes les ressources de votre site, internes comme externes doivent être disponibles en HTTPS.",
"cdn_shared_option_waf_description": "Protégez votre site à l'aide de notre pare-feu, des attaques frauduleuses telles que l'injection, les requêtes illégitimes ou le vol de données. Protégez-vous des principales failles connues du web en filtrant les requêtes et paquets transmis (la liste de failles est administrée et régulièrement mise à jour par OVHcloud).",
"cdn_shared_change_offer_modal_info": "La purge avancée est disponible via l'option CDN Advanced. Souhaitez-vous changer d'offre ?",
"cdn_shared_banner_success": "La configuration de votre CDN a bien été prise en compte et sera appliquée sur votre nom de domaine.",
"cdn_shared_modal_add_rule_title": "Créer une nouvelle règle",
"cdn_shared_modal_set_rule_title": "Modifier la règle {{ruleName}}",
"cdn_shared_modal_add_rule_info": "Créer une nouvelle règle de cache pour cette configuration. Chaque règle de cache permet de définir une fréquence de rafraîchissement pour un sous-ensemble de votre site.",
"cdn_shared_modal_add_rule_resource_info": "Pour l'offre CDN Basic et Security, il est uniquement possible de saisir une extension de fichier.",
"cdn_shared_modal_add_rule_field_resource_type": "Type de ressource",
"cdn_shared_modal_add_rule_field_resource_extension": "Extension",
"cdn_shared_modal_add_rule_field_resource_extension_info": "Veuillez saisir une extension de fichier valide sans mettre de point, par exemple : css",
"cdn_shared_modal_add_rule_field_resource_folder": "Dossier",
"cdn_shared_modal_add_rule_field_resource_folder_info": "Veuillez saisir un chemin valide pour l'un des dossiers présents dans le répertoire racine de votre site web, par exemple : /css/",
"cdn_shared_modal_add_rule_field_resource_regex": "Expression régulière personnalisée",
"cdn_shared_modal_add_rule_field_resource_regex_info": "Veuillez saisir une expression régulière valide, par exemple: .*.css",
"cdn_shared_modal_add_rule_field_resource_uri": "URI",
"cdn_shared_modal_add_rule_field_resource_uri_info": "Veuillez saisir une URI valide pour votre site web, par exemple: /product/howto.pdf",
"cdn_shared_modal_add_rule_field_resource": "Ressource",
"cdn_shared_modal_field_uri_error_required": "Veuillez compléter ce champ",
"cdn_shared_modal_field_uri_error_pattern_extension": "Seules les extensions sont autorisées",
"cdn_shared_modal_field_uri_error_duplicate": "URI déja existante",
"cdn_shared_modal_add_rule_field_rule_name": "Nom de la règle",
"cdn_shared_modal_field_rule_name_error_required": "Veuillez compléter ce champ",
"cdn_shared_modal_field_rule_name_error_pattern": "Doit uniquement contenir des nombres, des lettres non accentuées, underscores et tiret.",
"cdn_shared_modal_field_rule_name_error_duplicate_name": "Nom déja existant",
"cdn_shared_modal_add_rule_field_time_to_live": "Durée de vie",
"cdn_shared_modal_add_rule_field_time_to_live_info": "La durée de vie permet d'indiquer à quelle fréquence vous souhaitez que le CDN rafraîchisse votre contenu dans son cache. Cette durée peut s'exprimer en plusieurs unités de temps grâce au menu déroulant.",
"cdn_shared_modal_add_rule_field_time_to_live_unit": "Valeur",
"cdn_shared_modal_add_rule_field_time_to_live_unit_days": "Jour(s)",
"cdn_shared_modal_add_rule_field_time_to_live_unit_hours": "Heure(s)",
"cdn_shared_modal_add_rule_field_time_to_live_unit_minutes": "Minute(s)",
"cdn_shared_modal_add_rule_field_order_by": "Classement",
"cdn_shared_modal_add_rule_field_order_by_info": "Vos règles de cache sont exécutées dans l'ordre de leur classement. En attribuant le chiffre 1, votre règle sera exécutée en premier et ainsi de suite.",
"cdn_shared_modal_add_rule_btn_validate_rule": "Créer la règle",
"cdn_shared_modal_add_rule_btn_set_rule": "Modifier la règle",
"cdn_shared_change_edit_urls_modal_info": "Définissez la liste des URLs à rafraichir systématiquement dans le cache.",
"cdn_shared_change_edit_urls_modal_protocol_label": "Protocole",
"cdn_shared_change_edit_urls_modal_domain_label": "Nom de domaine",
"cdn_shared_change_edit_urls_modal_resource_label": "Chemin de la ressource",
"cdn_shared_change_edit_urls_modal_propdown_protocol_HTTP": "HTTP",
"cdn_shared_change_edit_urls_modal_propdown_protocol_HTTPS": "HTTPS",
"cdn_shared_change_edit_urls_modal_url_to_preload_label": "Liste des URL à précharger",
"cdn_shared_change_edit_urls_modal_url_to_preload_info": "Vous avez ajouté {{numberOfUrls}} URL. ({{maxUrls}} max)",
"cdn_shared_cors_description": "Les domaines extérieurs que vous spécifierez ici seront autorisés à accéder à vos ressources web",
"cdn_shared_cors_add_domain": "Ajouter un domaine",
"cdn_shared_cors_domain_list": "Liste des domaines",
"cdn_shared_modal_confirm_title": "Appliquer la configuration de votre CDN",
"cdn_shared_modal_confirm_info": "Cliquez sur « Valider » pour appliquer les changements effectués sur votre configuration. En cliquant sur « Annuler », toutes vos dernières modifications seront perdues.",
"cdn_shared_modal_confirm_perf": "Options de perf",
"cdn_shared_modal_confirm_cache": "Options de cache",
"cdn_shared_modal_confirm_security": "Options de securité"
}
37 changes: 37 additions & 0 deletions packages/manager/apps/web-hosting/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,40 @@ export const LOCAL_SEO_ORDER_OPTIONS_SERVICE = {

export const LOCAL_SEO_INTERFACE =
'https://localseo.hosting.ovh.net/{lang}/app/ovh?access_token={token}';
export const SHARED_CDN_OPTIONS = {
PREFETCH: {
LINKS: {
DEFAULT:
'https://docs.ovh.com/gb/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
ASIA: 'https://docs.ovh.com/asia/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
AU: 'https://docs.ovh.com/au/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
CA: 'https://docs.ovh.com/ca/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
DE: 'https://docs.ovh.com/de/hosting/verwendung_des_geocache_boosters_auf_einem_webhosting/',
ES: 'https://docs.ovh.com/es/hosting/guia_de_uso_del_acelerador_geocache_en_un_alojamiento_web/',
FR: 'https://docs.ovh.com/fr/hosting/accelerer-mon-site-web-en-utilisant-le-cdn/',
GB: 'https://docs.ovh.com/gb/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
IE: 'https://docs.ovh.com/ie/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
IT: 'https://docs.ovh.com/it/hosting/guida_allutilizzo_dellacceleratore_geocache_su_un_hosting_web/',
PL: 'https://docs.ovh.com/pl/hosting/przewodnik_dotyczacy_uslugi_geocache_na_hostingu_www/',
PT: 'https://docs.ovh.com/pt/hosting/guia_de_utilizacao_do_acelerador_geocache_num_alojamento_web/',
QC: 'https://docs.ovh.com/ca/fr/hosting/accelerer-mon-site-web-en-utilisant-le-cdn/',
SG: 'https://docs.ovh.com/sg/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
WE: 'https://docs.ovh.com/us/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
WS: 'https://docs.ovh.com/ca/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
IN: 'https://docs.ovh.com/asia/en/hosting/guide_to_using_the_geocache_accelerator_on_a_web_hosting_package/',
},
},
HSTS: {
FIXED_NUMBER: 2,
},
QUERY_STRING: {
SORT_PARAMS: { SORT: 'sorted', IGNORED: 'ignored' },
},
MOBILE_REDIRECT: {
STILL_URL: 'still',
KEEP_URL: 'keep',
},
};

export const CDN_ADVANCED = 'cdn-advanced';
export const MAX_URL_ENTRIES = 100;
30 changes: 29 additions & 1 deletion packages/manager/apps/web-hosting/src/data/__mocks__/cdn.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { CDN_TYPE, CDN_VERSION, CdnStatus } from '../types/product/cdn';
import { CDN_TYPE, CDN_VERSION, CdnOption, CdnOptionType, CdnStatus } from '../types/product/cdn';

export const cdnPropertiesMock = {
domain: 'abcdef.cluster030.hosting.ovh.net',
Expand All @@ -8,3 +8,31 @@ export const cdnPropertiesMock = {
type: CDN_TYPE.SECURITY,
version: CDN_VERSION.CDN_HOSTING,
};

export const serviceNameCdnMock = {
domain: 'qjfnqci.cluster100.hosting.ovh.net',
free: true,
status: 'created',
taskId: 473761370,
type: 'cdn-basic',
version: 'cdn-hosting',
};

export const cdnOptionMock: CdnOption[] = [
{
name: 'devmode',
type: CdnOptionType.DEVMODE,
config: null,
pattern: null,
enabled: true,
extra: null,
},
{
name: 'brotli',
type: CdnOptionType.BROTLI,
config: null,
pattern: null,
enabled: true,
extra: null,
},
];
78 changes: 78 additions & 0 deletions packages/manager/apps/web-hosting/src/data/api/cdn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@ import {
CdnAvailableOption,
CdnDomain,
CdnDomainOption,
CdnOption,
CdnProperties,
PurgeCDN,
ServiceNameCdn,
TCdnOption,
TCdnOptions,
} from '../types/product/cdn';

export const getCDNProperties = async (serviceName: string): Promise<CdnProperties> => {
Expand Down Expand Up @@ -94,3 +98,77 @@ export const flushCDNDomainCache = async (

return data;
};

export const getServiceNameCdn = async (serviceName: string): Promise<ServiceNameCdn> => {
const { data } = await v6.get<ServiceNameCdn>(`/hosting/web/${serviceName}/cdn`);
return data;
};

export const getCdnOption = async (serviceName: string, domain: string): Promise<CdnOption[]> => {
const { data } = await v6.get<CdnOption[]>(
`/hosting/web/${serviceName}/cdn/domain/${domain}/option`,
);
return data;
};

export const createCdnOption = async ({
serviceName,
domain,
cdnOption,
}: TCdnOption): Promise<CdnOption> => {
const { data } = await v6.post<CdnOption>(
`/hosting/web/${serviceName}/cdn/domain/${domain}/option`,
{
...cdnOption,
},
);
return data;
};

export const updateCdnOption = async ({
serviceName,
domain,
option,
cdnOption,
}: TCdnOption): Promise<CdnOption> => {
const { data } = await v6.put<CdnOption>(
`/hosting/web/${serviceName}/cdn/domain/${domain}/option/${option}`,
{
...cdnOption,
},
);
return data;
};

export const updateCdnOptions = async ({
serviceName,
domain,
cdnOptions,
}: TCdnOptions): Promise<PromiseSettledResult<CdnOption>[]> => {
const promises = cdnOptions.map((item) => {
const { name, ...cdnOption } = item;
return updateCdnOption({
serviceName,
domain,
option: name,
cdnOption,
});
});

const results = await Promise.allSettled(promises);
const failed = results.find((r): r is PromiseRejectedResult => r.status === 'rejected');

if (failed) {
throw failed.reason ?? new Error('Domain certificate creation failed');
}

return results;
};

export const deleteCdnOption = async ({
serviceName,
domain,
option,
}: TCdnOption): Promise<void> => {
await v6.delete<void>(`/hosting/web/${serviceName}/cdn/domain/${domain}/option/${option}`);
};
Loading
Loading