Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 2 additions & 12 deletions .github/workflows/build-electron.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
node-version: '24.15.0'
cache: 'npm'
cache-dependency-path: 'electron/package-lock.json'

Expand All @@ -87,27 +87,17 @@ jobs:
cd electron
npm ci

- name: Package Electron app
run: |
cd electron
npm run package

- name: Make installers
run: |
cd electron
npm run make

- name: List output files (debug)
run: |
echo "Contents of electron/out/make:"
ls -R electron/out/make/
shell: bash

- name: Upload installers
uses: actions/upload-artifact@v4
with:
name: electron-${{ matrix.platform }}-installers
path: ${{ matrix.artifact_patterns }}
if-no-files-found: error
retention-days: 7

upload-electron-to-release:
Expand Down
564 changes: 283 additions & 281 deletions client-v3/package-lock.json

Large diffs are not rendered by default.

24 changes: 12 additions & 12 deletions client-v3/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "client-v3",
"version": "0.30.3",
"version": "0.30.4",
"description": "DigiScript front end (Vue 3)",
"author": "DreamTeamProd",
"private": true,
Expand Down Expand Up @@ -42,7 +42,7 @@
"d3-zoom": "^3.0.0",
"deep-object-diff": "1.1.9",
"dompurify": "^3.4.7",
"fuse.js": "^7.3.0",
"fuse.js": "^7.4.1",
"lodash": "^4.18.1",
"loglevel": "^1.9.2",
"marked": "^18.0.4",
Expand All @@ -51,7 +51,7 @@
"splitpanes": "^4.1.2",
"vue": "^3.5.35",
"vue-multiselect": "^3.5.0",
"vue-router": "^5.0.7",
"vue-router": "^5.1.0",
"vue-toast-notification": "^3.1.3"
},
"devDependencies": {
Expand All @@ -61,27 +61,27 @@
"@iconify-json/mdi": "^1.2.3",
"@types/lodash": "~4.17.24",
"@types/node": ">=22.12.0",
"@typescript-eslint/eslint-plugin": "^8.60.0",
"@typescript-eslint/parser": "^8.60.0",
"@typescript-eslint/eslint-plugin": "^8.60.1",
"@typescript-eslint/parser": "^8.60.1",
"@vitejs/plugin-vue": "^6.0.7",
"@vitest/ui": "^4.1.7",
"@vitest/ui": "^4.1.8",
"@vue/test-utils": "^2.4.10",
"eslint": "^10.4.0",
"eslint": "^10.4.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-prettier": "^5.5.6",
"eslint-plugin-vue": "^10.9.1",
"globals": "^17.6.0",
"jiti": "^2.7.0",
"jsdom": "^29.1.1",
"prettier": "^3.8.3",
"sass": "1.100.0",
"typescript": "^6.0.3",
"typescript-eslint": "^8.60.0",
"typescript-eslint": "^8.60.1",
"unplugin-icons": "^23.0.1",
"unplugin-vue-components": "^32.1.0",
"vite": "^8.0.14",
"vitest": "^4.1.7",
"vue-eslint-parser": "^10.4.0",
"vite": "^8.0.16",
"vitest": "^4.1.8",
"vue-eslint-parser": "^10.4.1",
"@playwright/test": "^1.60.0"
},
"browserslist": [
Expand Down
5 changes: 3 additions & 2 deletions client-v3/src/components/user/CreateUser.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
type="password"
:state="fieldState('password')"
/>
<BFormInvalidFeedback>Required, at least 6 characters.</BFormInvalidFeedback>
<BFormInvalidFeedback>Required, between 6 and 72 characters.</BFormInvalidFeedback>
</BFormGroup>

<BFormGroup label="Confirm Password" label-for="confirm-password-input" label-cols="4">
Expand All @@ -45,6 +45,7 @@
import { ref, computed } from 'vue';
import { useVuelidate } from '@vuelidate/core';
import { required, minLength, sameAs, helpers } from '@vuelidate/validators';
import { maxPasswordByteLength } from '@/js/customValidators';
import { storeToRefs } from 'pinia';
import { useUserStore } from '@/stores/user';

Expand Down Expand Up @@ -78,7 +79,7 @@ const passwordRef = computed(() => state.value.password);

const rules = {
username: { required, isUsernameUnique },
password: { required, minLength: minLength(6) },
password: { required, minLength: minLength(6), maxPasswordByteLength },
confirmPassword: { required, sameAs: sameAs(passwordRef) },
};

Expand Down
4 changes: 2 additions & 2 deletions client-v3/src/components/user/settings/ChangePassword.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
id="new-password-input-group"
label="New Password"
label-for="new-password-input"
description="Minimum 6 characters"
description="6–72 characters"
>
<BFormInput
id="new-password-input"
Expand All @@ -36,7 +36,7 @@
autocomplete="new-password"
/>
<BFormInvalidFeedback id="new-password-feedback">
This is a required field and must be at least 6 characters.
This is a required field and must be between 6 and 72 characters.
</BFormInvalidFeedback>
</BFormGroup>

Expand Down
3 changes: 2 additions & 1 deletion client-v3/src/composables/usePasswordValidation.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { computed } from 'vue';
import { required, minLength, sameAs } from '@vuelidate/validators';
import { maxPasswordByteLength } from '@/js/customValidators';

export function usePasswordValidation() {
const passwordRules = { required, minLength: minLength(6) };
const passwordRules = { required, minLength: minLength(6), maxPasswordByteLength };

function confirmPasswordRules(getPasswordValue: () => string) {
return computed(() => ({ required, sameAsPassword: sameAs(getPasswordValue()) }));
Expand Down
2 changes: 2 additions & 0 deletions client-v3/src/js/customValidators.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export const notNull = (value: unknown): boolean => value != null;
export const notNullAndGreaterThanZero = (value: unknown): boolean =>
value != null && (value as number) > 0;
export const maxPasswordByteLength = (value: unknown): boolean =>
typeof value !== 'string' || new TextEncoder().encode(value).length <= 72;
7 changes: 4 additions & 3 deletions client-v3/src/views/user/ForcePasswordChangeView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
id="new-password-input-group"
label="New Password"
label-for="new-password-input"
description="Minimum 6 characters"
description="6–72 characters"
>
<BFormInput
id="new-password-input"
Expand All @@ -29,7 +29,7 @@
autocomplete="new-password"
/>
<BFormInvalidFeedback id="new-password-feedback">
This is a required field and must be at least 6 characters.
This is a required field and must be between 6 and 72 characters.
</BFormInvalidFeedback>
</BFormGroup>

Expand Down Expand Up @@ -75,6 +75,7 @@ import { ref, computed } from 'vue';
import { useRouter } from 'vue-router';
import { useVuelidate } from '@vuelidate/core';
import { required, minLength, sameAs } from '@vuelidate/validators';
import { maxPasswordByteLength } from '@/js/customValidators';
import { useUserStore } from '@/stores/user';
import { useFormValidation } from '@/composables/useFormValidation';

Expand All @@ -86,7 +87,7 @@ const state = ref({ newPassword: '', confirmPassword: '' });
const loading = ref(false);

const rules = computed(() => ({
newPassword: { required, minLength: minLength(6) },
newPassword: { required, minLength: minLength(6), maxPasswordByteLength },
confirmPassword: { required, sameAsPassword: sameAs(state.value.newPassword) },
}));

Expand Down
Loading
Loading