Verified Commit cb28bb92 authored by Chocobozzz's avatar Chocobozzz
Browse files

Add URL redirection support for external auth

parent f82ea670
import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'
import { ActivatedRoute } from '@angular/router'
import { AuthService, Notifier, RedirectService, UserService } from '@app/core'
import { AuthService, Notifier, RedirectService, SessionStorageService, UserService } from '@app/core'
import { HooksService } from '@app/core/plugins/hooks.service'
import { LOGIN_PASSWORD_VALIDATOR, LOGIN_USERNAME_VALIDATOR } from '@app/shared/form-validators/login-validators'
import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
......@@ -17,6 +17,8 @@ import { RegisteredExternalAuthConfig, ServerConfig } from '@shared/models'
})
export class LoginComponent extends FormReactive implements OnInit, AfterViewInit {
private static SESSION_STORAGE_REDIRECT_URL_KEY = 'login-previous-url'
@ViewChild('forgotPasswordModal', { static: true }) forgotPasswordModal: ElementRef
accordion: NgbAccordion
......@@ -46,7 +48,8 @@ export class LoginComponent extends FormReactive implements OnInit, AfterViewIni
private userService: UserService,
private redirectService: RedirectService,
private notifier: Notifier,
private hooks: HooksService
private hooks: HooksService,
private storage: SessionStorageService
) {
super()
}
......@@ -88,6 +91,8 @@ export class LoginComponent extends FormReactive implements OnInit, AfterViewIni
this.externalAuthError = true
return
}
this.storage.setItem(LoginComponent.SESSION_STORAGE_REDIRECT_URL_KEY, this.redirectService.getPreviousUrl())
}
ngAfterViewInit () {
......@@ -151,7 +156,9 @@ The link will expire within 1 hour.`
this.authService.login(username, null, token)
.subscribe({
next: () => this.redirectService.redirectToPreviousRoute(),
next: () => {
this.redirectService.redirectToPreviousRoute(this.storage.getItem(LoginComponent.SESSION_STORAGE_REDIRECT_URL_KEY))
},
error: err => {
this.handleError(err)
......
......@@ -96,7 +96,7 @@ export class VideoChannelUpdateComponent extends VideoChannelEdit implements OnI
this.notifier.success($localize`Video channel ${videoChannelUpdate.displayName} updated.`)
this.redirectService.redirectToPreviousRoute([ '/c', this.videoChannel.name ])
this.redirectService.redirectToPreviousRoute('/c/' + this.videoChannel.name)
},
error: err => {
......
......@@ -46,19 +46,23 @@ export class RedirectService {
return this.defaultTrendingAlgorithm
}
redirectToPreviousRoute (fallbackRoute: string[] = null) {
getPreviousUrl () {
return this.previousUrl
}
redirectToPreviousRoute (fallbackRoute?: string) {
const exceptions = [
'/verify-account',
'/reset-password'
]
if (this.previousUrl) {
if (this.previousUrl && this.previousUrl !== '/') {
const isException = exceptions.find(e => this.previousUrl.startsWith(e))
if (!isException) return this.router.navigateByUrl(this.previousUrl)
}
if (fallbackRoute) {
return this.router.navigate(fallbackRoute)
return this.router.navigateByUrl(fallbackRoute)
}
return this.redirectToHomepage()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment