Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
29a15a8
chore(backend): ensure URL hostname is explicit even when 0.0.0.0 is …
johaven Jan 18, 2026
28bbf1d
feat(auth): implement OIDC authentication support and refactor auth p…
johaven Jan 18, 2026
23a93b5
feat(backend:auth): add LDAP/OIDC local password fallback and admin b…
johaven Jan 18, 2026
549ada3
feat(backend:sync): improve sync path error handling and enforce subd…
johaven Jan 19, 2026
3b5a80a
fix(frontend:routes): remove redundant `canActivateChild` guard from …
johaven Jan 20, 2026
8bcf35d
feat(auth:oidc): enhance OIDC configuration
johaven Jan 20, 2026
96d52c9
feat(backend:auth:ldap): move adminGroup to options, add autoCreateUs…
johaven Jan 24, 2026
abb9979
feat(auth:oidc): revise authentication flow logic
johaven Jan 24, 2026
a213078
test(backend): complete unit tests for OIDC/LDAP/SYNC
johaven Jan 25, 2026
3cb3ea4
feat(backend:sync): add support for TOTP recovery codes during client…
johaven Jan 27, 2026
08c6e0f
feat(auth): refactor authentication services and add desktop client r…
johaven Jan 27, 2026
b6525ec
feat(auth:sync): introduce `registerWithAuth` to enable desktop clien…
johaven Jan 28, 2026
5195e95
chore(deps): update dependencies
johaven Jan 29, 2026
0d6963f
feat(auth): support desktop app OIDC authentication flow
johaven Feb 1, 2026
9d187e0
refactor(auth)!: rename method to provider in AuthConfig and replace …
johaven Feb 2, 2026
1460223
chore(docker): update image versions for sync-in services
johaven Feb 2, 2026
1fe9454
chore: remove redundant license
johaven Feb 3, 2026
bf52cc8
test(backend:sync): update unit tests to validate client ID in regist…
johaven Feb 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

Sync-in® Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
Sync-in® Copyright (C) 2012-2026 Johan Legrand <johan.legrand@sync-in.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
Expand Down
6 changes: 0 additions & 6 deletions backend/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

// @ts-check
import eslint from '@eslint/js'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
Expand Down
1 change: 1 addition & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
"mysql2": "^3.11.4",
"nestjs-pino": "^4.3.0",
"nodemailer": "^7.0.0",
"openid-client": "^6.8.1",
"passport": "^0.7.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
Expand Down
6 changes: 0 additions & 6 deletions backend/src/app.bootstrap.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import fastifyCookie from '@fastify/cookie'
import fastifyHelmet from '@fastify/helmet'
import multipart from '@fastify/multipart'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/app.constants.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { loadVersion } from './app.functions'

export const VERSION = loadVersion()
Expand Down
6 changes: 0 additions & 6 deletions backend/src/app.e2e-spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { NestFastifyApplication } from '@nestjs/platform-fastify'
import { appBootstrap } from './app.bootstrap'
import { dbCloseConnection } from './infrastructure/database/utils'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/app.functions.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { existsSync, readFileSync } from 'fs'
import { join, resolve } from 'node:path'
import { IS_TEST_ENV } from './configuration/config.constants'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { HttpModule } from '@nestjs/axios'
import { Module } from '@nestjs/common'
import { ConfigModule } from '@nestjs/config'
Expand Down
9 changes: 2 additions & 7 deletions backend/src/app.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Logger } from '@nestjs/common'
import { setupPrimary } from '@socket.io/cluster-adapter'
import cluster from 'node:cluster'
import fs from 'node:fs'
import os from 'node:os'
Expand All @@ -13,10 +8,10 @@ import process from 'node:process'
import { AppService } from './app.service'
import { ENVIRONMENT_PREFIX } from './configuration/config.constants'
import { configuration, exportConfiguration } from './configuration/config.environment'

jest.mock('@socket.io/cluster-adapter', () => ({
setupPrimary: jest.fn()
}))
import { setupPrimary } from '@socket.io/cluster-adapter'

