Clean up server init and save sso settings

This commit is contained in:
advplyr 2022-03-04 16:55:38 -06:00
parent 61bf30e08a
commit 4616ef91e6
5 changed files with 88 additions and 2912 deletions

View file

@ -82,17 +82,17 @@ export default {
user: {
createNewUser: false,
isActive: true,
settings: {
mobileOrderBy: 'recent',
mobileOrderDesc: true,
mobileFilterBy: 'all',
orderBy: 'book.title',
orderDesc: false,
filterBy: 'all',
playbackRate: 1,
bookshelfCoverSize: 120,
collapseSeries: false
},
// settings: {
// mobileOrderBy: 'recent',
// mobileOrderDesc: true,
// mobileFilterBy: 'all',
// orderBy: 'book.title',
// orderDesc: false,
// filterBy: 'all',
// playbackRate: 1,
// bookshelfCoverSize: 120,
// collapseSeries: false
// },
permissions: {
download: false,
update: false,
@ -106,7 +106,6 @@ export default {
},
watch: {
SSOSettings(newVal, oldVal) {
console.log('SSO Settings set', newVal, oldVal)
if (newVal && !oldVal) {
this.initSSOSettings()
}
@ -160,8 +159,14 @@ export default {
methods: {
saveSSOSettings() {
this.updatingSSOSettings = true
var user = JSON.parse(JSON.stringify(this.user))
var updatePayload = {
oidc: { ...this.oidc },
user
}
this.$store
.dispatch('settings/updateSSOSettings', { oidc: this.oidc, user: this.user })
.dispatch('settings/updateSSOSettings', updatePayload)
.then((payload) => {
console.log('Update SSO settings success', payload)
this.updatingSSOSettings = false

View file

@ -92,21 +92,23 @@ export default {
this.processing = false
},
getCookies() {
return document.cookie.split(";").map(c => c.split("=")).reduce((acc, val)=> {
return document.cookie
.split(';')
.map((c) => c.split('='))
.reduce((acc, val) => {
return {
...acc,
[val[0]]: val[1]
}
}, {})
},
deleteCookie(name, path="/", domain=document.location.host) {
document.cookie = name + "=" +
((path) ? ";path="+path:"")+
((domain)?";domain="+domain:"") +
";expires=Thu, 01 Jan 1970 00:00:01 GMT";
deleteCookie(name, path = '/', domain = document.location.host) {
document.cookie = name + '=' + (path ? ';path=' + path : '') + (domain ? ';domain=' + domain : '') + ';expires=Thu, 01 Jan 1970 00:00:01 GMT'
},
checkAuth() {
if (this.getCookies()["sso"]) {
console.log('Raw cookie', document.cookie)
if (this.getCookies()['sso']) {
this.processing = true
this.$axios
@ -117,10 +119,10 @@ export default {
})
.catch((error) => {
console.error('Authorize error', error)
this.deleteCookie("sso")
this.deleteCookie('sso')
this.processing = false
})
return;
return
}
if (localStorage.getItem('token')) {
let token = localStorage.getItem('token')
@ -146,7 +148,8 @@ export default {
}
},
async checkSSO() {
const res = await fetch("/oidc/login", {mode: "no-cors"})
const res = await fetch('/oidc/login', { mode: 'no-cors' })
console.log('res', res)
if (res.status >= 400 && res.status < 600) {
this.ssoAvailable = false
return

2857
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -153,25 +153,22 @@ class Server {
this.watcher.initWatcher(this.libraries)
this.watcher.on('files', this.filesChanged.bind(this))
}
this.passportInit()
}
passportInit() {
if (this.db.SSOSettings.isOIDCConfigured) {
Logger.debug(`[Server] passportInit OIDC is configured - init`)
passport.serializeUser((user, next) => {
next(null, {userId: user.id});
console.log('Testing serialize user', user)
next(null, { userId: user.id })
})
passport.deserializeUser((obj, next) => {
this.db.users.find(u => u.id === obj.userId)
next(null, obj);
console.log('Testing deserialize user', obj)
var user = this.db.users.find(u => u.id === obj.userId)
next(null, user)
})
// Initialize passport OIDC verification
passport.use(new OidcStrategy(this.db.SSOSettings.getOIDCSettings(), this.auth.handleOIDCVerification.bind(this.auth)))
} else {
Logger.debug(`[Server] passportInit OIDC not configured`)
}
}
async start() {
@ -183,19 +180,33 @@ class Server {
this.server = http.createServer(app)
// TEMP testing OIDC
app.use((req, res, next) => {
if (req.url.startsWith('/oidc/callback')) {
console.log('OIDC CALLBACK', req.headers)
}
next()
})
app.use(this.auth.cors)
app.use(fileUpload())
app.use(express.urlencoded({ extended: true }));
app.use(express.json())
app.use(cookieParser());
app.use(cookieParser())
app.use(session({
secret: process.env.TOKEN_SECRET,
resave: false,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
if (this.db.SSOSettings.isOIDCConfigured) {
this.passportInit()
app.use(passport.initialize())
app.use(passport.session())
} else {
Logger.debug(`[Server] passportInit OIDC not configured`)
}
/*
if (req.method === 'GET' && req.query && req.query.token) {
token = req.query.token
@ -283,6 +294,8 @@ class Server {
app.get("/oidc/login", passport.authenticate('openidconnect'))
app.get("/oidc/callback", passport.authenticate('openidconnect', { failureRedirect: '/login', failureMessage: true }),
async (req, res) => {
// Never reached
console.log('OIDC CALLBACK RECEIVED', req)
res.cookie('sso', true, { httpOnly: false /* TODO: Set secure: true */ });
res.redirect('/');
}