import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { AuthGuard, AuthUpdateGuard, AuthenticatedGuard, AnonymousGuard, AdminGuard } from './auth/auth.guard'; import { MainComponent } from './ui/main/main.component'; import { FormLoginComponent } from './pages/form-login/form-login.component'; import { FormLogin2FAComponent } from './pages/form-login-2fa/form-login-2fa.component'; import { PasswordComponent } from './pages/password/password.component'; import { PasswordResetComponent } from './pages/password-reset/password-reset.component'; import { AccountComponent } from './pages/account/account.component'; import { RegisterComponent } from './pages/register/register.component'; import { TokensComponent } from './pages/tokens/tokens.component'; import { ServicesComponent } from './pages/services/services.component'; import { InfoComponent } from './pages/account/info/info.component'; import { ProfileComponent } from './pages/account/profile/profile.component'; import { VoucherComponent } from './pages/account/voucher/voucher.component'; import { SecurityComponent } from './pages/account/security/security.component'; import { UnavailableComponent } from './pages/unavailable/unavailable.component'; import { NotfoundComponent } from './pages/notfound/notfound.component'; import { UserComponent } from './pages/user/user.component' import { JitsiComponent } from './pages/jitsi/jitsi.component' import { ParteyComponent } from './pages/partey/partey.component' import { ParteyTimeslotsComponent } from './pages/partey/timeslots/timeslots.compontent' import { AliasesComponent } from './pages/account/aliases/aliases.component'; import { DomainsComponent } from './pages/account/domains/domains.component'; import { InvitesComponent } from './pages/invites/invites.component'; import { UrlShortenerComponent, UrlShortenerPasswordComponent } from './pages/urlshortener/urlshortener.component'; import { MinetestAccountsComponent } from './pages/minetest/accounts/accounts.component'; import { DividertestComponent } from './pages/dividertest/dividertest.component' import { BorrowProvingComponent } from './pages/borrow/proving/proving.component'; import { BorrowItemEditComponent, BorrowItemsComponent } from './pages/borrow/items/items.component'; import { BorrowRequestsComponent } from './pages/borrow/requests/requests.component'; import { BorrowComponent } from './pages/borrow/borrow.component'; import { InviteCodeComponent } from './pages/invites/code/code.component'; import { JukeboxComponent } from './pages/jukebox/jukebox.compontent'; import { FormLoginOidcComponent } from './pages/form-login-oidc/form-login-oidc.component'; import { DyndnsComponent } from './pages/account/dyndns/dyndns.component'; import { AdminComponent } from './pages/admin/admin.component'; import { AdminUsersComponent } from './pages/admin/users/users.component'; import { AdminServicesComponent } from './pages/admin/services/services.component'; import { AdminPermissionsComponent } from './pages/admin/permissions/permissions.component'; import { AdminQuotasComponent } from './pages/admin/quotas/quotas.component'; import { AdminJitsiRoomsComponent } from './pages/admin/jitsi-rooms/jitsi-rooms.component'; import { AdminMinetestAccountsComponent } from './pages/admin/minetest-accounts/minetest-accounts.component'; import { AdminShortenedUrlsComponent } from './pages/admin/shortened-urls/shortened-urls.component'; import { AdminJukeboxComponent } from './pages/admin/jukebox/jukebox.component'; import { AdminParteyMapsComponent } from './pages/admin/partey-maps/partey-maps.component'; import { AdminParteyTagsComponent } from './pages/admin/partey-tags/partey-tags.component'; import { AdminParteyReportsComponent } from './pages/admin/partey-reports/partey-reports.component'; import { AdminTimeslotsComponent } from './pages/admin/timeslots/timeslots.component'; import { AdminSystemPropertiesComponent } from './pages/admin/system-properties/system-properties.component'; import { AdminPermissionMappingsComponent } from './pages/admin/permission-mappings/permission-mappings.component'; import { AdminQuotaMappingsComponent } from './pages/admin/quota-mappings/quota-mappings.component'; import { AdminVoucherMappingsComponent } from './pages/admin/voucher-mappings/voucher-mappings.component'; import { AdminSystemProfileFieldsComponent } from './pages/admin/system-profile-fields/system-profile-fields.component'; import { AdminUserAliasesComponent } from './pages/admin/user-aliases/user-aliases.component'; import { AdminOidcClientsComponent } from './pages/admin/oidc-clients/oidc-clients.component'; import { AdminI18nComponent } from './pages/admin/i18n/i18n.component'; const routes: Routes = [ { path: 'profile/:username', component: UserComponent, canActivate: [AuthUpdateGuard] }, { path: 'edit-profile', component: ProfileComponent, canActivate: [AuthenticatedGuard] }, { path: 'jukebox', component: JukeboxComponent, canActivate: [AuthenticatedGuard] }, { path: 'partey/manage', component: ParteyComponent, canActivate: [AuthenticatedGuard] }, { path: '', component: MainComponent, children: [ { path: '', redirectTo: "/account/info", pathMatch: 'full' }, { path: 'login', component: FormLoginComponent, canActivate: [AnonymousGuard] }, { path: 'login/2fa', component: FormLogin2FAComponent, canActivate: [AnonymousGuard] }, { path: 'login/oidc', component: FormLoginOidcComponent, canActivate: [AuthenticatedGuard] }, { path: 'service-login', component: FormLoginComponent, canActivate: [AnonymousGuard] }, { path: 'service-login/2fa', component: FormLogin2FAComponent, canActivate: [AnonymousGuard] }, { path: 'password', component: PasswordComponent, canActivate: [AnonymousGuard] }, { path: 'password-reset', component: PasswordResetComponent, canActivate: [AnonymousGuard] }, { path: 'services', component: ServicesComponent, canActivate: [AuthenticatedGuard] }, { path: 'account', component: AccountComponent, canActivate: [AuthenticatedGuard], children: [ { path: '', redirectTo: "/account/info", pathMatch: 'full' }, { path: 'info', component: InfoComponent, canActivate: [AuthenticatedGuard] }, { path: 'profile', component: ProfileComponent, canActivate: [AuthenticatedGuard] }, { path: 'security', component: SecurityComponent, canActivate: [AuthenticatedGuard] }, { path: 'voucher', component: VoucherComponent, canActivate: [AuthenticatedGuard] }, { path: 'aliases', component: AliasesComponent, canActivate: [AuthenticatedGuard] }, { path: 'domains', component: DomainsComponent, canActivate: [AuthenticatedGuard] }, { path: 'dyndns', component: DyndnsComponent, canActivate: [AuthenticatedGuard] } ] }, { path: 'borrow', component: BorrowComponent, canActivate: [AuthenticatedGuard], children: [ { path: '', redirectTo: "/borrow/items", pathMatch: 'full' }, { path: 'items', component: BorrowItemsComponent, canActivate: [AuthenticatedGuard] }, { path: 'requests', component: BorrowRequestsComponent, canActivate: [AuthenticatedGuard] }, { path: 'proving', component: BorrowProvingComponent, canActivate: [AuthenticatedGuard] } ] }, { path: 'register', component: RegisterComponent, canActivate: [AnonymousGuard] }, { path: 'tokens', component: TokensComponent, canActivate: [AuthGuard] }, { path: 'jitsi', component: JitsiComponent, canActivate: [AuthenticatedGuard] }, { path: 'partey', component: ParteyComponent, canActivate: [AuthenticatedGuard] }, { path: 'partey/timeslots', component: ParteyTimeslotsComponent, canActivate: [AuthenticatedGuard] }, { path: 'partey/jukebox', component: JukeboxComponent, canActivate: [AuthenticatedGuard] }, { path: 'minetest/accounts', component: MinetestAccountsComponent, canActivate: [AuthenticatedGuard] }, { path: 'dividertest', component: DividertestComponent }, { path: 'urlshortener', component: UrlShortenerComponent, canActivate: [AuthenticatedGuard] }, { path: 'urlshortener/:code', component: UrlShortenerPasswordComponent, canActivate: [AuthUpdateGuard] }, { path: 'invites/:quota', component: InvitesComponent, canActivate: [AuthenticatedGuard] }, { path: 'invite/:code', component: InviteCodeComponent, canActivate: [AuthGuard] }, { path: 'admin', component: AdminComponent, canActivate: [AdminGuard], children: [ { path: '', redirectTo: "/admin/users", pathMatch: 'full' }, { path: 'users', component: AdminUsersComponent, canActivate: [AdminGuard] }, { path: 'permissions', component: AdminPermissionsComponent, canActivate: [AdminGuard] }, { path: 'permission-mappings', component: AdminPermissionMappingsComponent, canActivate: [AdminGuard] }, { path: 'quotas', component: AdminQuotasComponent, canActivate: [AdminGuard] }, { path: 'quota-mappings', component: AdminQuotaMappingsComponent, canActivate: [AdminGuard] }, { path: 'voucher-mappings', component: AdminVoucherMappingsComponent, canActivate: [AdminGuard] }, { path: 'services', component: AdminServicesComponent, canActivate: [AdminGuard] }, { path: 'system-properties', component: AdminSystemPropertiesComponent, canActivate: [AdminGuard] }, { path: 'system-profile-fields', component: AdminSystemProfileFieldsComponent, canActivate: [AdminGuard] }, { path: 'user-aliases', component: AdminUserAliasesComponent, canActivate: [AdminGuard] }, { path: 'oidc-clients', component: AdminOidcClientsComponent, canActivate: [AdminGuard] }, { path: 'jitsi-rooms', component: AdminJitsiRoomsComponent, canActivate: [AdminGuard] }, { path: 'minetest-accounts', component: AdminMinetestAccountsComponent, canActivate: [AdminGuard] }, { path: 'shortened-urls', component: AdminShortenedUrlsComponent, canActivate: [AdminGuard] }, { path: 'jukebox', component: AdminJukeboxComponent, canActivate: [AdminGuard] }, { path: 'partey-maps', component: AdminParteyMapsComponent, canActivate: [AdminGuard] }, { path: 'partey-tags', component: AdminParteyTagsComponent, canActivate: [AdminGuard] }, { path: 'partey-reports', component: AdminParteyReportsComponent, canActivate: [AdminGuard] }, { path: 'timeslots', component: AdminTimeslotsComponent, canActivate: [AdminGuard] }, { path: 'i18n', component: AdminI18nComponent, canActivate: [AdminGuard] } ] }, { path: 'unavailable', component: UnavailableComponent }, { path: 'p/:username', component: UserComponent, canActivate: [AuthUpdateGuard] }, { path: '**', component: NotfoundComponent, pathMatch: 'full', canActivate: [AuthUpdateGuard] },] }, ]; @NgModule({ imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload' })], exports: [RouterModule] }) export class AppRoutingModule { }