Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
b21c1fe
fix(web-hosting): add anticipate renew button on general infos
erazafimovh Jun 26, 2026
088f9dc
fix(i18n): add missing translations [CDS 1264]
erazafimovh Jun 26, 2026
448a0c7
release(*): protactinium-bear-1
erazafimovh Jun 26, 2026
8719021
feat(backup-agent): add 2-step onboarding wizard for backup-agent bar…
maelovh Jun 16, 2026
662ac97
release(*): protactinium-bear-2
maelovh Jun 30, 2026
8270f6d
fix(web-hosting): manage renew banner for expired clients
erazafimovh Jun 29, 2026
a8c26cb
release(*): protactinium-bear-3
erazafimovh Jun 30, 2026
ec0f43c
feat(container): hide load balancer for mks navigation
ErikssonJoakim Jun 22, 2026
573fc53
fix(billing): update fallback urls
aottr Jun 26, 2026
3605a05
fix(pci-project): update willPayment urls
aottr Jun 26, 2026
8038a06
feat(billing): change content right of withdrawal
Jun 22, 2026
4e6d670
fix(i18n): add missing translations [CDS 1257]
Jun 22, 2026
5de68e0
feat(billing): aggregate some products on my services
Jun 23, 2026
c83c470
fix(i18n): add missing translations [CDS 1260]
Jun 25, 2026
789cfd8
fix(billing): allow to terminate backup services
Jun 25, 2026
c419dd1
fix(i18n): add missing translations [CDS 1262]
Jun 25, 2026
bf664b7
fix(pci-project): fix url query param
aottr Jun 30, 2026
8c53779
release(*): protactinium-bear-4
aottr Jul 1, 2026
a49034b
fix(pci-databases-analytics): support update & fork for EOS/EOL services
jperchoc Jul 1, 2026
d9c0e4a
release(*): erbium-gorilla
jperchoc Jul 2, 2026
f0d836f
fix(web-cloud.telephony): add new accessories picture link
ghyenne Jun 17, 2026
1070325
fix(zimbra): update max page size
atefzed Jul 6, 2026
e310810
fix(vps): fix display of 10TB additional disk addon during order
reenjii Jul 6, 2026
851901b
release(*): erbium-gorilla-1
reenjii Jul 7, 2026
216cf4a
fix(container): hide load balancer for mks beta navigation
ErikssonJoakim Jul 2, 2026
2835c2b
feat(container): adjust company info modal requirement
aottr Jul 6, 2026
52f6a15
release(*): erbium-gorilla-2
aottr Jul 8, 2026
41c1f85
feat(billing): display renew cta
Jul 2, 2026
822df44
feat(billing): display renew cta
Jul 2, 2026
f23aaeb
feat(billing): remove hosting_web_new service type
Jul 3, 2026
413c035
release(*): erbium-gorilla-3
Jul 8, 2026
8a1fca7
feat(backup-agent): add resiliation to backup agent service
maelovh Jun 10, 2026
184294b
release(*): platinum-buffalo
maelovh Jul 9, 2026
d57b6dc
feat(okms): add hsm protection level to service key creation
igorms-pro Jul 1, 2026
eef77c0
feat(okms): add protection level to service key list and dashboard
Jul 3, 2026
89ae345
fix(okms): gate protection level behind hsm feature flag and use shor…
Jul 6, 2026
22a1e11
fix(okms): move protection level to top of crypto properties tile
Jul 6, 2026
584e463
fix(okms): add missing protection level translations
Jul 9, 2026
e9256ab
release(*): platinum-buffalo-1
Jul 10, 2026
952e76e
feat(hub): add text banner for critical issue
Jul 9, 2026
557ddd2
feat(hub): add true content for critical message
Jul 10, 2026
65f4f51
fix(i18n): add missing translations [CDS 1275]
Jul 10, 2026
1947d73
release(*): platinum-buffalo-2
Jul 10, 2026
1af3383
feat(account): improve behavior siret
Jul 1, 2026
ad4d6dc
feat(account): remove comment partially in french
Jul 1, 2026
ffe8233
feat(account): change regex siret
Jul 10, 2026
9023037
fix(i18n): add missing translations [CDS 1276]
Jul 15, 2026
6471d98
feat(communication): add BILLING_INVOICE category translation
sachinrameshn Jun 16, 2026
a7dfd7b
release(*): cesium-pirate
sachinrameshn Jul 16, 2026
818c6a4
feat(dedicated-server): adopt plannedChange apiv6 route behind featur…
Carlolis Jul 16, 2026
8048ec7
release(*): cesium-pirate-1
Carlolis Jul 16, 2026
3ec933e
feat(dashboard-tile): add VCDA migration tile, routing & data foundation
tibs245 Jun 25, 2026
ef0fa87
feat(migration-tab): add endpoint & authorized-IPs management tab
tibs245 Jun 25, 2026
71e898a
feat(order): add VCDA Public VCF migration order with contracts step
tibs245 Jun 25, 2026
c0b7e72
feat(service-termination): add VCDA migration service termination
tibs245 Jun 25, 2026
cc24488
release(*): cesium-pirate-2
tibs245 Jul 16, 2026
e9ac813
feat(container): update e-invoincing modal
Jul 17, 2026
fd09688
fix(i18n): add missing translations [CDS 1281]
Jul 17, 2026
609a682
feat(container): filter by certificate
Jul 17, 2026
db92500
fix(i18n): add missing translations [CDS 1282]
Jul 17, 2026
19a2f6c
fix(account): fix some possible js errors
Jul 16, 2026
8b7ae16
release(*): cesium-pirate-3
Jul 20, 2026
787fdd6
fix(web): redirect for resiliation
stif59100 Jul 20, 2026
7faf2d1
fix(i18n): add missing translations [CDS 1285]
stif59100 Jul 20, 2026
d6e7834
release(*): cesium-pirate-4
stif59100 Jul 20, 2026
30dd655
feat(account): modifications on new account form
sachinrameshn Jul 17, 2026
1f9c07d
release(*): cesium-pirate-5
sachinrameshn Jul 21, 2026
9267b93
fix(ai-endpoints): create identity user as SERVICE type without password
Masta2000 Jul 20, 2026
6c3d3ca
fix(iam): fix bind-html on untrusted input in log viewer
Jul 20, 2026
c5f4229
release(*): cesium-pirate-7
Jul 22, 2026
ab90572
fix(web-hosting): display api error message when offer upgrade failed
erazafimovh Jul 22, 2026
3302f3d
release(*): cesium-pirate-8
erazafimovh Jul 22, 2026
644761e
fix(account-creation): add modal when country not setted
Jul 20, 2026
df71fb3
fix(i18n): add missing translations [CDS 1287]
Jul 21, 2026
48a9fe3
feat(account): make wrong fields editable
Jul 21, 2026
18e5774
fix(account): fix vat checkbox behavior
Jul 22, 2026
911b2fe
fix(account): switch account on siret change
Jul 22, 2026
27db015
release(*): samarium-fox
Jul 22, 2026
7b3aff3
docs: capitalize list items and heading in CONTRIBUTING.md
ferkans-amir Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .sonarcloud.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ sonar.projectName=manager
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.ws.timeout=60
sonar.projectVersion=protactinium-bear
sonar.projectVersion=samarium-fox

