YoLo
This commit is contained in:
parent
9878d251e7
commit
1b2f22ca31
9 changed files with 325 additions and 60 deletions
|
@ -58,6 +58,34 @@
|
|||
text
|
||||
height="100%"
|
||||
>Developer</v-btn>
|
||||
<v-menu
|
||||
|
||||
left
|
||||
bottom
|
||||
offset-y
|
||||
v-if="this.$store.state.loggedIn"
|
||||
>
|
||||
<template v-slot:activator="{ on }">
|
||||
<v-btn v-on="on" class="d-none d-md-flex" tile text height="100%">
|
||||
Admin
|
||||
</v-btn>
|
||||
</template>
|
||||
|
||||
<v-list>
|
||||
<v-list-item to="/admin/settings">
|
||||
<v-list-item-title>Settings</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-list-item to="/access">
|
||||
<v-list-item-title>User</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-list-item to="/access">
|
||||
<v-list-item-title>Apps</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-list-item to="/access">
|
||||
<v-list-item-title>Invites</v-list-item-title>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
<v-menu
|
||||
|
||||
left
|
||||
|
|
|
@ -137,69 +137,15 @@
|
|||
},
|
||||
data () {
|
||||
return {
|
||||
big: true,
|
||||
bgcolor: "transparent",
|
||||
flat: true,
|
||||
nameBig: '',
|
||||
nameSmall: '',
|
||||
sideMenu: this.$store.state.sideMenu,
|
||||
menu: [
|
||||
{ icon: 'home', title: 'Login' , link: "Login" },
|
||||
{ icon: 'info', title: 'Invited' },
|
||||
{ icon: 'warning', title: 'Register' }
|
||||
],
|
||||
menu2: [
|
||||
{ icon: 'home', title: 'Apps' },
|
||||
{ icon: 'info', title: 'Admin' },
|
||||
{ icon: 'warning', title: 'Account' }
|
||||
],
|
||||
menu3: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
setting: (name) => {
|
||||
//this.$store.getters.getSettingValue(this.$store.state, name);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
generateMenu: function () {
|
||||
this.menu = [];
|
||||
if(!this.$store.state.loggedIn) {
|
||||
this.menu.push({ icon: 'home', title: 'Login' , link: "Login" });
|
||||
if(this.$store.getters.getSettingValue("invites")) {
|
||||
this.menu.push({ icon: 'home', title: 'Invited' , link: "Invited" });
|
||||
}
|
||||
if(this.$store.getters.getSettingValue("registration_possible")) {
|
||||
this.menu.push({ icon: 'home', title: 'Register' , link: "Register" });
|
||||
}
|
||||
} else {
|
||||
if(this.$store.getters.getMe.developer) {
|
||||
this.menu.push({ icon: 'home', title: 'Apps' , link: "Apps" });
|
||||
}
|
||||
if(this.$store.getters.getMe.admin) {
|
||||
this.menu.push({ icon: 'home', title: 'Admin' , link: "Admin" });
|
||||
}
|
||||
this.menu.push({ icon: 'home', title: 'Profile' , link: "profile", submenu: true, menu: [
|
||||
{ icon: 'home', title: 'Logout' , link: "Logout" }
|
||||
] });
|
||||
}
|
||||
},
|
||||
handleScroll: function (evt, el) {
|
||||
if(evt.pageY > 100) {
|
||||
this.big = false;
|
||||
this.bgcolor = "#fff";
|
||||
this.flat = false;
|
||||
} else {
|
||||
this.big = true;
|
||||
this.bgcolor = "transparent";
|
||||
this.flat = true;
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
mounted: function () {
|
||||
this.nameBig = this.$store.getters.getSettingValue("name_big");
|
||||
this.nameSmall = this.$store.getters.getSettingValue("name_small");
|
||||
this.generateMenu();
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -14,6 +14,8 @@ import Register from '../views/Register'
|
|||
import Access from '../views/Access'
|
||||
import Profile from '../views/Profile'
|
||||
|
||||
import AdminSettings from '../views/admin/Settings'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
function guard(to, from, next){
|
||||
|
@ -25,6 +27,15 @@ function guard(to, from, next){
|
|||
}
|
||||
}
|
||||
|
||||
function admin(to, from, next){
|
||||
if(store.state.loggedIn) {
|
||||
next(); // allow to enter route
|
||||
} else{
|
||||
store.state.redirectIfLoggedIn = to;
|
||||
next('/login'); // go to '/login';
|
||||
}
|
||||
}
|
||||
|
||||
export default new Router({
|
||||
routes: [
|
||||
{
|
||||
|
@ -93,6 +104,13 @@ export default new Router({
|
|||
path: '/user/mails',
|
||||
name: 'userMails',
|
||||
component: Mail
|
||||
}
|
||||
},
|
||||
{
|
||||
beforeEnter: admin,
|
||||
path: '/admin/settings',
|
||||
name: 'adminSettings',
|
||||
component: AdminSettings
|
||||
},
|
||||
|
||||
]
|
||||
})
|
||||
|
|
7
src/services/Admin.js
Normal file
7
src/services/Admin.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import Api from '@/services/Api'
|
||||
|
||||
export default {
|
||||
saveSettings(settings) {
|
||||
return Api().post('/v1/admin/settings', settings);
|
||||
}
|
||||
}
|
|
@ -4,6 +4,9 @@ export default {
|
|||
getPublicSettings (params) {
|
||||
return Api().get('/v1/server/settings')
|
||||
},
|
||||
getAllSettings () {
|
||||
return Api().get('/v1/server/settings?all=1')
|
||||
},
|
||||
getStatus () {
|
||||
return Api().get("/v1/status/check")
|
||||
}
|
||||
|
|
|
@ -32,10 +32,16 @@ export default {
|
|||
removeMail(mailID) {
|
||||
return Api().delete('/v1/user/me/mail/'+mailID);
|
||||
},
|
||||
markMailAsPrimary(mailID) {
|
||||
return Api().post('/v1/user/me/mail/'+mailID+'/markAsPrimary');
|
||||
},
|
||||
getCaptchaSettings() {
|
||||
return Api().get("/v1/user/captcha");
|
||||
},
|
||||
getInviteCodeInfo(code) {
|
||||
return Api().get("/v1/user/invites?code="+code)
|
||||
},
|
||||
changePassword(newPassword) {
|
||||
return Api().post("/v1/user/me/changePassword", {"password": newPassword});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<td class="text-right">
|
||||
<!--<v-btn depressed x-small :disabled="item.status == 'valide'" color="primary" style="margin-right: 10px;">Resend Validation</v-btn>!-->
|
||||
<v-btn depressed x-small :disabled="item.primary" @click="removeMail(item.id)" color="error" style="margin-right: 10px;">Remove Mail</v-btn>
|
||||
<v-btn depressed x-small :disabled="item.primary || item.status != 'valide'" color="success">Mark as Primary</v-btn>
|
||||
<v-btn depressed x-small :disabled="item.primary || item.status != 'valide'" @click="markAsPrimary(item.id)" color="success">Mark as Primary</v-btn>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -48,6 +48,20 @@
|
|||
Add Mail
|
||||
</v-btn>
|
||||
<h2>Password</h2>
|
||||
<p>New Password</p>
|
||||
<v-text-field
|
||||
label="New Password"
|
||||
value=""
|
||||
type="password"
|
||||
v-model="newpassword"
|
||||
|
||||
></v-text-field>
|
||||
<v-btn
|
||||
color="success"
|
||||
@click="changePassword"
|
||||
>
|
||||
Change Password
|
||||
</v-btn>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-container>
|
||||
|
@ -66,7 +80,8 @@
|
|||
nameBig: '',
|
||||
nameSmall: '',
|
||||
mails: [],
|
||||
newmail: ''
|
||||
newmail: '',
|
||||
newpassword: ''
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
@ -87,6 +102,18 @@
|
|||
UserService.removeMail(id).then((res) => {
|
||||
this.getMails();
|
||||
});
|
||||
},
|
||||
markAsPrimary: function(id) {
|
||||
UserService.markMailAsPrimary(id).then((res) => {
|
||||
this.getMails();
|
||||
})
|
||||
},
|
||||
changePassword: function() {
|
||||
UserService.changePassword(this.newpassword).then(() => {
|
||||
alert("Password changed");
|
||||
}).catch((res) => {
|
||||
alert("There was an error: "+res.response.data.data.password[0]);
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted: function() {
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
export default {
|
||||
data () {
|
||||
return {
|
||||
success: true,
|
||||
success: false,
|
||||
inviteCode: '',
|
||||
errorMsg: '',
|
||||
username: '',
|
||||
|
|
230
src/views/admin/Settings.vue
Normal file
230
src/views/admin/Settings.vue
Normal file
|
@ -0,0 +1,230 @@
|
|||
<template>
|
||||
<div style="margin-top:50px;">
|
||||
<v-container grid-list-md pa-10 >
|
||||
<v-layout row wrap>
|
||||
<v-flex md12>
|
||||
<h1>Admin Settings</h1>
|
||||
<br><br>
|
||||
<v-expansion-panels>
|
||||
<v-expansion-panel>
|
||||
<v-expansion-panel-header>General</v-expansion-panel-header>
|
||||
<v-expansion-panel-content>
|
||||
<v-text-field
|
||||
label="Big Name"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings.name_big"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="Big Small"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['name_small']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="Slogen"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['name_slogen']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="Frontend URL"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['url']"
|
||||
></v-text-field>
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
<v-expansion-panel>
|
||||
<v-expansion-panel-header>Features</v-expansion-panel-header>
|
||||
<v-expansion-panel-content>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['registration_possible']"
|
||||
label="Registration possible"
|
||||
></v-checkbox>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['invites']"
|
||||
label="Invites possible"
|
||||
></v-checkbox>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['startpage']"
|
||||
label="Startpage"
|
||||
></v-checkbox>
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
<v-expansion-panel>
|
||||
<v-expansion-panel-header>SMTP</v-expansion-panel-header>
|
||||
<v-expansion-panel-content>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['smtp_active']"
|
||||
label="Send Mails"
|
||||
></v-checkbox>
|
||||
<v-text-field
|
||||
label="SMTP Server"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_host']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="SMTP Port"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_port']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="SMTP Secure"
|
||||
value="tls"
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_secure']"
|
||||
></v-text-field>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['smtp_smtpAuth']"
|
||||
label="SMTP Auth"
|
||||
></v-checkbox>
|
||||
<v-text-field
|
||||
label="SMTP Username"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_username']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="SMTP Password"
|
||||
value=""
|
||||
type="password"
|
||||
v-model="serverSettings['smtp_password']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="From Mail"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_from_mail']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="From Name"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_from_name']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="BCC Mail"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['smtp_bcc']"
|
||||
></v-text-field>
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
<v-expansion-panel>
|
||||
<v-expansion-panel-header>reCAPTCHA</v-expansion-panel-header>
|
||||
<v-expansion-panel-content>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['recaptcha_v2_login']"
|
||||
label="reCAPTCHA to login"
|
||||
></v-checkbox>
|
||||
<v-checkbox
|
||||
v-model="serverSettings['recaptcha_v2_register']"
|
||||
label="reCAPTCHA to register"
|
||||
></v-checkbox>
|
||||
<v-text-field
|
||||
label="Recaptcha V2 Key"
|
||||
value=""
|
||||
type="text"
|
||||
v-model="serverSettings['recaptcha_v2_key']"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
label="Recaptcha V2 Secret"
|
||||
value=""
|
||||
type="password"
|
||||
v-model="serverSettings['recaptcha_v2_secret']"
|
||||
></v-text-field>
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
</v-expansion-panels><br>
|
||||
<v-btn
|
||||
color="success"
|
||||
@click="saveSettings"
|
||||
>Save</v-btn>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import ServerService from '../../services/Server'
|
||||
import AdminService from '../../services/Admin'
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
nameBig: '',
|
||||
nameSmall: '',
|
||||
serverSettings: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
||||
},
|
||||
methods: {
|
||||
getAllSettings: function () {
|
||||
ServerService.getAllSettings().then((res) => {
|
||||
let settingsArray = {};
|
||||
for(let i = 0; i < res.data.data.length; i++) {
|
||||
settingsArray[res.data.data[i].name] = res.data.data[i].value;
|
||||
}
|
||||
this.serverSettings = settingsArray;
|
||||
});
|
||||
},
|
||||
saveSettings: function () {
|
||||
console.log(this.serverSettings);
|
||||
AdminService.saveSettings(this.serverSettings).then(() => {
|
||||
alert("Changed saved");
|
||||
}).catch(() => {
|
||||
alert("Something go wrong");
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted: function() {
|
||||
this.nameBig = this.$store.getters.getSettingValue("name_big");
|
||||
this.nameSmall = this.$store.getters.getSettingValue("name_small");
|
||||
this.getAllSettings();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.header {
|
||||
background-image: url('~@/assets/manhattan-407703_1920.jpg');
|
||||
background-repeat: no-repeat;
|
||||
margin-top: -100px;
|
||||
height: 30vh;
|
||||
text-align: center;
|
||||
}
|
||||
.header h1{
|
||||
padding-top: 200px;
|
||||
font-size: 56px !important;
|
||||
font-weight: 400;
|
||||
line-height: 32px !important;
|
||||
letter-spacing: normal !important;
|
||||
}
|
||||
.header h1 .small{
|
||||
font-weight: 300 !important;
|
||||
}
|
||||
.header h2{
|
||||
padding-top: 30px;
|
||||
font-size: 34px !important;
|
||||
font-weight: 300;
|
||||
line-height: 32px !important;
|
||||
letter-spacing: normal !important;
|
||||
}
|
||||
h1{
|
||||
font-weight: 300;
|
||||
line-height: 32px !important;
|
||||
letter-spacing: normal !important;
|
||||
}
|
||||
h2{
|
||||
font-weight: 300;
|
||||
line-height: 32px !important;
|
||||
letter-spacing: normal !important;
|
||||
}
|
||||
</style>
|
Reference in a new issue