add some apple music auth stuff

This commit is contained in:
janis
2023-11-14 11:11:39 +01:00
parent 483de3cbc3
commit 83303be8e9
9 changed files with 182 additions and 19 deletions

View File

@@ -9,6 +9,7 @@ const session = require( 'express-session' );
const indexer = require( './indexer.js' );
const axios = require( 'axios' );
const ip = require( 'ip' );
const jwt = require( 'jsonwebtoken' );
app.use( bodyParser.urlencoded( { extended: false } ) );
@@ -230,6 +231,24 @@ app.get( '/getSongFile', ( req, res ) => {
} );
app.get( '/getAppleMusicDevToken', ( req, res ) => {
// sign dev token
const privateKey = fs.readFileSync( path.join( __dirname + '/config/apple_private_key.p8' ) ).toString();
// TODO: Remove secret
const config = JSON.parse( fs.readFileSync( path.join( __dirname + '/config/apple-music-api.config.secret.json' ) ) );
const jwtToken = jwt.sign( {}, privateKey, {
algorithm: "ES256",
expiresIn: "180d",
issuer: config.teamID,
header: {
alg: "ES256",
kid: config.keyID
}
} );
res.send( jwtToken );
} );
app.use( ( request, response, next ) => {
response.sendFile( path.join( __dirname + '' ) )
} );

View File

@@ -0,0 +1,45 @@
<template>
<div>
<h1>AppleMusic</h1>
</div>
</template>
<script>
export default {
data() {
return {
devTokenAvailable: false,
musicKit: null,
}
},
methods: {
prepare() {
document.addEventListener( 'musickitloaded', function() {
fetch( 'http://localhost:8081/getAppleMusicDevToken' ).then( res => {
if ( res.status === 200 ) {
this.devTokenAvailable = true;
res.text().then( token => {
this.musicKit = MusicKit.configure({
developerToken: token,
app: {
name: 'MusicPlayer',
build: '2.1.0'
}
} );
setTimeout( () => {
this.musicKit.authorize();
}, 100 );
} );
}
} );
});
}
},
created() {
window.addEventListener( 'DOMContentLoaded', () => {
this.prepare();
} );
}
}
</script>

View File

@@ -1,5 +1,5 @@
<template>
<div class="home">
<div class="home" v-if="musicOrigin === 'local'">
<div class="top-bar">
<img src="@/assets/logo.png" alt="logo" class="logo">
<div class="player-wrapper">
@@ -10,6 +10,9 @@
<mediaPool @com="( info ) => { handleCom( info ) }" ref="pool"></mediaPool>
</div>
</div>
<div v-else-if="musicOrigin === 'AppleMusic'" class="home">
<AppleMusic></AppleMusic>
</div>
</template>
<style>
@@ -54,6 +57,7 @@
</style>
<script>
import AppleMusic from '@/components/appleMusic.vue';
import mediaPool from '@/components/mediaPool.vue';
import Player from '@/components/player.vue';
@@ -62,11 +66,14 @@
components: {
mediaPool,
Player,
AppleMusic,
},
data() {
return {
hasLoadedSongs: false,
songQueue: [],
// musicOrigin: 'local',
musicOrigin: 'AppleMusic',
}
},
methods: {