Skip to content
Snippets Groups Projects
index.js 29.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • import Vue from 'vue'
    import Router from 'vue-router'
    import store from '@/store'
    
    function adminPermissions (to, from, next) {
      if (store.state.auth.authenticated === true && store.state.auth.availablePermissions.settings === true) {
        next()
      } else {
        console.log('Not authenticated. Redirecting to library.')
        next({ name: 'library.index' })
      }
    }
    
    function moderatorPermissions (to, from, next) {
      if (store.state.auth.authenticated === true && store.state.auth.availablePermissions.moderation === true) {
        next()
      } else {
        console.log('Not authenticated. Redirecting to library.')
        next({ name: 'library.index' })
      }
    }
    
    function libraryPermissions (to, from, next) {
      if (store.state.auth.authenticated === true && store.state.auth.availablePermissions.library === true) {
        next()
      } else {
        console.log('Not authenticated. Redirecting to library.')
        next({ name: 'library.index' })
      }
    }
    
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    console.log('PROCESS', process.env)
    
      mode: 'history',
      linkActiveClass: 'active',
      base: process.env.VUE_APP_ROUTER_BASE_URL || '/',
      scrollBehavior (to, from, savedPosition) {
    
        if (to.meta.preserveScrollPosition) {
          return savedPosition
        }
    
        return new Promise(resolve => {
          setTimeout(() => {
            if (to.hash) {
    
              resolve({ selector: to.hash })
    
            const pos = savedPosition || { x: 0, y: 0 }
            resolve(pos)
          }, 100)
        })
    
          path: '/',
          name: 'index',
    
            import(/* webpackChunkName: "core" */ '@/components/Home')
    
          path: '/front',
          name: 'front',
    
          redirect: to => {
    
            const { hash, query } = to
    
            return { name: 'index', hash, query }
          }
    
          path: '/about',
          name: 'about',
    
            import(/* webpackChunkName: "about" */ '@/components/About')
    
          path: '/login',
          name: 'login',
    
            import(/* webpackChunkName: "login" */ '@/views/auth/Login'),
          props: route => ({ next: route.query.next || '/library' })
    
          path: '/notifications',
          name: 'notifications',
    
            import(/* webpackChunkName: "notifications" */ '@/views/Notifications')
    
          path: '/auth/password/reset',
          name: 'auth.password-reset',
    
            import(/* webpackChunkName: "password-reset" */ '@/views/auth/PasswordReset'),
    
          props: route => ({
    
            defaultEmail: route.query.email
          })
        },
    
          path: '/auth/callback',
          name: 'auth.callback',
    
            import(/* webpackChunkName: "auth-callback" */ '@/views/auth/Callback'),
    
            state: route.query.state
    
          path: '/auth/email/confirm',
          name: 'auth.email-confirm',
    
            import(/* webpackChunkName: "signup" */ '@/views/auth/EmailConfirm'),
    
          props: route => ({
    
          path: '/search',
          name: 'search',
    
          component: () =>
    
            import(/* webpackChunkName: "core" */ '@/views/Search'),
    
          props: route => ({
    
            initialId: route.query.id,
    
    Agate's avatar
    Agate committed
            initialType: route.query.type || 'artists',
            initialQuery: route.query.q,
    
            initialPage: parseInt(route.query.page) || 1
    
          path: '/auth/password/reset/confirm',
          name: 'auth.password-reset-confirm',
    
              /* webpackChunkName: "password-reset" */ '@/views/auth/PasswordResetConfirm'
    
            ),
          props: route => ({
    
            defaultUid: route.query.uid,
            defaultToken: route.query.token
          })
        },
    
          path: '/authorize',
          name: 'authorize',
    
            import(/* webpackChunkName: "settings" */ '@/components/auth/Authorize'),
    
          props: route => ({
    
            clientId: route.query.client_id,
            redirectUri: route.query.redirect_uri,
            scope: route.query.scope,
            responseType: route.query.response_type,
            nonce: route.query.nonce,
    
            state: route.query.state
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        {
    
          path: '/signup',
          name: 'signup',
    
            import(/* webpackChunkName: "signup" */ '@/views/auth/Signup'),
    
          props: route => ({
    
            defaultInvitation: route.query.invitation
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        },
    
          path: '/logout',
          name: 'logout',
    
            import(/* webpackChunkName: "login" */ '@/components/auth/Logout')
    
          path: '/settings',
          name: 'settings',
    
            import(/* webpackChunkName: "settings" */ '@/components/auth/Settings')
    
          path: '/settings/applications/new',
          name: 'settings.applications.new',
    
          props: route => ({
    
            redirect_uris: route.query.redirect_uris
    
              /* webpackChunkName: "settings" */ '@/components/auth/ApplicationNew'
    
    Agate's avatar
    Agate committed
        {
    
          path: '/settings/plugins',
          name: 'settings.plugins',
    
    Agate's avatar
    Agate committed
          component: () =>
            import(
    
              /* webpackChunkName: "settings" */ '@/views/auth/Plugins'
    
    Agate's avatar
    Agate committed
            )
        },
    
          path: '/settings/applications/:id/edit',
          name: 'settings.applications.edit',
    
              /* webpackChunkName: "settings" */ '@/components/auth/ApplicationEdit'
    
        ...[{ suffix: '.full', path: '/@:username@:domain' }, { suffix: '', path: '/@:username' }].map((route) => {
    
            path: route.path,
            name: `profile${route.suffix}`,
    
            component: () =>
    
              import(/* webpackChunkName: "core" */ '@/views/auth/ProfileBase'),
    
            props: true,
            children: [
              {
    
                name: `profile${route.suffix}.overview`,
    
                component: () =>
                  import(
    
                    /* webpackChunkName: "core" */ '@/views/auth/ProfileOverview'
    
                name: `profile${route.suffix}.activity`,
    
                component: () =>
                  import(
    
                    /* webpackChunkName: "core" */ '@/views/auth/ProfileActivity'
    
          path: '/favorites',
          name: 'favorites',
    
            import(/* webpackChunkName: "favorites" */ '@/components/favorites/List'),
    
          props: route => ({
    
            defaultOrdering: route.query.ordering,
    
            defaultPage: route.query.page,
            defaultPaginateBy: route.query.paginateBy
    
            import(/* webpackChunkName: "core" */ '@/views/content/Base'),
    
              path: '',
              name: 'content.index',
    
                import(/* webpackChunkName: "core" */ '@/views/content/Home')
    
          path: '/content/libraries/tracks',
    
            import(/* webpackChunkName: "auth-libraries" */ '@/views/content/Base'),
    
              path: '',
              name: 'content.libraries.files',
    
                  /* webpackChunkName: "auth-libraries" */ '@/views/content/libraries/Files'
    
                ),
              props: route => ({
    
          path: '/content/libraries',
    
            import(/* webpackChunkName: "auth-libraries" */ '@/views/content/Base'),
    
              path: '',
              name: 'content.libraries.index',
    
                  /* webpackChunkName: "auth-libraries" */ '@/views/content/libraries/Home'
    
          path: '/content/remote',
    
            import(/* webpackChunkName: "auth-libraries" */ '@/views/content/Base'),
    
              path: '',
              name: 'content.remote.index',
    
                import(/* webpackChunkName: "auth-libraries" */ '@/views/content/remote/Home')
    
          path: '/manage/settings',
          name: 'manage.settings',
          beforeEnter: adminPermissions,
    
            import(/* webpackChunkName: "admin" */ '@/views/admin/Settings')
    
          path: '/manage/library',
          beforeEnter: libraryPermissions,
    
            import(/* webpackChunkName: "admin" */ '@/views/admin/library/Base'),
    
              path: 'edits',
              name: 'manage.library.edits',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/EditsList'
    
                  defaultQuery: route.query.q
    
              path: 'artists',
              name: 'manage.library.artists',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/ArtistsList'
    
                  defaultQuery: route.query.q
    
              path: 'artists/:id',
              name: 'manage.library.artists.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/ArtistDetail'
    
              path: 'channels',
              name: 'manage.channels',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/ChannelsList'
    
                ),
              props: route => {
                return {
                  defaultQuery: route.query.q
                }
              }
            },
            {
    
              path: 'channels/:id',
              name: 'manage.channels.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/ChannelDetail'
    
              path: 'albums',
              name: 'manage.library.albums',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/AlbumsList'
    
                  defaultQuery: route.query.q
    
              path: 'albums/:id',
              name: 'manage.library.albums.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/AlbumDetail'
    
              path: 'tracks',
              name: 'manage.library.tracks',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/TracksList'
    
                  defaultQuery: route.query.q
    
              path: 'tracks/:id',
              name: 'manage.library.tracks.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/TrackDetail'
    
              path: 'libraries',
              name: 'manage.library.libraries',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/LibrariesList'
    
                  defaultQuery: route.query.q
    
              path: 'libraries/:id',
              name: 'manage.library.libraries.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/LibraryDetail'
    
              path: 'uploads',
              name: 'manage.library.uploads',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/UploadsList'
    
                  defaultQuery: route.query.q
    
              path: 'uploads/:id',
              name: 'manage.library.uploads.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/UploadDetail'
    
              path: 'tags',
              name: 'manage.library.tags',
    
              component: () =>
                import(
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/TagsList'
    
                ),
              props: route => {
                return {
                  defaultQuery: route.query.q
                }
              }
            },
            {
    
              path: 'tags/:id',
              name: 'manage.library.tags.detail',
    
              component: () =>
                import(
    
                  /* webpackChunkName: "admin" */ '@/views/admin/library/TagDetail'
    
          path: '/manage/users',
          beforeEnter: adminPermissions,
    
            import(/* webpackChunkName: "admin" */ '@/views/admin/users/Base'),
    
    Eliot Berriot's avatar
    Eliot Berriot committed
          children: [
            {
    
              path: 'users',
              name: 'manage.users.users.list',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/users/UsersList'
    
              path: 'invitations',
              name: 'manage.users.invitations.list',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/users/InvitationsList'
    
          path: '/manage/moderation',
          beforeEnter: moderatorPermissions,
    
            import(/* webpackChunkName: "admin" */ '@/views/admin/moderation/Base'),
    
              path: 'domains',
              name: 'manage.moderation.domains.list',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/DomainsList'
    
              path: 'domains/:id',
              name: 'manage.moderation.domains.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/DomainsDetail'
    
              props: true
    
              path: 'accounts',
              name: 'manage.moderation.accounts.list',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/AccountsList'
    
                  defaultQuery: route.query.q
    
              path: 'accounts/:id',
              name: 'manage.moderation.accounts.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/AccountsDetail'
    
              props: true
    
              path: 'reports',
              name: 'manage.moderation.reports.list',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/ReportsList'
    
                ),
              props: route => {
    
                return {
                  defaultQuery: route.query.q,
    
                  updateUrl: true
    
              path: 'reports/:id',
              name: 'manage.moderation.reports.detail',
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/ReportDetail'
    
              path: 'requests',
              name: 'manage.moderation.requests.list',
    
              component: () =>
                import(
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/RequestsList'
    
                ),
              props: route => {
                return {
                  defaultQuery: route.query.q,
                  updateUrl: true
                }
              }
            },
            {
    
              path: 'requests/:id',
              name: 'manage.moderation.requests.detail',
    
              component: () =>
                import(
    
                  /* webpackChunkName: "admin" */ '@/views/admin/moderation/RequestDetail'
    
                ),
              props: true
    
            import(/* webpackChunkName: "core" */ '@/components/library/Library'),
    
                import(/* webpackChunkName: "core" */ '@/components/library/Home'),
              name: 'library.index'
    
                import(/* webpackChunkName: "core" */ '@/components/library/Home'),
              name: 'library.me',
    
              path: 'artists/',
              name: 'library.artists.browse',
    
                  /* webpackChunkName: "artists" */ '@/components/library/Artists'
    
                ),
              props: route => ({
    
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
    
                defaultTags: Array.isArray(route.query.tag || [])
                  ? route.query.tag
                  : [route.query.tag],
    
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
              path: 'me/artists',
              name: 'library.artists.me',
    
                  /* webpackChunkName: "artists" */ '@/components/library/Artists'
    
                ),
              props: route => ({
                scope: 'me',
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultTags: Array.isArray(route.query.tag || [])
                  ? route.query.tag
                  : [route.query.tag],
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
              path: 'albums/',
              name: 'library.albums.browse',
    
                  /* webpackChunkName: "albums" */ '@/components/library/Albums'
    
                ),
              props: route => ({
    
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
    
                defaultTags: Array.isArray(route.query.tag || [])
                  ? route.query.tag
                  : [route.query.tag],
    
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
              path: 'podcasts/',
              name: 'library.podcasts.browse',
    
              component: () =>
                import(
    
                  /* webpackChunkName: "podcasts" */ '@/components/library/Podcasts'
    
                ),
              props: route => ({
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultTags: Array.isArray(route.query.tag || [])
                  ? route.query.tag
                  : [route.query.tag],
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
              path: 'me/albums',
              name: 'library.albums.me',
    
                  /* webpackChunkName: "albums" */ '@/components/library/Albums'
    
                ),
              props: route => ({
                scope: 'me',
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultTags: Array.isArray(route.query.tag || [])
                  ? route.query.tag
                  : [route.query.tag],
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
              path: 'radios/',
              name: 'library.radios.browse',
    
                  /* webpackChunkName: "radios" */ '@/components/library/Radios'
    
                ),
              props: route => ({
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
            {
    
              path: 'me/radios/',
              name: 'library.radios.me',
    
                  /* webpackChunkName: "radios" */ '@/components/library/Radios'
    
                ),
              props: route => ({
    
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
              path: 'radios/build',
              name: 'library.radios.build',
    
                  /* webpackChunkName: "radios" */ '@/components/library/radios/Builder'
    
              path: 'radios/build/:id',
              name: 'library.radios.edit',
    
                  /* webpackChunkName: "radios" */ '@/components/library/radios/Builder'
    
              path: 'radios/:id',
              name: 'library.radios.detail',
    
                import(/* webpackChunkName: "radios" */ '@/views/radios/Detail'),
    
              path: 'playlists/',
              name: 'library.playlists.browse',
    
                import(/* webpackChunkName: "playlists" */ '@/views/playlists/List'),
    
              props: route => ({
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
            {
    
              path: 'me/playlists/',
              name: 'library.playlists.me',
    
                import(/* webpackChunkName: "playlists" */ '@/views/playlists/List'),
    
              props: route => ({
    
                defaultOrdering: route.query.ordering,
                defaultQuery: route.query.query,
                defaultPaginateBy: route.query.paginateBy,
                defaultPage: route.query.page
              })
            },
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            {
    
              path: 'playlists/:id',
              name: 'library.playlists.detail',
    
                import(/* webpackChunkName: "playlists" */ '@/views/playlists/Detail'),
    
              props: route => ({
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                id: route.params.id,
    
                defaultEdit: route.query.mode === 'edit'
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            },
    
              path: 'tags/:id',
              name: 'library.tags.detail',
    
                  /* webpackChunkName: "tags" */ '@/components/library/TagDetail'
    
                  /* webpackChunkName: "artists" */ '@/components/library/ArtistBase'
    
              props: true,
              children: [
                {
    
                  path: '',
                  name: 'library.artists.detail',
    
                      /* webpackChunkName: "artists" */ '@/components/library/ArtistDetail'
    
                  path: 'edit',
                  name: 'library.artists.edit',
    
                      /* webpackChunkName: "edits" */ '@/components/library/ArtistEdit'
    
                  path: 'edit/:editId',
                  name: 'library.artists.edit.detail',
    
                      /* webpackChunkName: "edits" */ '@/components/library/EditDetail'
    
                  /* webpackChunkName: "albums" */ '@/components/library/AlbumBase'
    
              props: true,
              children: [
                {
    
                  path: '',
                  name: 'library.albums.detail',
    
                      /* webpackChunkName: "albums" */ '@/components/library/AlbumDetail'
    
                  path: 'edit',
                  name: 'library.albums.edit',
    
                      /* webpackChunkName: "edits" */ '@/components/library/AlbumEdit'
    
                  path: 'edit/:editId',
                  name: 'library.albums.edit.detail',
    
                      /* webpackChunkName: "edits" */ '@/components/library/EditDetail'
    
                  /* webpackChunkName: "tracks" */ '@/components/library/TrackBase'
    
              props: true,
              children: [
                {
    
                  path: '',
                  name: 'library.tracks.detail',
    
                      /* webpackChunkName: "tracks" */ '@/components/library/TrackDetail'
    
                  path: 'edit',
                  name: 'library.tracks.edit',
    
                      /* webpackChunkName: "edits" */ '@/components/library/TrackEdit'
    
                  path: 'edit/:editId',
                  name: 'library.tracks.edit.detail',
    
                      /* webpackChunkName: "edits" */ '@/components/library/EditDetail'
    
              path: 'uploads/:id',
              name: 'library.uploads.detail',
    
              props: true,
              component: () =>
                import(
    
                  /* webpackChunkName: "uploads" */ '@/components/library/UploadDetail'
                )
    
            {
              // browse a single library via it's uuid
    
              path: ':id([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})',
    
              props: true,
              component: () =>
                import(
    
                  /* webpackChunkName: "library" */ '@/views/library/DetailBase'
    
                  path: '',
                  name: 'library.detail',
    
                      /* webpackChunkName: "library" */ '@/views/library/DetailOverview'
    
                  path: 'albums',
                  name: 'library.detail.albums',
    
                      /* webpackChunkName: "library" */ '@/views/library/DetailAlbums'
    
                  path: 'tracks',
                  name: 'library.detail.tracks',
    
                      /* webpackChunkName: "library" */ '@/views/library/DetailTracks'
    
                  path: 'edit',
                  name: 'library.detail.edit',
    
                      /* webpackChunkName: "auth-libraries" */ '@/views/library/Edit'
    
                  path: 'upload',
                  name: 'library.detail.upload',
    
                      /* webpackChunkName: "auth-libraries" */ '@/views/library/Upload'
    
                    ),
                  props: route => ({
                    defaultImportReference: route.query.import
                  })
    
                // {
                //   path: "episodes",
                //   name: "library.detail.episodes",
                //   component: () =>
                //     import(
                //       /* webpackChunkName: "library" */ "@/views/library/DetailEpisodes"
                //     )
                // },
              ]
    
          path: '/channels/:id',
    
          props: true,
          component: () =>
            import(
    
              /* webpackChunkName: "channels" */ '@/views/channels/DetailBase'
    
              path: '',
              name: 'channels.detail',
    
              component: () =>
                import(
    
                  /* webpackChunkName: "channels" */ '@/views/channels/DetailOverview'