Login für Tippen.vue hinzugefügt

This commit is contained in:
R40fendt
2025-07-03 21:42:37 +02:00
parent 4001879c70
commit 1c007561dc
6 changed files with 185 additions and 20 deletions

37
package-lock.json generated
View File

@@ -10,6 +10,7 @@
"dependencies": { "dependencies": {
"@tauri-apps/api": "^2", "@tauri-apps/api": "^2",
"@tauri-apps/plugin-opener": "^2", "@tauri-apps/plugin-opener": "^2",
"crypto-js": "^4.2.0",
"embla-carousel-vue": "^8.6.0", "embla-carousel-vue": "^8.6.0",
"jarallax": "^2.2.1", "jarallax": "^2.2.1",
"jquery": "^3.7.1", "jquery": "^3.7.1",
@@ -1260,9 +1261,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -1312,6 +1313,12 @@
"node": ">=16" "node": ">=16"
} }
}, },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
"license": "MIT"
},
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -1413,9 +1420,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/fdir": { "node_modules/fdir": {
"version": "6.4.3", "version": "6.4.6",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
@@ -2126,13 +2133,13 @@
} }
}, },
"node_modules/tinyglobby": { "node_modules/tinyglobby": {
"version": "0.2.12", "version": "0.2.14",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fdir": "^6.4.3", "fdir": "^6.4.4",
"picomatch": "^4.0.2" "picomatch": "^4.0.2"
}, },
"engines": { "engines": {
@@ -2177,18 +2184,18 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "6.3.0", "version": "6.3.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.0.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
"integrity": "sha512-9aC0n4pr6hIbvi1YOpFjwQ+QOTGssvbJKoeYkuHHGWwlXfdxQlI8L2qNMo9awEEcCPSiS+5mJZk5jH1PAqoDeQ==", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"esbuild": "^0.25.0", "esbuild": "^0.25.0",
"fdir": "^6.4.3", "fdir": "^6.4.4",
"picomatch": "^4.0.2", "picomatch": "^4.0.2",
"postcss": "^8.5.3", "postcss": "^8.5.3",
"rollup": "^4.34.9", "rollup": "^4.34.9",
"tinyglobby": "^0.2.12" "tinyglobby": "^0.2.13"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"

View File

@@ -14,6 +14,7 @@
"dependencies": { "dependencies": {
"@tauri-apps/api": "^2", "@tauri-apps/api": "^2",
"@tauri-apps/plugin-opener": "^2", "@tauri-apps/plugin-opener": "^2",
"crypto-js": "^4.2.0",
"embla-carousel-vue": "^8.6.0", "embla-carousel-vue": "^8.6.0",
"jarallax": "^2.2.1", "jarallax": "^2.2.1",
"jquery": "^3.7.1", "jquery": "^3.7.1",

View File

@@ -0,0 +1,77 @@
<script lang="ts">
import ritzenbergenlib from "../../ritzenbergenlib";
export default {
props: ["token"],
data() {
return {
spieltag: "",
vmodelspieltag: "",
};
},
asyncComputed: {
userinfo: {
get() {
if (this.token == null) return null;
return fetch(
ritzenbergenlib.RitzenbergenLib.api(
"/bulitipp/userinfo.php?token=" + this.token
)
)
.then((response) => response.json())
.catch((error) => {
console.error("Error fetching user info:", error);
return null;
});
},
default: null,
},
},
emits: ["logout"]
};
</script>
<template>
<div>
<div v-if="(spieltag == '' || spieltag == null) && userinfo != null">
<h1>Moin {{ userinfo.username }}!</h1>
<br /><br />
<form @submit.prevent="spieltag = parseInt(vmodelspieltag)">
<input
type="text"
v-model="vmodelspieltag"
placeholder="Spieltag"
required
/>
<input type="submit" value="Tippen" />
<br><br>
<input type="button" value="Ausloggen" @click="$emit('logout')" />
</form>
</div>
<div class="tippenEintragen" v-else>
<form @submit.prevent="" id="mainform">
<span class="paarung">
<img src="./get-buli-image.php?team=Bremen" alt="" />
<span class="team-name">Heim</span>
<input type="number" min="0" class="score" required />
<span class="vs"></span>
<input type="number" min="0" class="score" required />
<span class="team-name">Gast</span
><img src="./get-buli-image.php?team=Bremen" alt="" /><br />
</span>
<!--<h1>Deadline überschritten!</h1>
<h1>
BuLi-Tipp ist noch nicht für diesen Spieltag vorbereitet worden...
Versuch es wannanders nochmal!
</h1>-->
<input type="submit" value="Tippen" />
<br><br>
<input type="button" value="Abbrechen" @click="spieltag=''" />
</form>
</div>
</div>
</template>

View File

@@ -0,0 +1,40 @@
<script lang="ts">
import CryptoJS from 'crypto-js';
export default {
data() {
return {
kuerzel: "",
password: ""
}
},
methods: {
login(){
this.$emit("login", this.kuerzel, CryptoJS.SHA256(this.password).toString(CryptoJS.enc.Hex));
this.kuerzel="";
this.password="";
}
},
props: {
wrongpassword: {
type: Boolean,
default: false
}
},
emits: ["login"]
}
</script>
<template>
<div>
<h1>Einloggen</h1>
<form @submit.prevent="login">
<input type="text" placeholder="Kürzel" v-model="kuerzel" required />
<input type="password" placeholder="Passwort" v-model="password" required />
<input type="submit" value="Einloggen">
<div v-if="wrongpassword">
Falsches Passwort oder Kürzel! Bitte versuche es erneut.
</div>
</form>
</div>
</template>

1
src/crypto-js.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
declare module 'crypto-js';

View File

@@ -10,6 +10,8 @@ import RitzenbergenLib from "../ritzenbergenlib.ts";
import SpieltagSumme from "../ritzenbergenlib.ts"; import SpieltagSumme from "../ritzenbergenlib.ts";
import Loading from "../components/bulitipp/Loading.vue"; import Loading from "../components/bulitipp/Loading.vue";
import $ from "jquery"; import $ from "jquery";
import Tippen from "../components/bulitipp/Tippen.vue";
import TippenEinloggen from "../components/bulitipp/TippenEinloggen.vue";
export default { export default {
components: { components: {
@@ -20,7 +22,9 @@ export default {
Rangliste, Rangliste,
Paarungsergebnisse, Paarungsergebnisse,
Tabelle, Tabelle,
Loading Loading,
Tippen,
TippenEinloggen
}, },
asyncComputed: { asyncComputed: {
users: { users: {
@@ -134,6 +138,25 @@ export default {
}, },
watch: ["maxspieltag"], watch: ["maxspieltag"],
default: [] default: []
},
token: {
get(){
return fetch(RitzenbergenLib.RitzenbergenLib.api("/bulitipp/login.php?kuerzel="+this.kuerzel+"&password="+this.password))
.then((response)=>response.text())
.then((response)=>response=="Benutzer nicht gefunden"?null:response)
.then((response)=>{
if(response == "Falsches Passwort") {
this.wrongpassword = true;
return null;
} else {
this.wrongpassword = false;
return response;
}
});
},
default: null,
watch: ["kuerzel", "password"],
} }
}, },
computed: { computed: {
@@ -157,12 +180,26 @@ export default {
update(){ update(){
location.reload(); location.reload();
}, },
login(kuerzel, password){
console.log("Login");
this.kuerzel = kuerzel;
this.password = password;
},
logout(){
this.token=null;
this.kuerzel = "";
this.password = "";
this.wrongpassword = false;
}
}, },
data(){ data(){
return { return {
tippenoffen: false, tippenoffen: false,
debug: false debug: false,
amtippen: false,
kuerzel: "",
password: "",
wrongpassword: false
} }
} }
}; };
@@ -196,10 +233,12 @@ export default {
</section> </section>
<Modal v-show="tippenoffen" @closemodal="tippenoffen = false"> <Modal v-show="tippenoffen" @closemodal="tippenoffen = false">
<h1>Test</h1> <Tippen v-show="token!=null" :token="token" @logout="logout"/>
<TippenEinloggen v-show="token==null" @login="login" :wrongpassword="wrongpassword" />
</Modal> </Modal>
<Uebersicht :users="users" /> <Uebersicht :users="users" />
<!-- Rangliste --> <!-- Rangliste -->