Skip to content

Commit

Permalink
Merge branch 'main' of github.com:dBildungsplattform/schulportal-clie…
Browse files Browse the repository at this point in the history
…nt into SPSH-1719
  • Loading branch information
jaggarnaut committed Feb 24, 2025
2 parents 46de314 + 057227f commit 5927022
Show file tree
Hide file tree
Showing 13 changed files with 896 additions and 254 deletions.
31 changes: 0 additions & 31 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,8 @@ concurrency:

jobs:
# GHRC Image
codeql_analyze:
name: "CodeQL"
uses: dBildungsplattform/dbp-github-workflows/.github/workflows/check-codeql.yaml@5
permissions:
actions: read
contents: read
security-events: write

nest_lint:
name: "Linting"
if: ${{ github.event_name == 'push' }}
uses: dBildungsplattform/dbp-github-workflows/.github/workflows/check-nest-lint.yaml@5
with:
node_version: '18'
permissions:
contents: read

tests_and_sonarcloud:
name: "Tests and Sonarcloud"
if: ${{ github.event_name == 'push' }}
uses: dBildungsplattform/dbp-github-workflows/.github/workflows/check-nest-test-sonarcloud.yaml@5
with:
node_version: '18'
permissions:
contents: read
secrets: inherit

release_image:
name: "Publish image and scan with trivy"
needs:
- codeql_analyze
- nest_lint
- tests_and_sonarcloud
permissions:
packages: write
security-events: write
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,5 +216,19 @@ jobs:
uses: dBildungsplattform/dbp-github-workflows/.github/workflows/check-trivy.yaml@7
with:
image_ref: 'ghcr.io/${{ github.repository_owner }}/schulportal-client:latest'
fail_on_vulnerabilites: false
fail_on_vulnerabilites: true
report_location: 'Dockerfile'
trivyignores: '.trivyignore'

trivy_scan_rocketchat_notification:
if: ${{ github.event_name == 'schedule' }} && failure()
needs:
- scheduled_trivy_scan
runs-on: 'ubuntu-latest'
steps:
- name: Send Notification to Rocket Chat
uses: RocketChat/[email protected]
with:
type: failure
job_name: 'Daily nightly image check failed - CVEs found so check'
url: ${{ secrets.RC_WEBHOOK_SPSH_DEVELOPER_CHANNEL }}
Empty file added .trivyignore
Empty file.
3 changes: 3 additions & 0 deletions src/components/admin/MenuBar.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ function setPermissions(hasPermission: boolean): void {
authStore.hasSchulverwaltungPermission = hasPermission;
authStore.hasSchultraegerverwaltungPermission = hasPermission;
authStore.hasPersonenAnlegenPermission = hasPermission;
authStore.hasSchultraegerverwaltungPermission = hasPermission;
}

