mirror of
https://github.com/WebTools-NG/WebTools-NG
synced 2024-11-22 19:13:19 +00:00
login request to plex is now working, and saves the token in store. made export routes and component
This commit is contained in:
parent
b81085bb9d
commit
36a3504564
7 changed files with 137 additions and 21 deletions
50
package-lock.json
generated
50
package-lock.json
generated
|
@ -2168,6 +2168,37 @@
|
||||||
"integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
|
"integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "0.19.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
|
||||||
|
"integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "1.5.10"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"follow-redirects": {
|
||||||
|
"version": "1.5.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
|
||||||
|
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
|
||||||
|
"requires": {
|
||||||
|
"debug": "=3.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-eslint": {
|
"babel-eslint": {
|
||||||
"version": "10.1.0",
|
"version": "10.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
|
||||||
|
@ -3521,6 +3552,11 @@
|
||||||
"randomfill": "^1.0.3"
|
"randomfill": "^1.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"crypto-js": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q=="
|
||||||
|
},
|
||||||
"css-color-names": {
|
"css-color-names": {
|
||||||
"version": "0.0.4",
|
"version": "0.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
|
||||||
|
@ -6705,6 +6741,11 @@
|
||||||
"yallist": "^3.0.2"
|
"yallist": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lz-string": {
|
||||||
|
"version": "1.4.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
|
||||||
|
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY="
|
||||||
|
},
|
||||||
"make-dir": {
|
"make-dir": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
||||||
|
@ -9082,6 +9123,15 @@
|
||||||
"ajv-keywords": "^3.4.1"
|
"ajv-keywords": "^3.4.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"secure-ls": {
|
||||||
|
"version": "1.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/secure-ls/-/secure-ls-1.2.6.tgz",
|
||||||
|
"integrity": "sha512-g8vUSKl6elSfyAUHodybnNkuZW+mUYEOWj4SZIDg+xoQ1dq5ddktBoOFrtxQBUl88ZyAJOtGWQ1PRaOxkTAuZQ==",
|
||||||
|
"requires": {
|
||||||
|
"crypto-js": "^3.1.6",
|
||||||
|
"lz-string": "^1.4.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"select-hose": {
|
"select-hose": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
|
||||||
|
|
|
@ -9,9 +9,11 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-free": "^5.13.0",
|
"@fortawesome/fontawesome-free": "^5.13.0",
|
||||||
|
"axios": "^0.19.2",
|
||||||
"buefy": "^0.8.17",
|
"buefy": "^0.8.17",
|
||||||
"bulma": "^0.8.2",
|
"bulma": "^0.8.2",
|
||||||
"core-js": "^3.6.4",
|
"core-js": "^3.6.4",
|
||||||
|
"secure-ls": "^1.2.6",
|
||||||
"vue": "^2.6.11",
|
"vue": "^2.6.11",
|
||||||
"vue-router": "^3.1.6",
|
"vue-router": "^3.1.6",
|
||||||
"vue-sidebar-menu": "^4.5.3",
|
"vue-sidebar-menu": "^4.5.3",
|
||||||
|
|
18
src/components/Export.vue
Normal file
18
src/components/Export.vue
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<template>
|
||||||
|
<section class="section">
|
||||||
|
<h1 class="title is-2">Welcome to Export</h1>
|
||||||
|
<h2 class="subtitle">Export can export stuff</h2>
|
||||||
|
<br>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'export'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -24,14 +24,14 @@
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label for="" class="label">Password</label>
|
<label for="" class="label">Password</label>
|
||||||
<div class="control has-icons-left">
|
<div class="control has-icons-left">
|
||||||
<input type="password" placeholder="1234" class="input is-dark" v-model="input.password" v-on:keyup.enter="login()" required>
|
<input type="password" placeholder="1234" class="input is-dark" v-model="input.password" v-on:keyup.enter="loginToPlex()" required>
|
||||||
<span class="icon is-small is-left">
|
<span class="icon is-small is-left">
|
||||||
<i class="fa fa-lock"></i>
|
<i class="fa fa-lock"></i>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<button type="button" class="button is-success" v-on:click="login()">
|
<button type="button" class="button is-success" v-on:click="loginToPlex()">
|
||||||
Login
|
Login
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -41,10 +41,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const axios = require('axios').default;
|
||||||
|
import store from '../store'
|
||||||
|
import router from '../router'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Login',
|
name: 'Login',
|
||||||
data() {
|
data() {
|
||||||
|
@ -52,7 +57,7 @@ export default {
|
||||||
input: {
|
input: {
|
||||||
username: "",
|
username: "",
|
||||||
password: ""
|
password: ""
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -68,12 +73,51 @@ export default {
|
||||||
danger(){
|
danger(){
|
||||||
this.$buefy.toast.open({
|
this.$buefy.toast.open({
|
||||||
duration: 3000,
|
duration: 3000,
|
||||||
message: `Wrong username or password`,
|
message: "Wrong password or username",
|
||||||
|
/*${status}: ${msg}*/
|
||||||
type: 'is-danger'
|
type: 'is-danger'
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
loginToPlex(){
|
||||||
|
axios({
|
||||||
|
method: 'POST',
|
||||||
|
url: 'https://plex.tv/users/sign_in.json',
|
||||||
|
responseType: 'json',
|
||||||
|
auth: {
|
||||||
|
username : this.input.username,
|
||||||
|
password: this.input.password
|
||||||
|
},
|
||||||
|
headers:
|
||||||
|
{ 'X-Plex-Product' : 'webtools',
|
||||||
|
'X-Plex-Version' : '1.19.2',
|
||||||
|
'X-Plex-Client-Identifier' : 'Insert ID here',
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.then(function (response) {
|
||||||
|
store.commit("setAuthToken", response.data.user.authToken);
|
||||||
|
store.commit("setAuthentication", true);
|
||||||
|
router.replace({name: "home"});
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
if (error.response) {
|
||||||
|
// The request was made and the server responded with a status code
|
||||||
|
// that falls out of the range of 2xx
|
||||||
|
console.log(error.response.data)
|
||||||
|
console.log(error.response.status)
|
||||||
|
alert(error.response.data.error)
|
||||||
|
//this.danger(error.response.status, error.response.data.error);
|
||||||
|
} else if (error.request) {
|
||||||
|
// The request was made but no response was received
|
||||||
|
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
|
||||||
|
// http.ClientRequest in node.js
|
||||||
|
console.log(error.request);
|
||||||
|
} else {
|
||||||
|
// Something happened in setting up the request that triggered an Error
|
||||||
|
console.log('Error', error.message);
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
:menu="menu"
|
:menu="menu"
|
||||||
:collapsed="collapsed"
|
:collapsed="collapsed"
|
||||||
@toggle-collapse="onToggleCollapse"
|
@toggle-collapse="onToggleCollapse"
|
||||||
@item-click="onItemClick"
|
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -120,15 +119,7 @@ import '@fortawesome/fontawesome-free/css/all.css'
|
||||||
console.log(collapsed)
|
console.log(collapsed)
|
||||||
|
|
||||||
},
|
},
|
||||||
onItemClick(event, item) {
|
|
||||||
console.log('onItemClick')
|
|
||||||
console.log(event)
|
|
||||||
console.log(item)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import Vue from 'vue'
|
||||||
import VueRouter from 'vue-router'
|
import VueRouter from 'vue-router'
|
||||||
import Login from '../components/Login.vue'
|
import Login from '../components/Login.vue'
|
||||||
import Home from '../components/Home.vue'
|
import Home from '../components/Home.vue'
|
||||||
|
import Export from '../components/Export.vue'
|
||||||
import Store from '../store/index.js'
|
import Store from '../store/index.js'
|
||||||
Vue.use(VueRouter)
|
Vue.use(VueRouter)
|
||||||
|
|
||||||
|
@ -26,6 +27,12 @@ Vue.use(VueRouter)
|
||||||
name: "home",
|
name: "home",
|
||||||
component: Home,
|
component: Home,
|
||||||
meta: {requiresAuth: true}
|
meta: {requiresAuth: true}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/export',
|
||||||
|
name: "export",
|
||||||
|
component: Export,
|
||||||
|
meta: {requiresAuth: true}
|
||||||
}
|
}
|
||||||
]});
|
]});
|
||||||
|
|
||||||
|
|
|
@ -2,24 +2,28 @@ import Vue from 'vue'
|
||||||
import Vuex from 'vuex'
|
import Vuex from 'vuex'
|
||||||
import VuexPersistence from 'vuex-persist';
|
import VuexPersistence from 'vuex-persist';
|
||||||
|
|
||||||
|
|
||||||
Vue.use(Vuex)
|
Vue.use(Vuex)
|
||||||
|
|
||||||
const vuexLocal = new VuexPersistence({
|
const vuexLocal = new VuexPersistence({
|
||||||
storage: window.localStorage,
|
storage: window.sessionStorage,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default new Vuex.Store({
|
export default new Vuex.Store({
|
||||||
state: {
|
state: {
|
||||||
authenticated: false
|
authenticated: false,
|
||||||
|
authToken: ''
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
setAuthentication(state, status) {
|
setAuthentication(state, status) {
|
||||||
state.authenticated = status;
|
state.authenticated = status;
|
||||||
|
},
|
||||||
|
setAuthToken(state, token){
|
||||||
|
state.authToken = token
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
getters: {
|
||||||
|
},
|
||||||
actions: {
|
actions: {
|
||||||
},
|
},
|
||||||
modules: {
|
modules: {
|
||||||
|
|
Loading…
Reference in a new issue