diff --git a/backend/go.mod b/backend/go.mod
index e2254f4..d656048 100644
--- a/backend/go.mod
+++ b/backend/go.mod
@@ -3,8 +3,8 @@ module backend
go 1.24.5
require (
- gitea.tecamino.com/paadi/access-handler v1.0.29
- gitea.tecamino.com/paadi/memberDB v1.1.13
+ gitea.tecamino.com/paadi/access-handler v1.0.34
+ gitea.tecamino.com/paadi/memberDB v1.1.16
gitea.tecamino.com/paadi/tecamino-dbm v0.1.1
gitea.tecamino.com/paadi/tecamino-logger v0.2.1
github.com/gin-contrib/cors v1.7.6
@@ -14,7 +14,7 @@ require (
)
require (
- gitea.tecamino.com/paadi/dbHandler v1.1.7 // indirect
+ gitea.tecamino.com/paadi/dbHandler v1.1.10 // indirect
github.com/bytedance/sonic v1.14.0 // indirect
github.com/bytedance/sonic/loader v0.3.0 // indirect
github.com/cloudwego/base64x v0.1.6 // indirect
diff --git a/backend/go.sum b/backend/go.sum
index c7e4934..315f848 100644
--- a/backend/go.sum
+++ b/backend/go.sum
@@ -1,9 +1,9 @@
-gitea.tecamino.com/paadi/access-handler v1.0.29 h1:FZ67co/rfJffftT6xOp6psZKFtdEReaAR7PnEZi7ltI=
-gitea.tecamino.com/paadi/access-handler v1.0.29/go.mod h1:Dmme8URu3lENPhlkZcdEeIKm8VMlAgT/jNLECLLS7Vs=
-gitea.tecamino.com/paadi/dbHandler v1.1.7 h1:NqVbxbUwd7EZX6HYntyLYwwPbyTPevOhIBTFqoCVqOU=
-gitea.tecamino.com/paadi/dbHandler v1.1.7/go.mod h1:y/xn/POJg1DO++67uKvnO23lJQgh+XFQq7HZCS9Getw=
-gitea.tecamino.com/paadi/memberDB v1.1.13 h1:P5UsTt3d8829H9d3vfMAWpDN7ONqwhr8ndIuL9lBuvQ=
-gitea.tecamino.com/paadi/memberDB v1.1.13/go.mod h1:FRbhFgXq4jDpfCrCfHCVr7VcA44fR8J3XXQFeO6QSBk=
+gitea.tecamino.com/paadi/access-handler v1.0.34 h1:6P65HiusSfvgv/ezOvxSahqyRJMK9UrxtGsz6loLoUk=
+gitea.tecamino.com/paadi/access-handler v1.0.34/go.mod h1:HyMp1WvzmqLw8Ljt3r1qlF8fY+T5WFXr9Da/CTIM0H8=
+gitea.tecamino.com/paadi/dbHandler v1.1.10 h1:zZQbDTJ0bu6CIW90Zms8yYIzTLHtWPNhVKRxLUXEDuE=
+gitea.tecamino.com/paadi/dbHandler v1.1.10/go.mod h1:y/xn/POJg1DO++67uKvnO23lJQgh+XFQq7HZCS9Getw=
+gitea.tecamino.com/paadi/memberDB v1.1.16 h1:z8v0BSLaiP7pE+ad2LUycBJf8SFOOlbyASoxvrO1CpM=
+gitea.tecamino.com/paadi/memberDB v1.1.16/go.mod h1:xv2MA05nKh45NTnBQewaFeRJ2fs5dgcE7qTjmIjtqIA=
gitea.tecamino.com/paadi/tecamino-dbm v0.1.1 h1:vAq7mwUxlxJuLzCQSDMrZCwo8ky5usWi9Qz+UP+WnkI=
gitea.tecamino.com/paadi/tecamino-dbm v0.1.1/go.mod h1:+tmf1rjPaKEoNeUcr1vdtoFIFweNG3aUGevDAl3NMBk=
gitea.tecamino.com/paadi/tecamino-logger v0.2.1 h1:sQTBKYPdzn9mmWX2JXZBtGBvNQH7cuXIwsl4TD0aMgE=
diff --git a/backend/main.go b/backend/main.go
index 384f2f3..2535c6f 100644
--- a/backend/main.go
+++ b/backend/main.go
@@ -109,11 +109,8 @@ func main() {
allowOrigins = append(allowOrigins, fmt.Sprintf("%s%s:9000", httpString, localIP), fmt.Sprintf("%s%s:9500", httpString, localIP))
}
- fmt.Println(100, allowOrigins)
-
s.Routes.Use(cors.New(cors.Config{
- AllowOrigins: allowOrigins,
- //AllowOrigins: []string{"*"},
+ AllowOrigins: allowOrigins,
AllowMethods: []string{"POST", "GET", "DELETE", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Type"},
ExposeHeaders: []string{"Content-Length"},
diff --git a/src/assets/lang/de-CH.yaml b/src/assets/lang/de-CH.yaml
index e11603f..39d3771 100644
--- a/src/assets/lang/de-CH.yaml
+++ b/src/assets/lang/de-CH.yaml
@@ -140,3 +140,4 @@ Friday: Fritig
Saturday: Samstig
Sunday: Suntig
currentPassword: Aktuelles Passwort
+addFirstUser: Füeg erste Admin Benutzer hinzu
diff --git a/src/assets/lang/de-DE.yaml b/src/assets/lang/de-DE.yaml
index f4845de..6b2c564 100644
--- a/src/assets/lang/de-DE.yaml
+++ b/src/assets/lang/de-DE.yaml
@@ -140,3 +140,4 @@ Friday: Freitag
Saturday: Samstag
Sunday: Sonntag
currentPassword: Aktuelles Passwort
+addFirstUser: Füge erster Admin Benutzer hinzu
diff --git a/src/assets/lang/en-US.yaml b/src/assets/lang/en-US.yaml
index 3dd15e1..bce4d17 100644
--- a/src/assets/lang/en-US.yaml
+++ b/src/assets/lang/en-US.yaml
@@ -140,3 +140,4 @@ Friday: Friday
Saturday: Saturday
Sunday: Sunday
currentPassword: Current Password
+addFirstUser: Add first Admin User
diff --git a/src/boot/restore-route.js b/src/boot/restore-route.js
index 2dfe54f..d38742b 100644
--- a/src/boot/restore-route.js
+++ b/src/boot/restore-route.js
@@ -8,6 +8,7 @@ export default boot(async ({ router }) => {
// load user
try {
const { data } = await appApi.get('/login/me');
+ userStore.setFirstLogin(data.newDatabase);
data.role.role = data.role;
await userStore.setUser(data);
@@ -36,7 +37,7 @@ export default boot(async ({ router }) => {
// Save the route after every successful navigation
router.afterEach((to) => {
// Don't save login page as "last route"
- if (to.path !== '/login' && to.path !== '/') {
+ if (to.path !== '/login' && to.path !== '/firstlogin' && to.path !== '/') {
setLocalLastRoute(to.fullPath);
}
});
diff --git a/src/pages/FirstLogin.vue b/src/pages/FirstLogin.vue
new file mode 100644
index 0000000..00eec18
--- /dev/null
+++ b/src/pages/FirstLogin.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('save') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/router/index.ts b/src/router/index.ts
index e544b73..90402da 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -17,6 +17,8 @@ import { useUserStore } from 'src/vueLib/login/userStore';
* with the Router instance.
*/
+export let routerInstance: ReturnType;
+
export default defineRouter(function (/* { store, ssrContext } */) {
const createHistory = process.env.SERVER
? createMemoryHistory
@@ -34,10 +36,16 @@ export default defineRouter(function (/* { store, ssrContext } */) {
history: createHistory(process.env.VUE_ROUTER_BASE),
});
+ routerInstance = Router;
+
Router.beforeEach((to, from, next) => {
const userStore = useUserStore();
const isLoggedIn = userStore.isAuthenticated;
- if (to.meta.requiresAuth && !isLoggedIn) {
+ if (!userStore.$state.firstLogin && to.path === '/firstlogin') {
+ next('/login');
+ } else if (userStore.$state.firstLogin && to.path !== '/firstlogin') {
+ next('/firstlogin');
+ } else if (to.meta.requiresAuth && !isLoggedIn) {
next('/login');
} else if (
to.meta.requiresAdmin &&
diff --git a/src/router/routes.ts b/src/router/routes.ts
index d6af6e2..936e5f4 100644
--- a/src/router/routes.ts
+++ b/src/router/routes.ts
@@ -9,6 +9,10 @@ const routes: RouteRecordRaw[] = [
path: '',
component: () => import('pages/LoginPage.vue'),
},
+ {
+ path: 'firstlogin',
+ component: () => import('pages/FirstLogin.vue'),
+ },
{
path: 'login',
component: () => import('pages/LoginPage.vue'),
diff --git a/src/vueLib/login/useLogin.ts b/src/vueLib/login/useLogin.ts
index f5bc6c8..210f5ea 100644
--- a/src/vueLib/login/useLogin.ts
+++ b/src/vueLib/login/useLogin.ts
@@ -4,6 +4,7 @@ import { useNotify } from '../general/useNotify';
import type { Settings } from '../models/settings';
import { appName, logo } from '../models/settings';
import { clearLocalStorage, setLocalSettings } from 'src/localstorage/localStorage';
+import { routerInstance } from 'src/router';
const refreshTime = 10000;
let intervalId: ReturnType | null = null;
@@ -55,6 +56,7 @@ export function useLogin() {
userStore.clearUser();
clearLocalStorage();
stopRefreshInterval();
+ await routerInstance.push('/login');
}
async function refresh() {
diff --git a/src/vueLib/login/userStore.ts b/src/vueLib/login/userStore.ts
index 67a80e7..e2b68dd 100644
--- a/src/vueLib/login/userStore.ts
+++ b/src/vueLib/login/userStore.ts
@@ -12,6 +12,7 @@ const { NotifyResponse } = useNotify();
export const useUserStore = defineStore('user', {
state: (): UserState => ({
user: null,
+ firstLogin: false,
}),
getters: {
isAuthenticated: (state: UserState): boolean => {
@@ -42,6 +43,9 @@ export const useUserStore = defineStore('user', {
},
},
actions: {
+ setFirstLogin(b: boolean) {
+ this.firstLogin = b;
+ },
async setUser(user: User) {
await appApi
.get('roles?role=' + user.role?.role)
diff --git a/src/vueLib/models/user.ts b/src/vueLib/models/user.ts
index 25dce0d..efb1193 100644
--- a/src/vueLib/models/user.ts
+++ b/src/vueLib/models/user.ts
@@ -8,8 +8,10 @@ export interface User {
role: Role;
permissions?: Permissions;
settings?: Settings;
+ newDatabase?: boolean;
}
export interface UserState {
user: User | null;
+ firstLogin: boolean;
}
diff --git a/src/vueLib/tables/users/UserTable.vue b/src/vueLib/tables/users/UserTable.vue
index 47bd32d..be67121 100644
--- a/src/vueLib/tables/users/UserTable.vue
+++ b/src/vueLib/tables/users/UserTable.vue
@@ -227,16 +227,12 @@ function openPwdDialog(user: User) {
//change password api request
async function changePassword(user: User) {
- console.log(8, user);
if (user.password == user.newPassword) {
NotifyResponse(i18n.global.t('samePasswordEntered'), 'error');
return;
}
- await appApi
- .post('/users/new/password', user)
- .then((resp) => console.log(67, resp))
- .catch((err) => console.error(err));
+ await appApi.post('/users/new/password', user).catch((err) => console.error(err));
changePwdDialog.value.close();
}