beforeEach(async () => {
Expand Down Expand Up @@ -123,6 +124,8 @@ describe('MenuBar', () => {
expect(wrapper?.find('[data-testid="schule-management-menu-item"]').exists()).toBe(hasPermission);
expect(wrapper?.find('[data-testid="schule-creation-menu-item"]').exists()).toBe(hasPermission);

expect(wrapper?.find('[data-testid="schultraeger-creation-menu-item"]').exists()).toBe(hasPermission);

expect(wrapper?.find('[data-testid="schultraeger-management-title"]').exists()).toBe(hasPermission);
},
);
Expand Down
9 changes: 8 additions & 1 deletion src/components/admin/MenuBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -224,14 +224,21 @@
to="/admin/schulen/new"
></v-list-item>
</div>

<!-- Schulträgerverwaltung -->
<div v-if="authStore.hasSchultraegerverwaltungPermission">
<v-list-item
class="menu-bar-main-item headline-2"
data-testid="schultraeger-management-title"
:title="$t('admin.schultraeger.management')"
></v-list-item>
<v-list-item
class="menu-bar-sub-item caption"
@click="closeMenuOnMobile"
data-testid="schultraeger-creation-menu-item"
prepend-icon="mdi-plus-circle-outline"
:title="$t('admin.schultraeger.createNew')"
to="/admin/schultraeger/new"
></v-list-item>
</div>
</v-navigation-drawer>
</template>
Expand Down
31 changes: 28 additions & 3 deletions src/locales/de-DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -500,15 +500,40 @@
"schulname": "Schulname",
"schulnameDienststellennummer": "Schulname/Dienststellennummer",
"schulform": "Schulform",
"schuleCreateErrorTitle": "Fehler beim Anlegen der Schule",
"schuleAddedSuccessfully": "Die Schule wurde erfolgreich hinzugefügt.",
"schuleCreateErrorTitle": "Fehler beim Anlegen der Schule",
"showAll": "Alle Schulen anzeigen"
},
"schultraeger": {
"addNew": "Neuen Schulträger hinzufügen",
"assignSchultraegerform": "Schulträgerform zuordnen",
"create": "Schulträger anlegen",
"createAnother": "Weiteren Schulträger anlegen",
"createNew": "Neuen Schulträger anlegen",
"discard": "Schulträger verwerfen",
"enterSchultraegername": "Schulträgername eingeben",
"errors": {
"TRAEGER_IN_TRAEGER": "Ein Schulträger darf nur einem anderen Schulträger zugeordnet werden."
"TRAEGER_IN_TRAEGER": "Ein Schulträger darf nur einem anderen Schulträger zugeordnet werden.",
"ORGANISATION_SPECIFICATION_ERROR": "Der Schulträger konnte nicht angelegt werden.",
"SCHULTRAEGER_ERROR": "Mögliche Schulträger konnten nicht geladen werden.",
"REQUIRED_STEP_UP_LEVEL_NOT_MET": "Die letzte Aktion konnte nicht ausgeführt werden. Aufgrund von längerer Inaktivität ist eine erneute Authentifizierung mit einem zweiten Faktor erforderlich. Um fortzufahren, klicken Sie bitte auf „Zurück zur Ergebnisliste“ oder „Schließen“. Sie werden anschließend zur Eingabe Ihres zweiten Faktors aufgefordert."
},
"management": "Schulträgerverwaltung"
"management": "Schulträgerverwaltung",
"rules":{
"schultraegername": {
"matches": "Der Schulträgername darf keine ungültigen Zeichen beinhalten.",
"noLeadingTrailingSpaces": "Der Schulträgername darf nicht mit Leerzeichen beginnen oder enden.",
"required": "Der Schulträgername muss angegeben werden."
}
},
"schultraegerAddedSuccessfully": "Der Schulträger wurde erfolgreich hinzugefügt.",
"schultraegerCreateErrorTitle": "Fehler beim Anlegen des Schulträgers",
"schultraegerform": "Schulträgerform",
"schultraegername": "Schulträgername",
"title": {
"ORGANISATION_SPECIFICATION_ERROR": "Fehler bei Anlage des Schulträgers",
"REQUIRED_STEP_UP_LEVEL_NOT_MET": "Zwei-Faktor-Authentifizierung (2FA) erforderlich"
}
},
"serviceProvider": {
"assignServiceProvider": "Angebote zuordnen",
Expand Down
5 changes: 4 additions & 1 deletion src/router/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ type Permission =
| 'personenimport'
| 'personenverwaltung'
| 'rollenverwaltung'
| 'schulverwaltung';
| 'schulverwaltung'
| 'schultraegerverwaltung';

const router: Router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
Expand Down Expand Up @@ -94,6 +95,8 @@ router.beforeEach(async (to: RouteLocationNormalized, _from: RouteLocationNormal
return authStore.hasRollenverwaltungPermission;
case 'schulverwaltung':
return authStore.hasSchulverwaltungPermission;
case 'schultraegerverwaltung':
return authStore.hasSchulverwaltungPermission;
default:
return false;
}
Expand Down
11 changes: 11 additions & 0 deletions src/router/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,17 @@ const routes: readonly RouteRecordRaw[] = [
requiresPermission: 'schulverwaltung',
},
},
{
path: '/admin/schultraeger/new',
name: 'create-schultraeger',
component: () => import('../views/admin/SchultraegerCreationView.vue'),
meta: {
layout: 'AdminLayout',
requiresAuth: true,
requiredStepUpLevel: StepUpLevel.GOLD,
requiresPermission: 'schultraegerverwaltung',
},
},
{
path: '/start',
name: 'start',
Expand Down
Loading

0 comments on commit 5927022

Please sign in to comment.