describe(AppService.name, () => {
let appService: AppService
Expand Down
6 changes: 0 additions & 6 deletions backend/src/app.service.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Injectable, Logger } from '@nestjs/common'
import { setupPrimary } from '@socket.io/cluster-adapter'
import cluster, { Worker } from 'node:cluster'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/admin/admin.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Module } from '@nestjs/common'
import { AdminSchedulerService } from './services/admin-scheduler.service'
import { AdminService } from './services/admin.service'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/admin/constants/routes.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export const ADMIN_ROUTE = {
BASE: '/api/admin'
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export interface ServerReleaseVersionManifest {
// tag_name: `v1.0.0`
tag_name: string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Injectable } from '@nestjs/common'
import { Cron, CronExpression } from '@nestjs/schedule'
import { setTimeout } from 'node:timers/promises'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/admin/services/admin.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { HttpService } from '@nestjs/axios'
import { Test, TestingModule } from '@nestjs/testing'
import { Cache } from '../../../infrastructure/cache/services/cache.service'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/admin/services/admin.service.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { HttpService } from '@nestjs/axios'
import { Injectable, Logger } from '@nestjs/common'
import type { AxiosResponse } from 'axios'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/admin/utils/check-update.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export function isServerUpdateAvailable(current: string, latest: string) {
const c = current.split('.').map(Number)
const l = latest.split('.').map(Number)
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/applications.config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Type } from 'class-transformer'
import { IsDefined, IsNotEmptyObject, IsObject, ValidateNested } from 'class-validator'
import { FilesConfig } from './files/files.config'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/applications.constants.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export const APP_BASE_ROUTE = '/api/app'

export const HTTP_WEBDAV_METHOD = {
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/applications.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Global, Module } from '@nestjs/common'
import { AdminModule } from './admin/admin.module'
import { CommentsModule } from './comments/comments.module'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/comments/comments.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Test, TestingModule } from '@nestjs/testing'
import { Cache } from '../../infrastructure/cache/services/cache.service'
import { ContextManager } from '../../infrastructure/context/services/context-manager.service'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/comments/comments.controller.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Body, Controller, Delete, Get, Patch, Post, Query, UseGuards, UseInterceptors } from '@nestjs/common'
import { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'
import { SkipSpaceGuard } from '../spaces/decorators/space-skip-guard.decorator'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/comments/comments.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Module } from '@nestjs/common'
import { CommentsController } from './comments.controller'
import { CommentsManager } from './services/comments-manager.service'
Expand Down
5 changes: 0 additions & 5 deletions backend/src/applications/comments/constants/routes.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/
import { APP_BASE_ROUTE } from '../../applications.constants'

export const COMMENTS_ROUTE = {
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/comments/dto/comment.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { IsInt, IsNotEmpty, IsOptional, IsString } from 'class-validator'

export class CreateOrUpdateCommentDto {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import type { Owner } from '../../users/interfaces/owner.interface'

export interface CommentRecent {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Owner } from '../../users/interfaces/owner.interface'
import type { comments } from './comments.schema'

Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/comments/schemas/comments.schema.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Column, SQL, sql } from 'drizzle-orm'
import { bigint, datetime, index, mysqlTable, text } from 'drizzle-orm/mysql-core'
import { files } from '../../files/schemas/files.schema'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { HttpException, HttpStatus } from '@nestjs/common'
import { Test, TestingModule } from '@nestjs/testing'
import { Cache } from '../../../infrastructure/cache/services/cache.service'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'
import { ContextManager } from '../../../infrastructure/context/services/context-manager.service'
import type { FileProps } from '../../files/interfaces/file-props.interface'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Inject, Injectable } from '@nestjs/common'
import { and, desc, eq, getTableColumns, inArray, isNotNull, isNull, ne, or, SelectedFields, SQL, sql } from 'drizzle-orm'
import { alias, union } from 'drizzle-orm/mysql-core'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Test, TestingModule } from '@nestjs/testing'
import { Cache } from '../../../infrastructure/cache/services/cache.service'
import { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { Inject, Injectable, Logger } from '@nestjs/common'
import { SQL, sql } from 'drizzle-orm'
import { MySqlQueryResult } from 'drizzle-orm/mysql2'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/files/constants/cache.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

// cache task key = `ftask-$(userId}-${taskId}` => FileTask
export const CACHE_TASK_PREFIX = 'ftask' as const
export const CACHE_TASK_TTL = 86400 as const // one day
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/files/constants/compress.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,2 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export const tarExtension = 'tar'
export const tarGzExtension = 'tgz'
6 changes: 0 additions & 6 deletions backend/src/applications/files/constants/files.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export const DEFAULT_CHECKSUM_ALGORITHM = 'sha512-256'
export const DEFAULT_HIGH_WATER_MARK = 1024 * 1024
export const DEFAULT_MIME_TYPE = 'application/octet-stream'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/files/constants/indexing.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export const userIndexPrefix = 'user_'
export const spaceIndexPrefix = 'space_'
export const shareIndexPrefix = 'share_'
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/files/constants/operations.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

export enum FILE_OPERATION {
MAKE = 'make',
COPY = 'copy',
Expand Down
6 changes: 0 additions & 6 deletions backend/src/applications/files/constants/routes.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/

import { SPACES_ROUTE } from '../../spaces/constants/routes'
import { FILE_OPERATION } from './operations'

Expand Down
Loading