mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-26 19:21:39 +00:00
Clean up server init and save sso settings
This commit is contained in:
parent
61bf30e08a
commit
4616ef91e6
5 changed files with 88 additions and 2912 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
2857
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -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('/');
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue