diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bcde4d100..3a672ad1f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,28 +64,28 @@ jobs: git config --local user.name "daikoku-github-actions" git add --all git commit -am "Update version number before release" - # - name: build manual - # id: manual - # run: | - # cd manual - # sbt "release release-version ${{ github.event.inputs.releaseversion }}" - # cd .. - # sh ./scripts/build.sh manual - # echo "diff=$(git diff --numstat | wc -l)" >> $GITHUB_OUTPUT - # cd .. - # - name: Commit manual - # if: steps.manual.outputs.diff != '0' - # run: | - # git config --local user.email "daikoku-github-actions@users.noreply.github.com" - # git config --local user.name "daikoku-github-actions" - # git add --all - # git commit -am "Update documentation before release" - # - name: Push manual - # uses: ad-m/github-push-action@master - # if: steps.manual.outputs.diff != '0' - # with: - # branch: ${{ github.ref }} - # github_token: ${{ secrets.GITHUB_TOKEN}} + - name: build manual + id: manual + run: | + cd manual + sbt "release release-version ${{ github.event.inputs.releaseversion }}" + cd .. + sh ./scripts/build.sh manual + echo "diff=$(git diff --numstat | wc -l)" >> $GITHUB_OUTPUT + cd .. + - name: Commit manual + if: steps.manual.outputs.diff != '0' + run: | + git config --local user.email "daikoku-github-actions@users.noreply.github.com" + git config --local user.name "daikoku-github-actions" + git add --all + git commit -am "Update documentation before release" + - name: Push manual + uses: ad-m/github-push-action@master + if: steps.manual.outputs.diff != '0' + with: + branch: ${{ github.ref }} + github_token: ${{ secrets.GITHUB_TOKEN}} # release sbt (with auto commit tag) - name: release sbt run: | diff --git a/.gitignore b/.gitignore index 0fe107d7c..8de659f20 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,9 @@ daikoku/public/assets/ daikoku/public/index.html daikoku/public/index* daikoku/public/fa-* +daikoku/public/asciidoctor-* +daikoku/public/asyncapi-* +daikoku/public/backofffice-* +daikoku/public/highlight-* +daikoku/public/swagger-* stats.html diff --git a/CHANGELOG b/CHANGELOG index 8b6b553c2..a033e33b6 100755 --- a/CHANGELOG +++ b/CHANGELOG @@ -625,3 +625,25 @@ We'd like to thank all the contributors who worked on this release! - Lack of translation [#700](https://github.com/MAIF/daikoku/issues/700) - API testing UI is broken [#699](https://github.com/MAIF/daikoku/issues/699) +## [v17.5.0] - 2024-09-17 + +## :star: New Features + +- Hide personal teams if security prohibits personal teams from subscribing [#740](https://github.com/MAIF/daikoku/issues/740) +- add a control for environment name for subscription aggregation [#714](https://github.com/MAIF/daikoku/issues/714) +- Add a way to disable part of aggragation [#711](https://github.com/MAIF/daikoku/issues/711) +- Allow to transfer subscriptions ownership [#708](https://github.com/MAIF/daikoku/issues/708) +- Add HTTP links everywhere, it’s unusable in practice sometimes. [#696](https://github.com/MAIF/daikoku/issues/696) +- display S3 bucket example to avoid S3Exception [#622](https://github.com/MAIF/daikoku/issues/622) + +## :beetle: Bug Fixes + +- User can't go in home page from daikoku [#741](https://github.com/MAIF/daikoku/issues/741) +- No UI [#735](https://github.com/MAIF/daikoku/issues/735) +- Crash on notification page in case of unknown team in action property [#720](https://github.com/MAIF/daikoku/issues/720) +- [productor view]subscription table is not refresh after enable/disable apikey [#715](https://github.com/MAIF/daikoku/issues/715) +- Update parent subscription in aggregation does not update childs [#710](https://github.com/MAIF/daikoku/issues/710) +- 2FA inputs don't work if code begin with 0 [#701](https://github.com/MAIF/daikoku/issues/701) +- translation for validation step [#697](https://github.com/MAIF/daikoku/issues/697) +- Delete Tag, delete all the tags [#694](https://github.com/MAIF/daikoku/issues/694) + diff --git a/daikoku/app/domain/tenantEntities.scala b/daikoku/app/domain/tenantEntities.scala index 33dad90d9..8eb588e9c 100644 --- a/daikoku/app/domain/tenantEntities.scala +++ b/daikoku/app/domain/tenantEntities.scala @@ -82,9 +82,9 @@ case class DaikokuStyle( --card_header-bg-color: #404040; --card_header-text-color: #fff; --card_bg-color: #282828; - --card_text-color: #fff; - --card_link-color: #b3b3b3; - --card_link-hover-color: orange; + --card_text-color: #fff; + --card_link-color: #97b0c7; + --card_link-hover-color : #a9cbea; --btn-bg-color: #fff; --btn-text-color: #495057; @@ -143,8 +143,8 @@ case class DaikokuStyle( --card_header-text-color: #fff; --card_bg-color: #282828; --card_text-color: #fff; - --card_link-color: #b3b3b3; - --card_link-hover-color: orange; + --card_link-color: #97b0c7; + --card_link-hover-color : #a9cbea; --btn-bg-color: #fff; diff --git a/daikoku/javascript/src/components/backoffice/apikeys/TeamApiKeysForApi.tsx b/daikoku/javascript/src/components/backoffice/apikeys/TeamApiKeysForApi.tsx index 04e216d2f..aaffdadf9 100644 --- a/daikoku/javascript/src/components/backoffice/apikeys/TeamApiKeysForApi.tsx +++ b/daikoku/javascript/src/components/backoffice/apikeys/TeamApiKeysForApi.tsx @@ -593,8 +593,8 @@ export const ApiKeyCard = ({ console.debug({ subscription }) return (
-
-
+
+
{subscription.children.length === 0 && } {subscription.children.length > 0 && } -
+
{subscription.enabled ? translate("subscription.enable.label") : translate("subscription.disable.label")} @@ -720,18 +720,7 @@ export const ApiKeyCard = ({ > {translate("subscription.custom.name.update.label")} - {!subscription.parent && !disableRotation && openFormModal({ - title: translate("ApiKey rotation"), - actionLabel: translate('Save'), - schema: settingsSchema, - onSubmit: (data) => handleChanges(data), - value: subscription.rotation - })} - > - {translate("subscription.rotation.update.label")} - } + {subscription.children.length > 0 && openRightPanel({ @@ -758,20 +747,26 @@ export const ApiKeyCard = ({ {translate("subscription.show.aggregate.label")} }
- {!subscription.parent && openFormModal({ + title: translate("ApiKey rotation"), + actionLabel: translate('Save'), + schema: settingsSchema, + onSubmit: (data) => handleChanges(data), + value: subscription.rotation + })} > - {translate("subscription.reset.secret.label")} + {translate("subscription.rotation.update.label")} } {!subscription.parent && {translate("subscription.transfer.label")} } { @@ -783,6 +778,12 @@ export const ApiKeyCard = ({ {subscription.enabled ? translate("subscription.disable.button.label") : translate("subscription.enable.button.label")}
+ {!subscription.parent && + {translate("subscription.reset.secret.label")} + } {subscription.parent && ({ value: iss, label: `Version : ${iss}` })), - { value: 'all version', label: 'All version' }, + { value: 'all version', label: `${translate('All version')}` }, ] return ( diff --git a/daikoku/javascript/src/components/frontend/api/issues/ApiIssue.tsx b/daikoku/javascript/src/components/frontend/api/issues/ApiIssue.tsx index 170397e30..d7ca15846 100644 --- a/daikoku/javascript/src/components/frontend/api/issues/ApiIssue.tsx +++ b/daikoku/javascript/src/components/frontend/api/issues/ApiIssue.tsx @@ -18,9 +18,9 @@ export function ApiIssue({ const [api, setRootApi] = useState(); const [filter, setFilter] = useState('open'); - const [selectedVersion, setSelectedVersion] = useState({ value: 'all version', label: 'All version' }); - const { translate } = useContext(I18nContext); + + const [selectedVersion, setSelectedVersion] = useState({ value: 'all version', label: `${translate('All version')}` }); useEffect(() => { Services.getRootApi(props.api._humanReadableId) diff --git a/daikoku/javascript/src/components/utils/sidebar/panels/SettingsPanel.tsx b/daikoku/javascript/src/components/utils/sidebar/panels/SettingsPanel.tsx index 5f6ff605c..5e527a7c2 100644 --- a/daikoku/javascript/src/components/utils/sidebar/panels/SettingsPanel.tsx +++ b/daikoku/javascript/src/components/utils/sidebar/panels/SettingsPanel.tsx @@ -78,7 +78,7 @@ export const SettingsPanel = ({ }) => {
{translate('settings')}
- {tenant.name} {translate('settings')} + {tenant.name} {connectedUser.isDaikokuAdmin && ( diff --git a/daikoku/javascript/src/locales/en/translation.json b/daikoku/javascript/src/locales/en/translation.json index 7f487c01b..edbd12edc 100644 --- a/daikoku/javascript/src/locales/en/translation.json +++ b/daikoku/javascript/src/locales/en/translation.json @@ -608,6 +608,7 @@ "help.apikey.grace.period": "Period during which the new client secret and the old are both active. The rotation period includes this period.", "constraint.apikey.grace.period": "Grace period must be inferior to rotation period", "reset.secret.confirm": "Are you sure you want to reset this secret?", + "secret reseted successfully": "secret reseted successfully", "Integration": "Integration", "Force apikey auto-rotation": "Force API key auto-rotation", "ApiKey": "API key", @@ -1458,7 +1459,7 @@ "subscription.enable.button.label": "Enable subscription", "subscription.disable.button.label": "Disable subscription", "subscription.delete.button.label": "Delete", - "subscription.extract.button.label": "Extract from agg.", + "subscription.extract.button.label": "Extract from aggregate", "subscription.enable.label": "Enabled", "subscription.disable.label": "Disabled", "subscriptions.hide.link": "Hide link", diff --git a/daikoku/javascript/src/locales/fr/translation.json b/daikoku/javascript/src/locales/fr/translation.json index 11ed53de6..9e24d9b4f 100644 --- a/daikoku/javascript/src/locales/fr/translation.json +++ b/daikoku/javascript/src/locales/fr/translation.json @@ -602,12 +602,13 @@ "rotation.error.message": "Vous ne pouvez pas activer/désactiver la rotation automatique de la clé d'API car le plan force celle-ci.", "notif.apikey.rotation.inprogress": "Votre clé d'API avec le clientId %s a débuté sa rotation. Son clientSecret a été modifié.", "notif.apikey.rotation.ended": "Votre clé d'API avec le clientId %s a terminé sa rotation.", - "Rotation period": "Période de rotation", - "Grace period": "Période de tuilage", + "Rotation period": "Période de rotation (heures)", + "Grace period": "Période de tuilage (heures)", "help.apikey.rotation.period": "Période après laquelle le secret sera automatiquement modifié", "help.apikey.grace.period": "Période pendant laquelle le nouveau secret et l'ancien sont tous deux actifs (cette période est inclue dans la période de rotation).", "constraint.apikey.grace.period": "La période de tuilage doit être inferieur à la période de rotation", "reset.secret.confirm": "Êtes-vous certain de vouloir réinitialiser le secret ?", + "secret reseted successfully": "Secret réinitialisé avec succès", "Integration": "Intégration", "Force apikey auto-rotation": "Forcer la rotation auto. des secrets", "ApiKey": "Clé d'API", @@ -1438,7 +1439,7 @@ "apikeys.view.api": "Voir l'API", "apikeys.view.apikeys": "Voir les clés d'API", "subscription.for": "Souscription à", - "subscription.created.at": "crée le %s", + "subscription.create.at": "Souscription créée le %s\"", "subscription.valid.until": "valid until %s", "subscription.nota.part.1": "Consultez la documentation", "subscription.nota.part.2": "ou explorez", diff --git a/daikoku/javascript/src/style/components/apicard.scss b/daikoku/javascript/src/style/components/apicard.scss index fb0f19f6d..7a90c7514 100644 --- a/daikoku/javascript/src/style/components/apicard.scss +++ b/daikoku/javascript/src/style/components/apicard.scss @@ -24,6 +24,9 @@ } #dropdownMenuButton { color: $card-link-color; + &:hover{ + color: $card-link-hover-color; + } } } diff --git a/daikoku/javascript/src/style/layout/navbar.scss b/daikoku/javascript/src/style/layout/navbar.scss index 641bc58b2..365711a80 100644 --- a/daikoku/javascript/src/style/layout/navbar.scss +++ b/daikoku/javascript/src/style/layout/navbar.scss @@ -185,10 +185,10 @@ a.navbar-brand, cursor: pointer; font-size: 14px; color: $companion_link-color; + margin-top: 5px; margin-bottom: 5px; - line-height: 40px; border-radius: 4px; - padding-left: .5rem; + padding: .5rem; &:hover { background-color: $companion_text-hover-bg-color; @@ -205,7 +205,6 @@ a.navbar-brand, .navbar-companion { z-index: 10; background-color: $companion_bg-color; - // color: $level1_text-color; filter: brightness(105%); height: 100vh; position: relative; @@ -234,11 +233,10 @@ a.navbar-brand, flex-direction: column; .companion-title { - // height: 40px; - min-height: 40px; + // min-height: 40px; margin-bottom: 1rem; - overflow: hidden; - text-overflow: ellipsis; + // overflow: hidden; + // text-overflow: ellipsis; white-space: nowrap; line-height: 1.14286; color: $companion_text-color; @@ -271,7 +269,7 @@ a.navbar-brand, } &.disabled { - color: lighten(#000, 50%); + opacity: 0.5; cursor: default; } diff --git a/daikoku/javascript/src/style/variables.scss b/daikoku/javascript/src/style/variables.scss index c218f85c5..fccf2ffd0 100644 --- a/daikoku/javascript/src/style/variables.scss +++ b/daikoku/javascript/src/style/variables.scss @@ -57,8 +57,8 @@ $card-header-bg-color : #{"var(--card_header-bg-color, #404040)"}; $card-header-text-color : #{"var(--card-header-text-color, #fff)"}; $card-bg-color: #{"var(--card_bg-color, #282828)"}; $card-text-color: #{"var(--card_text-color, #FFF)"}; -$card-link-color: #{"var(--card_link-color, #b3b3b3)"}; -$card-link-hover-color: #{"var(--card_link-hover-color, orange)"}; +$card-link-color: #{"var(--card_link-color, #97b0c7)"}; +$card-link-hover-color: #{"var(--card_link-hover-color, #a9cbea)"}; :export { successColor: $success-color; diff --git a/daikoku/javascript/tests/connectedUser.spec.ts b/daikoku/javascript/tests/connectedUser.spec.ts index 3688fb66d..7ea4c875a 100644 --- a/daikoku/javascript/tests/connectedUser.spec.ts +++ b/daikoku/javascript/tests/connectedUser.spec.ts @@ -412,7 +412,7 @@ test('aggregation mode', async ({ page, request }) => { await page.getByText('API keys', { exact: true }).click(); await page.getByRole('row', { name: 'test API 2 1.0.0' }).getByLabel('view APikey').click(); await page.locator('.api-subscription').locator('.dropdown').click(); - await page.getByText('Extract from agg.').click(); + await page.getByText('Extract from aggregate').click(); // await page.getByRole('button', { name: 'make unique' }).click(); await expect(page.getByRole('paragraph')).toContainText('Are you sure to make this API key unique and separate from his parent plan?'); await page.getByRole('button', { name: 'Ok', exact: true }).click(); @@ -595,7 +595,7 @@ test('transfer an api subscription', async ({ page }) => { await page.waitForResponse(r => r.url().includes('/api/me/context') && r.status() === 200) await page.waitForSelector('.apis__pagination') await page.getByRole('heading', { name: 'test API' }).click(); - + //tester l'url pour verifier que c'est bien la v2 await page.getByText('Plans').click(); @@ -617,7 +617,7 @@ test('transfer an api subscription', async ({ page }) => { await page.getByText('Testers').click(); await page.getByRole('button', { name: 'Confirm transfer' }).click(); - await page.getByText('Testers').click(); + await page.locator('.top__container').filter({hasText: 'Your teams'}).getByText('Testers').click(); await page.getByText('API keys').click(); await page.getByRole('row', { name: 'test API 2.0.0 View API View' }).getByLabel('View APIkeys').click(); expect(page.locator('.api-subscription__infos__value')).toHaveText(apikey) diff --git a/daikoku/public/themes/dark.css b/daikoku/public/themes/dark.css index 571d91b27..f65126777 100644 --- a/daikoku/public/themes/dark.css +++ b/daikoku/public/themes/dark.css @@ -28,9 +28,9 @@ --card_header-bg-color : #404040; --card_header-text-color: #fff; --card_bg-color: #282828; - --card_text-color: #fff; - --card_link-color: #ffe1a7; - --card_link-hover-color : #ffc107; + --card_text-color: #fff; + --card_link-color: #97b0c7; + --card_link-hover-color : #a9cbea; --btn-bg-color: #fff; --btn-text-color: #495057; diff --git a/daikoku/public/themes/light.css b/daikoku/public/themes/light.css index e70b6723b..5f4dcd531 100644 --- a/daikoku/public/themes/light.css +++ b/daikoku/public/themes/light.css @@ -29,8 +29,8 @@ --card_header-text-color: #fff; --card_bg-color: #282828; --card_text-color: #fff; - --card_link-color: #ffe1a7; - --card_link-hover-color : #ffc107; + --card_link-color: #97b0c7; + --card_link-hover-color : #a9cbea; --btn-bg-color: #fff; --btn-text-color: #495057; diff --git a/daikoku/version.sbt b/daikoku/version.sbt index 7bb152df2..60cb3c1a0 100644 --- a/daikoku/version.sbt +++ b/daikoku/version.sbt @@ -1 +1 @@ -ThisBuild / version := "17.5.0" +ThisBuild / version := "17.6.0-dev" diff --git a/manual/docs/02-usages/07-adminusage/4-importexport.md b/manual/docs/02-usages/07-adminusage/4-importexport.md index 67a43738c..263c31e62 100644 --- a/manual/docs/02-usages/07-adminusage/4-importexport.md +++ b/manual/docs/02-usages/07-adminusage/4-importexport.md @@ -19,7 +19,7 @@ If you want to restore an export, Go to `settings (avatar icon) / Organizations Since v1.1.1 Daikoku supports Postgresql databases. If you want to migrate you MongoDB to Postgresql, it's dead simple like the following instructions. :::danger -Since **v17.5.0-rc.2**, Daikoku does not support MongoDB anymore. To run database migration, you need to be in **16.3.6 max**. +Since **v17.5.0**, Daikoku does not support MongoDB anymore. To run database migration, you need to be in **16.3.6 max**. ::: 1. Add your Postgresql access in Daikoku configuration