diff --git a/.env b/.env
new file mode 100644
index 0000000..bbd01ed
--- /dev/null
+++ b/.env
@@ -0,0 +1 @@
+VITE_BACKEND_URL=https://api-mainframe.zac.ovh
\ No newline at end of file
diff --git a/faviconData.json b/faviconData.json
new file mode 100644
index 0000000..8103423
--- /dev/null
+++ b/faviconData.json
@@ -0,0 +1 @@
+{"result":{"status":"success"},"favicon":{"package_url":"https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/favicon_package_v0.16.zip","files_urls":["https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-144x144.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-192x192.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-256x256.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-36x36.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-384x384.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-48x48.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-512x512.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-72x72.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/android-chrome-96x96.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-120x120-precomposed.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-120x120.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-152x152-precomposed.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-152x152.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-180x180-precomposed.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-180x180.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-60x60-precomposed.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-60x60.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-76x76-precomposed.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-76x76.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon-precomposed.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/apple-touch-icon.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/browserconfig.xml","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/favicon-16x16.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/favicon-32x32.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/favicon.ico","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/html_code.html","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/mstile-144x144.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/mstile-150x150.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/mstile-310x150.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/mstile-310x310.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/mstile-70x70.png","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/safari-pinned-tab.svg","https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/package_files/site.webmanifest"],"html_code":" \n \n \n \n \n \n \n \n \n \n \n ","compression":"false","overlapping_markups":["link[rel=\"apple-touch-icon\"]","meta[name=\"apple-mobile-web-app-title\"]","link[rel=\"shortcut\"]","link[rel=\"shortcut icon\"]","link[rel=\"icon\",sizes=\"16x16\"]","link[rel=\"icon\",sizes=\"32x32\"]","meta[name=\"msapplication-TileColor\"]","meta[name=\"msapplication-TileImage\"]","meta[name=\"msapplication-config\"]","meta[name=\"application-name\"]","link[rel=\"manifest\"]","meta[name=\"theme-color\"]","link[rel=\"mask-icon\"]"]},"files_location":{"type":"path","path":"public/"},"preview_picture_url":"https://realfavicongenerator.net/files/8ee0546862cb24d278938944f4e53305d2eabbaa/favicon_preview.png","version":"0.16"}
\ No newline at end of file
diff --git a/faviconDescription.json b/faviconDescription.json
new file mode 100644
index 0000000..7ffc7b0
--- /dev/null
+++ b/faviconDescription.json
@@ -0,0 +1,65 @@
+{
+ "masterPicture": "public/mainframe.png",
+ "iconsPath": "public/",
+ "design": {
+ "ios": {
+ "pictureAspect": "noChange",
+ "assets": {
+ "ios6AndPriorIcons": false,
+ "ios7AndLaterIcons": true,
+ "precomposedIcons": true,
+ "declareOnlyDefaultIcon": true
+ },
+ "appName": "MainFrame"
+ },
+ "desktopBrowser": {
+ "design": "background",
+ "backgroundColor": "#333333",
+ "backgroundRadius": 0.3,
+ "imageScale": 0.9
+ },
+ "windows": {
+ "pictureAspect": "noChange",
+ "backgroundColor": "#333333",
+ "onConflict": "override",
+ "assets": {
+ "windows80Ie10Tile": true,
+ "windows10Ie11EdgeTiles": {
+ "small": true,
+ "medium": true,
+ "big": true,
+ "rectangle": true
+ }
+ },
+ "appName": "MainFrame"
+ },
+ "androidChrome": {
+ "pictureAspect": "noChange",
+ "themeColor": "#333333",
+ "manifest": {
+ "name": "MainFrame",
+ "startUrl": "https://mainframe.zac.ovh",
+ "display": "standalone",
+ "orientation": "notSet",
+ "onConflict": "override",
+ "declared": true
+ },
+ "assets": {
+ "legacyIcon": false,
+ "lowResolutionIcons": true
+ }
+ },
+ "safariPinnedTab": {
+ "pictureAspect": "blackAndWhite",
+ "threshold": 23.90625,
+ "themeColor": "#333333"
+ }
+ },
+ "settings": {
+ "scalingAlgorithm": "Mitchell",
+ "errorOnImageTooSmall": false,
+ "readmeFile": false,
+ "htmlCodeFile": true,
+ "usePathAsIs": false
+ }
+}
\ No newline at end of file
diff --git a/index.html b/index.html
index a888544..6666f00 100644
--- a/index.html
+++ b/index.html
@@ -1,9 +1,23 @@
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Vite App
diff --git a/package-lock.json b/package-lock.json
index e16be2e..3761cb8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
- "name": "zac-mainframe",
- "version": "0.0.1",
+ "name": "zac-mainframe-front",
+ "version": "0.0.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "zac-mainframe",
- "version": "0.0.1",
+ "name": "zac-mainframe-front",
+ "version": "0.0.2",
"dependencies": {
"@fortawesome/fontawesome-free": "^6.6.0",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
@@ -14,15 +14,18 @@
"@fortawesome/free-regular-svg-icons": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/vue-fontawesome": "^3.0.8",
+ "axios": "^1.7.4",
+ "dotenv": "^16.4.5",
"js-confetti": "^0.12.0",
+ "pinia": "^2.2.2",
"vue": "^3.4.29",
"vue-cookies": "^1.8.4",
+ "vue-i18n": "^9.14.0",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4",
- "@types/node": "^20.14.5",
"@vitejs/plugin-vue": "^5.0.5",
"@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^13.0.0",
@@ -696,6 +699,50 @@
"dev": true,
"license": "BSD-3-Clause"
},
+ "node_modules/@intlify/core-base": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
+ "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/message-compiler": "9.14.0",
+ "@intlify/shared": "9.14.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@intlify/message-compiler": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
+ "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/shared": "9.14.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@intlify/shared": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
+ "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
@@ -999,13 +1046,15 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "20.14.15",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz",
- "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==",
+ "version": "20.16.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
+ "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
"dev": true,
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.19.2"
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
@@ -1523,6 +1572,23 @@
"node": ">=8"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1607,6 +1673,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/computeds": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz",
@@ -1687,6 +1765,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -1713,6 +1800,18 @@
"node": ">=6.0.0"
}
},
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
"node_modules/entities": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
@@ -2157,6 +2256,40 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2554,6 +2687,27 @@
"node": ">=8.6"
}
},
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -2823,6 +2977,58 @@
"node": ">=0.10"
}
},
+ "node_modules/pinia": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.2.tgz",
+ "integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.4.0",
+ "typescript": ">=4.4.4",
+ "vue": "^2.6.14 || ^3.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/postcss": {
"version": "8.4.41",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
@@ -2904,6 +3110,12 @@
"node": ">=6.0.0"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -3258,11 +3470,13 @@
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "peer": true
},
"node_modules/uri-js": {
"version": "4.4.1",
@@ -3400,6 +3614,26 @@
"eslint": ">=6.0.0"
}
},
+ "node_modules/vue-i18n": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.0.tgz",
+ "integrity": "sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/core-base": "9.14.0",
+ "@intlify/shared": "9.14.0",
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
"node_modules/vue-router": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz",
diff --git a/package.json b/package.json
index 23e2250..b258246 100644
--- a/package.json
+++ b/package.json
@@ -19,15 +19,18 @@
"@fortawesome/free-regular-svg-icons": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/vue-fontawesome": "^3.0.8",
+ "axios": "^1.7.4",
+ "dotenv": "^16.4.5",
"js-confetti": "^0.12.0",
+ "pinia": "^2.2.2",
"vue": "^3.4.29",
"vue-cookies": "^1.8.4",
+ "vue-i18n": "^9.14.0",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4",
- "@types/node": "^20.14.5",
"@vitejs/plugin-vue": "^5.0.5",
"@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^13.0.0",
diff --git a/public/android-chrome-144x144.png b/public/android-chrome-144x144.png
new file mode 100644
index 0000000..df0691d
Binary files /dev/null and b/public/android-chrome-144x144.png differ
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 0000000..e7a1465
Binary files /dev/null and b/public/android-chrome-192x192.png differ
diff --git a/public/android-chrome-256x256.png b/public/android-chrome-256x256.png
new file mode 100644
index 0000000..c9eee26
Binary files /dev/null and b/public/android-chrome-256x256.png differ
diff --git a/public/android-chrome-36x36.png b/public/android-chrome-36x36.png
new file mode 100644
index 0000000..91caa0d
Binary files /dev/null and b/public/android-chrome-36x36.png differ
diff --git a/public/android-chrome-384x384.png b/public/android-chrome-384x384.png
new file mode 100644
index 0000000..41c5697
Binary files /dev/null and b/public/android-chrome-384x384.png differ
diff --git a/public/android-chrome-48x48.png b/public/android-chrome-48x48.png
new file mode 100644
index 0000000..e2ecce3
Binary files /dev/null and b/public/android-chrome-48x48.png differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 0000000..cf43012
Binary files /dev/null and b/public/android-chrome-512x512.png differ
diff --git a/public/android-chrome-72x72.png b/public/android-chrome-72x72.png
new file mode 100644
index 0000000..e68da12
Binary files /dev/null and b/public/android-chrome-72x72.png differ
diff --git a/public/android-chrome-96x96.png b/public/android-chrome-96x96.png
new file mode 100644
index 0000000..9d6250a
Binary files /dev/null and b/public/android-chrome-96x96.png differ
diff --git a/public/apple-touch-icon-120x120-precomposed.png b/public/apple-touch-icon-120x120-precomposed.png
new file mode 100644
index 0000000..37863cb
Binary files /dev/null and b/public/apple-touch-icon-120x120-precomposed.png differ
diff --git a/public/apple-touch-icon-120x120.png b/public/apple-touch-icon-120x120.png
new file mode 100644
index 0000000..46ce95c
Binary files /dev/null and b/public/apple-touch-icon-120x120.png differ
diff --git a/public/apple-touch-icon-152x152-precomposed.png b/public/apple-touch-icon-152x152-precomposed.png
new file mode 100644
index 0000000..ce417cc
Binary files /dev/null and b/public/apple-touch-icon-152x152-precomposed.png differ
diff --git a/public/apple-touch-icon-152x152.png b/public/apple-touch-icon-152x152.png
new file mode 100644
index 0000000..e3b306a
Binary files /dev/null and b/public/apple-touch-icon-152x152.png differ
diff --git a/public/apple-touch-icon-180x180-precomposed.png b/public/apple-touch-icon-180x180-precomposed.png
new file mode 100644
index 0000000..035a8a7
Binary files /dev/null and b/public/apple-touch-icon-180x180-precomposed.png differ
diff --git a/public/apple-touch-icon-180x180.png b/public/apple-touch-icon-180x180.png
new file mode 100644
index 0000000..45cb9d8
Binary files /dev/null and b/public/apple-touch-icon-180x180.png differ
diff --git a/public/apple-touch-icon-60x60-precomposed.png b/public/apple-touch-icon-60x60-precomposed.png
new file mode 100644
index 0000000..c1456a9
Binary files /dev/null and b/public/apple-touch-icon-60x60-precomposed.png differ
diff --git a/public/apple-touch-icon-60x60.png b/public/apple-touch-icon-60x60.png
new file mode 100644
index 0000000..098b92d
Binary files /dev/null and b/public/apple-touch-icon-60x60.png differ
diff --git a/public/apple-touch-icon-76x76-precomposed.png b/public/apple-touch-icon-76x76-precomposed.png
new file mode 100644
index 0000000..aa0f4e4
Binary files /dev/null and b/public/apple-touch-icon-76x76-precomposed.png differ
diff --git a/public/apple-touch-icon-76x76.png b/public/apple-touch-icon-76x76.png
new file mode 100644
index 0000000..8175cc9
Binary files /dev/null and b/public/apple-touch-icon-76x76.png differ
diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000..ead2b4b
Binary files /dev/null and b/public/apple-touch-icon-precomposed.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..49ccbba
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/browserconfig.xml b/public/browserconfig.xml
new file mode 100644
index 0000000..eb6e265
--- /dev/null
+++ b/public/browserconfig.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ #333333
+
+
+
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 0000000..e4fb6e7
Binary files /dev/null and b/public/favicon-16x16.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 0000000..4056af5
Binary files /dev/null and b/public/favicon-32x32.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
index df36fcf..9a286ab 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/html_code.html b/public/html_code.html
new file mode 100644
index 0000000..2721a74
--- /dev/null
+++ b/public/html_code.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..1ff2f06
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,20 @@
+
+
+
+ Vite App
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/mainframe.png b/public/mainframe.png
new file mode 100644
index 0000000..74b0e91
Binary files /dev/null and b/public/mainframe.png differ
diff --git a/public/mstile-144x144.png b/public/mstile-144x144.png
new file mode 100644
index 0000000..df437a0
Binary files /dev/null and b/public/mstile-144x144.png differ
diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png
new file mode 100644
index 0000000..e2f2ae6
Binary files /dev/null and b/public/mstile-150x150.png differ
diff --git a/public/mstile-310x150.png b/public/mstile-310x150.png
new file mode 100644
index 0000000..c857d6c
Binary files /dev/null and b/public/mstile-310x150.png differ
diff --git a/public/mstile-310x310.png b/public/mstile-310x310.png
new file mode 100644
index 0000000..3e9364a
Binary files /dev/null and b/public/mstile-310x310.png differ
diff --git a/public/mstile-70x70.png b/public/mstile-70x70.png
new file mode 100644
index 0000000..46754ba
Binary files /dev/null and b/public/mstile-70x70.png differ
diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg
new file mode 100644
index 0000000..884a5ad
--- /dev/null
+++ b/public/safari-pinned-tab.svg
@@ -0,0 +1,145 @@
+
+
+
+
+Created by potrace 1.14, written by Peter Selinger 2001-2017
+
+
+
+
+
+
diff --git a/public/site.webmanifest b/public/site.webmanifest
new file mode 100644
index 0000000..cec5990
--- /dev/null
+++ b/public/site.webmanifest
@@ -0,0 +1,55 @@
+{
+ "name": "MainFrame",
+ "short_name": "MainFrame",
+ "icons": [
+ {
+ "src": "android-chrome-36x36.png",
+ "sizes": "36x36",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-48x48.png",
+ "sizes": "48x48",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-72x72.png",
+ "sizes": "72x72",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-96x96.png",
+ "sizes": "96x96",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-144x144.png",
+ "sizes": "144x144",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-384x384.png",
+ "sizes": "384x384",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#333333",
+ "background_color": "#333333",
+ "start_url": "https://mainframe.zac.ovh",
+ "display": "standalone"
+}
diff --git a/src/App.vue b/src/App.vue
index 8c82a5e..401d55e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,5 +1,20 @@
@@ -12,6 +27,7 @@ import { RouterView, RouterLink } from 'vue-router'
Index
|
Discord
+
@@ -50,6 +66,10 @@ nav * {
margin-left: 20px;
}
+nav img {
+ border-radius: 20%;
+}
+
h1 {
text-align: center;
left: 0;
diff --git a/src/assets/base.css b/src/assets/base.css
index 8816868..35aa4ea 100644
--- a/src/assets/base.css
+++ b/src/assets/base.css
@@ -60,6 +60,7 @@
body {
min-height: 100vh;
+ margin: 0;
color: var(--color-text);
background: var(--color-background);
transition:
diff --git a/src/assets/main.css b/src/assets/main.css
index f3eb420..6050edf 100644
--- a/src/assets/main.css
+++ b/src/assets/main.css
@@ -3,8 +3,10 @@
/* VUE STYLE */
#app {
/* max-width: 1280px; */
- margin: 0 auto;
- padding: 2rem;
+ /* margin: 0 auto; */
+ /* padding: 2rem;*/
+ height: inherit;
+ width: inherit;
font-weight: normal;
}
@@ -29,8 +31,8 @@ a,
}
#app {
- display: grid;
- grid-template-columns: 1fr 1fr;
+ /* display: grid; */
+ /* grid-template-columns: 1fr 1fr; */
padding: 0 2rem;
}
}
@@ -61,7 +63,10 @@ a,
}
.main {
- margin-left: 200px; /* 200px is the width of the header vl position */
+ margin-top: 60px; /* 60px is the height of the header navbar */
+ height: calc(100% - 60px);
+ margin-left: 200px; /* 200px is the width of the header vl position (or sidebar) */
+ width: calc(100% - 200px);
/* padding: 0px 10px; */
}
diff --git a/src/main.ts b/src/main.ts
index 12249fc..47a738b 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -3,6 +3,8 @@ import { library } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { fab } from '@fortawesome/free-brands-svg-icons'
import { createApp } from 'vue'
+import { createPinia } from 'pinia'
+import { createI18n } from 'vue-i18n'
import cookies from 'vue-cookies'
import App from './App.vue'
@@ -12,6 +14,8 @@ import './assets/main.css'
library.add(fas, fab)
createApp(App)
+ .use(createPinia())
+ .use(createI18n({}))
.use(router)
.use(cookies)
.component('font-awesome-icon', FontAwesomeIcon)
diff --git a/src/router/index.ts b/src/router/index.ts
index 77c4687..4795fc8 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,6 +1,4 @@
import { createRouter, createWebHistory } from 'vue-router'
-import { inject } from 'vue'
-import type { VueCookies } from 'vue-cookies'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
@@ -9,6 +7,7 @@ const router = createRouter({
path: '/',
name: 'index',
component: () => import('../views/IndexView.vue'),
+ meta: { title: 'MainFrame' },
children: [
{
path: '',
@@ -26,7 +25,7 @@ const router = createRouter({
path: '/discord',
name: 'discord',
component: () => import('../views/DiscordView.vue'),
- meta: { discordAuth: true },
+ meta: { title: 'MainFrame | Discord', discordAuth: true },
children: [
{
path: '',
@@ -43,15 +42,9 @@ const router = createRouter({
]
})
-router.beforeEach((to) => {
- const $cookies = inject('$cookies')
- if (!$cookies) return console.log('Error: $cookies is not injected')
-
- if (to.meta.discordAuth && !$cookies.isKey('DISCORD_CODE')) {
- window.location.href =
- 'https://discord.com/oauth2/authorize?client_id=1274800564449841172&response_type=code&redirect_uri=https%3A%2F%2Fmainframe.zac.ovh%2Fdiscord&scope=identify'
- return
- }
+router.beforeEach((to, from, next) => {
+ document.title = to.meta.title as string
+ next()
})
export default router
diff --git a/src/utils/discord.ts b/src/utils/discord.ts
new file mode 100644
index 0000000..9386b61
--- /dev/null
+++ b/src/utils/discord.ts
@@ -0,0 +1,58 @@
+import axios from 'axios'
+
+export interface User {
+ id: string
+ username: string
+ discriminator: string
+ global_name?: string
+ avatar?: string
+ bot?: boolean
+ system?: boolean
+ mfa_enabled?: boolean
+ banner?: string
+ accent_color?: number
+ locale?: string
+ verified?: boolean
+ email?: string
+ flags?: number
+ premium_type?: number
+ public_flags?: number
+ avatar_decoration_data?: {
+ sku_id: number
+ asset: string
+ }
+}
+
+// Fonction pour rediriger vers Discord pour l'authentification
+export function login() {
+ window.location.href = import.meta.env.VITE_BACKEND_URL + '/discord/auth/redirect';
+}
+
+// Fonction pour se déconnecter
+export function logout(user_value: User | null) {
+ user_value = null
+ return user_value
+ // Effectue une requête à ton API pour déconnecter l'utilisateur, supprimer la session, etc.
+ // Ou simplement rediriger vers une page d'accueil sans session
+}
+
+export async function checkBots() {
+ try {
+ const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/bots', { withCredentials: true })
+ return response.data
+ } catch (err) { return null }
+}
+
+export async function checkUser() {
+ try {
+ const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user', { withCredentials: true })
+ return response.data
+ } catch (err) { return null }
+}
+
+export async function checkUserGuilds() {
+ try {
+ const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user/guilds', { withCredentials: true })
+ return response.data
+ } catch (err) { return null }
+}
\ No newline at end of file
diff --git a/src/views/Discord/DashboardView.vue b/src/views/Discord/DashboardView.vue
index 5d0acfc..eff111c 100644
--- a/src/views/Discord/DashboardView.vue
+++ b/src/views/Discord/DashboardView.vue
@@ -1,5 +1,28 @@
+
+
-
Test Dashboard Discord
+
+
Test Dashboard Discord
+
+
Vous êtes connecté en tant que {{ user.global_name }}.
+
Vous avez l'ID {{ user.id }}.
+
+
Vous n'êtes pas connecté.
+
+
+
Bots
+
+
{{ bot.username }}
+
{{ bot.id }}
+
+
\ No newline at end of file
diff --git a/src/views/DiscordView.vue b/src/views/DiscordView.vue
index a886c45..3494762 100644
--- a/src/views/DiscordView.vue
+++ b/src/views/DiscordView.vue
@@ -1,13 +1,24 @@
@@ -15,6 +26,8 @@ if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/
Dashboard
Config
+ Se connecter
+ Se déconnecter
@@ -23,4 +36,11 @@ if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/
-
\ No newline at end of file
+
+
+
\ No newline at end of file