sonar.exclusions=node_modules/**, **/node_modules/**, **/dist/**, **/semantic/**, **/coverage/**, **/static/**, **/mock/**, **/mockServiceWorker.js
sonar.coverage.exclusions=**/*.spec.js
Expand Down
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
This project accepts contributions. In order to contribute, you should
pay attention to a few things:

1. your code must follow the coding style rules
2. your code must be unit-tested
3. your code must be documented
4. your work must be signed (see below)
5. you may contribute through GitHub [Pull Requests][pull-request] on `develop` branch
1. Your code must follow the coding style rules
2. Your code must be unit-tested
3. Your code must be documented
4. Your work must be signed (see below)
5. You may contribute through GitHub [Pull Requests][pull-request] on `develop` branch

# Coding and documentation Style
# Coding and Documentation Style

- Code must be formatted with `yarn run format`
- Code must pass `yarn run test`
Expand Down
11 changes: 11 additions & 0 deletions packages/components/ng-log-live-tail/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [2.7.3](https://github.com/ovh/manager/compare/@ovh-ux/ng-log-live-tail@2.7.2...@ovh-ux/ng-log-live-tail@2.7.3) (2026-07-22)


### Bug Fixes

* **iam:** fix bind-html on untrusted input in log viewer ([6c3d3ca](https://github.com/ovh/manager/commit/6c3d3ca54473ac9e2129d5dc3d876ad8a51b2f5b)), closes [#MAIAM-143](https://github.com/ovh/manager/issues/MAIAM-143)





## [2.7.2](https://github.com/ovh/manager/compare/@ovh-ux/ng-log-live-tail@2.7.1...@ovh-ux/ng-log-live-tail@2.7.2) (2026-01-30)

**Note:** Version bump only for package @ovh-ux/ng-log-live-tail
Expand Down
2 changes: 1 addition & 1 deletion packages/components/ng-log-live-tail/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ovh-ux/ng-log-live-tail",
"version": "2.7.2",
"version": "2.7.3",
"description": "Poll a log API for displaying messages",
"keywords": [
"angularjs",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/ng-log-live-tail/src/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
<span
data-ng-repeat="key in $ctrl.logKeys track by key"
class="log-key"
data-ng-bind-html="log[key + '_highlighted']"
data-ng-bind="log[key + '_highlighted']"
data-ng-if="log[key + '_highlighted']"
></span>
</span>
Expand Down
12 changes: 12 additions & 0 deletions packages/manager/apps/account-creation/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [0.14.2](https://github.com/ovh/manager/compare/@ovh-ux/manager-account-creation-app@0.14.1...@ovh-ux/manager-account-creation-app@0.14.2) (2026-07-22)


### Bug Fixes

* **account-creation:** add modal when country not setted ([644761e](https://github.com/ovh/manager/commit/644761e95b2f9fe17e350e684096b02246a990ad))
* **i18n:** add missing translations [CDS 1287] ([df71fb3](https://github.com/ovh/manager/commit/df71fb384dcd9bc353bd92ff1243f256123d520f))





## [0.14.1](https://github.com/ovh/manager/compare/@ovh-ux/manager-account-creation-app@0.14.0...@ovh-ux/manager-account-creation-app@0.14.1) (2026-06-23)


Expand Down
2 changes: 1 addition & 1 deletion packages/manager/apps/account-creation/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ovh-ux/manager-account-creation-app",
"version": "0.14.1",
"version": "0.14.2",
"private": true,
"description": "Application used to finalize an account creation",
"repository": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Bestätigen Sie Ihr Wohnsitzland",
"description": "Wir konnten Ihr Wohnsitzland nicht abrufen. Bitte wählen Sie es erneut aus, um die Erstellung Ihres Kontos fortzusetzen.",
"country_label": "Land des Wohnsitzes"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Confirm your country of residence",
"description": "We were unable to retrieve your country of residence. Please select it again to continue creating your account.",
"country_label": "Country of residence"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Confirmad vuestro país de residencia",
"description": "No hemos podido recuperar vuestro país de residencia. Gracias por seleccionarlo de nuevo para continuar con la creación de vuestra cuenta.",
"country_label": "País de residencia"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Confirmez votre pays de résidence",
"description": "Nous n'avons pas pu récupérer votre pays de résidence. Merci de le sélectionner à nouveau pour poursuivre la création de votre compte.",
"country_label": "Pays de résidence"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Confirmez votre pays de résidence",
"description": "Nous n'avons pas pu récupérer votre pays de résidence. Merci de le sélectionner à nouveau pour poursuivre la création de votre compte.",
"country_label": "Pays de résidence"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Confermi il Suo paese di residenza",
"description": "Non siamo riusciti a recuperare il Suo paese di residenza. La preghiamo di selezionarlo nuovamente per proseguire con la creazione del Suo account.",
"country_label": "Paese di residenza"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Potwierdź swój kraj zamieszkania",
"description": "Nie udało nam się pobrać Twojego kraju zamieszkania. Wybierz go ponownie, aby kontynuować tworzenie konta.",
"country_label": "Kraj"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Confirme o seu país de residência",
"description": "Não foi possível recuperar o seu país de residência. Por favor, selecione-o novamente para continuar a criação da sua conta.",
"country_label": "País de residência"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import { useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useLocation } from 'react-router-dom';
import { Country } from '@ovh-ux/manager-config';
import { NAMESPACES } from '@ovh-ux/manager-common-translations';
import {
Modal,
ModalBody,
ModalContent,
ModalHeader,
} from '@ovhcloud/ods-react';
import {
OdsButton,
OdsCombobox,
OdsComboboxItem,
OdsFormField,
OdsText,
} from '@ovhcloud/ods-components/react';
import { ODS_TEXT_PRESET } from '@ovhcloud/ods-components';
import { useUserContext } from '@/context/user/useUser';
import { useMe } from '@/data/hooks/useMe';
import { useRules } from '@/data/hooks/useRules';
import { isUnknownCountry, isUserLoggedIn } from '@/helpers/flowHelper';
import { useLocalCountry } from '@/hooks/useLocalCountry/useLocalCountry';
import { urls } from '@/routes/routes.constant';

/**
* The account creation flow relies on the user country. When the API returns
* `UNKNOWN` and the locally persisted value (`ovh-country`) has been lost, the
* country is undefined and the whole connected flow is stuck (empty legal forms
* on /type, endless skeleton on /details).
*
* This modal detects that situation and asks the user to reselect a country,
* restricted to the ones allowed for their subsidiary (via /newAccount/rules).
*/
export default function CountryRecoveryModal() {
const { t } = useTranslation(['country-recovery', NAMESPACES.ACTIONS]);
const { t: tCountry } = useTranslation(NAMESPACES.COUNTRY);
const location = useLocation();
const { country, ovhSubsidiary, setCountry } = useUserContext();
const { data: me, isFetched } = useMe();
const [localCountry] = useLocalCountry();
const [selectedCountry, setSelectedCountry] = useState<string | null>(null);

// The country is "lost" when neither the API nor the recovered context value
// is usable. The context `country` is the recovery signal: once the user
// validates, the provider sets it to a real code, `isUnknownCountry(country)`
// becomes false and this modal closes. `me.country` and the locally persisted
// value only guard against flashing the modal during the provider's async
// initialization for users whose country is actually fine.
const isCountryLost =
isUserLoggedIn() &&
isFetched &&
Boolean(me) &&
Boolean(ovhSubsidiary) &&
isUnknownCountry(me?.country) &&
isUnknownCountry(country) &&
!localCountry &&
location.pathname !== urls.settings;

const { data: rules, isLoading } = useRules(
{ ovhSubsidiary, language: me?.language ?? undefined },
['country'],
isCountryLost,
);

const countryOptions = useMemo(
() =>
(rules?.country?.in ?? [])
.map((code) => ({
code,
label: tCountry(`country_${code}`),
}))
.sort((a, b) => a.label.localeCompare(b.label)),
[rules?.country?.in, tCountry],
);

if (!isCountryLost) {
return null;
}

return (
<Modal open closeOnEscape={false} closeOnInteractOutside={false}>
<ModalContent dismissible={false}>
<ModalHeader>
<OdsText preset={ODS_TEXT_PRESET.heading3}>{t('title')}</OdsText>
</ModalHeader>
<ModalBody>
<div className="flex flex-col gap-5">
<OdsText preset={ODS_TEXT_PRESET.paragraph}>
{t('description')}
</OdsText>
<OdsFormField className="w-full">
<label className="block" slot="label">
{t('country_label')} *
</label>
<OdsCombobox
name="recovery-country"
className="w-full"
value={selectedCountry ?? ''}
allowNewElement={false}
isClearable
isLoading={isLoading}
onOdsChange={(evt) => setSelectedCountry(evt.detail.value)}
data-testid="recovery-country-combobox"
>
{countryOptions.map(({ code, label }) => (
<OdsComboboxItem
value={code}
key={`recovery_country_${code}`}
>
{label}
</OdsComboboxItem>
))}
</OdsCombobox>
</OdsFormField>
<OdsButton
className="w-full"
label={t('validate', { ns: NAMESPACES.ACTIONS })}
isDisabled={!selectedCountry}
onClick={() =>
selectedCountry && setCountry(selectedCountry as Country)
}
data-testid="recovery-validate-button"
/>
</div>
</ModalBody>
</ModalContent>
</Modal>
);
}
Loading