From e6df30eac74f5cfdb9fc9f259527fa7da50123db Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 24 Feb 2026 03:49:46 +0000 Subject: [PATCH 01/25] tmp: A naive github-sync framework --- services/github-sync/.nvmrc | 1 + services/github-sync/Dockerfile | 46 ++ services/github-sync/README.md | 3 + services/github-sync/app.js | 19 + services/github-sync/app/js/mongodb.js | 26 + services/github-sync/app/js/server.js | 16 + .../github-sync/config/settings.defaults.cjs | 30 ++ services/github-sync/package.json | 58 +++ services/web/config/settings.defaults.js | 29 +- .../app/models/githubSyncUserCredentials.mjs | 17 + .../github-sync/app/src/GitHubApiClient.mjs | 164 +++++++ .../app/src/GitHubSyncController.mjs | 200 ++++++++ .../app/src/GitHubSyncEncryption.mjs | 72 +++ .../github-sync/app/src/GitHubSyncHandler.mjs | 450 ++++++++++++++++++ .../github-sync/app/src/GitHubSyncRouter.mjs | 86 ++++ .../github-sync/app/src/GitOperations.mjs | 195 ++++++++ .../github-sync/app/src/SecretsHelper.mjs | 34 ++ .../js/components/github-sync-button.tsx | 391 +++++++++++++++ .../js/components/github-sync-widget.tsx | 156 ++++++ .../js/components/import-from-github-menu.tsx | 12 + .../import-from-github-modal-wrapper.tsx | 159 +++++++ services/web/modules/github-sync/index.mjs | 10 + 22 files changed, 2171 insertions(+), 3 deletions(-) create mode 100644 services/github-sync/.nvmrc create mode 100644 services/github-sync/Dockerfile create mode 100644 services/github-sync/README.md create mode 100644 services/github-sync/app.js create mode 100644 services/github-sync/app/js/mongodb.js create mode 100644 services/github-sync/app/js/server.js create mode 100644 services/github-sync/config/settings.defaults.cjs create mode 100644 services/github-sync/package.json create mode 100644 services/web/modules/github-sync/app/models/githubSyncUserCredentials.mjs create mode 100644 services/web/modules/github-sync/app/src/GitHubApiClient.mjs create mode 100644 services/web/modules/github-sync/app/src/GitHubSyncController.mjs create mode 100644 services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs create mode 100644 services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs create mode 100644 services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs create mode 100644 services/web/modules/github-sync/app/src/GitOperations.mjs create mode 100644 services/web/modules/github-sync/app/src/SecretsHelper.mjs create mode 100644 services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx create mode 100644 services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx create mode 100644 services/web/modules/github-sync/frontend/js/components/import-from-github-menu.tsx create mode 100644 services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx create mode 100644 services/web/modules/github-sync/index.mjs diff --git a/services/github-sync/.nvmrc b/services/github-sync/.nvmrc new file mode 100644 index 0000000000..89b93fd74a --- /dev/null +++ b/services/github-sync/.nvmrc @@ -0,0 +1 @@ +22.18.0 \ No newline at end of file diff --git a/services/github-sync/Dockerfile b/services/github-sync/Dockerfile new file mode 100644 index 0000000000..4e6847ea67 --- /dev/null +++ b/services/github-sync/Dockerfile @@ -0,0 +1,46 @@ +# This file was auto-generated, do not edit it directly. +# Instead run bin/update_build_scripts from +# https://github.com/overleaf/internal/ + +FROM node:22.18.0 AS base + +WORKDIR /overleaf/services/github-sync + +# Google Cloud Storage needs a writable $HOME/.config for resumable uploads +# (see https://googleapis.dev/nodejs/storage/latest/File.html#createWriteStream) +RUN mkdir /home/node/.config && chown node:node /home/node/.config + +FROM base AS app + +COPY package.json package-lock.json /overleaf/ +COPY libraries/access-token-encryptor/package.json /overleaf/libraries/access-token-encryptor/package.json +COPY libraries/fetch-utils/package.json /overleaf/libraries/fetch-utils/package.json +COPY libraries/logger/package.json /overleaf/libraries/logger/package.json +COPY libraries/metrics/package.json /overleaf/libraries/metrics/package.json +COPY libraries/mongo-utils/package.json /overleaf/libraries/mongo-utils/package.json +COPY libraries/o-error/package.json /overleaf/libraries/o-error/package.json +COPY libraries/promise-utils/package.json /overleaf/libraries/promise-utils/package.json +COPY libraries/settings/package.json /overleaf/libraries/settings/package.json +COPY libraries/stream-utils/package.json /overleaf/libraries/stream-utils/package.json +COPY services/github-sync/package.json /overleaf/services/github-sync/package.json +COPY tools/migrations/package.json /overleaf/tools/migrations/package.json +COPY patches/ /overleaf/patches/ +COPY tools/migrations/ /overleaf/tools/migrations/ + +RUN cd /overleaf && npm ci --quiet +COPY libraries/access-token-encryptor/ /overleaf/libraries/access-token-encryptor/ +COPY libraries/fetch-utils/ /overleaf/libraries/fetch-utils/ +COPY libraries/logger/ /overleaf/libraries/logger/ +COPY libraries/metrics/ /overleaf/libraries/metrics/ +COPY libraries/mongo-utils/ /overleaf/libraries/mongo-utils/ +COPY libraries/o-error/ /overleaf/libraries/o-error/ +COPY libraries/promise-utils/ /overleaf/libraries/promise-utils/ +COPY libraries/settings/ /overleaf/libraries/settings/ +COPY libraries/stream-utils/ /overleaf/libraries/stream-utils/ +COPY services/github-sync/ /overleaf/services/github-sync/ +COPY tools/migrations/ /overleaf/tools/migrations/ + +FROM app +USER node + +CMD ["node", "--expose-gc", "app.js"] \ No newline at end of file diff --git a/services/github-sync/README.md b/services/github-sync/README.md new file mode 100644 index 0000000000..e39d6b6d65 --- /dev/null +++ b/services/github-sync/README.md @@ -0,0 +1,3 @@ +# GitHub Sync Service + +Overleaf Github Sync Service, @Ayaka-notes. \ No newline at end of file diff --git a/services/github-sync/app.js b/services/github-sync/app.js new file mode 100644 index 0000000000..397bf9c44f --- /dev/null +++ b/services/github-sync/app.js @@ -0,0 +1,19 @@ +// Metrics must be initialized before importing anything else +import '@overleaf/metrics/initialize.js' + +import logger from '@overleaf/logger' +import Settings from '@overleaf/settings' +import { createServer } from './app/js/server.js' + +const port = Settings.internal?.githubSync?.port +const host = Settings.internal?.githubSync?.host + +const { server } = createServer() +server.listen(port, host, err => { + if (err) { + logger.fatal({ err }, `Cannot bind to ${host}:${port}. Exiting.`) + process.exit(1) + } + + logger.info({ host, port }, 'GitHub Sync service listening') +}) \ No newline at end of file diff --git a/services/github-sync/app/js/mongodb.js b/services/github-sync/app/js/mongodb.js new file mode 100644 index 0000000000..25d5e5dc25 --- /dev/null +++ b/services/github-sync/app/js/mongodb.js @@ -0,0 +1,26 @@ +// @ts-check + +import Metrics from '@overleaf/metrics' +import Settings from '@overleaf/settings' +import MongoUtils from '@overleaf/mongo-utils' +import { MongoClient } from 'mongodb' + +export { ObjectId } from 'mongodb' + +export const mongoClient = new MongoClient( + Settings.mongo.url, + Settings.mongo.options +) +const mongoDb = mongoClient.db() + +export const db = { + githubSyncEntityVersions: mongoDb.collection('githubSyncEntityVersions'), + githubSyncProjectStates: mongoDb.collection('githubSyncProjectStates'), + githubSyncUserCredentials: mongoDb.collection('githubSyncUserCredentials'), +} + +Metrics.mongodb.monitor(mongoClient) + +export async function cleanupTestDatabase() { + await MongoUtils.cleanupTestDatabase(mongoClient) +} diff --git a/services/github-sync/app/js/server.js b/services/github-sync/app/js/server.js new file mode 100644 index 0000000000..6858d4da84 --- /dev/null +++ b/services/github-sync/app/js/server.js @@ -0,0 +1,16 @@ +import express from 'express' +import { db, ObjectId } from './mongodb.js' + +export function createServer() { + const app = express() + + app.get('/status', (_req, res) => { + res.status(200).json({ status: 'ok', service: 'github-sync' }) + }) + + app.get('/healthz', (_req, res) => { + res.sendStatus(204) + }) + + return { app, server: app } +} \ No newline at end of file diff --git a/services/github-sync/config/settings.defaults.cjs b/services/github-sync/config/settings.defaults.cjs new file mode 100644 index 0000000000..5fadf3fb56 --- /dev/null +++ b/services/github-sync/config/settings.defaults.cjs @@ -0,0 +1,30 @@ +const http = require('node:http') +const https = require('node:https') + +http.globalAgent.maxSockets = 300 +http.globalAgent.keepAlive = false +https.globalAgent.keepAlive = false + +module.exports = { + internal: { + githubSync: { + host: process.env.GITHUB_SYNC_HOST || process.env.LISTEN_ADDRESS || '127.0.0.1', + port: 3022, + }, + }, + + mongo: { + url: + process.env.MONGO_CONNECTION_STRING || + `mongodb://${process.env.MONGO_HOST || '127.0.0.1'}/sharelatex`, + options: { + monitorCommands: true, + }, + }, + + apis: { + project_history: { + url: `http://${process.env.PROJECT_HISTORY_HOST || '127.0.0.1'}:3054`, + } + } +} \ No newline at end of file diff --git a/services/github-sync/package.json b/services/github-sync/package.json new file mode 100644 index 0000000000..46ccd4db87 --- /dev/null +++ b/services/github-sync/package.json @@ -0,0 +1,58 @@ +{ + "name": "@overleaf/github-sync", + "description": "GitHub synchronization microservice for Overleaf", + "private": true, + "main": "app.js", + "type": "module", + "scripts": { + "start": "node app.js", + "nodemon": "node --watch app.js", + "lint": "eslint --max-warnings 0 --format unix .", + "format": "prettier --list-different $PWD/'**/{*.*js,*.ts}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,*.ts}'", + "lint:fix": "eslint --fix .", + "types:check": "tsc --noEmit" + }, + "dependencies": { + "@octokit/request": "^9.2.2", + "@overleaf/access-token-encryptor": "*", + "@overleaf/fetch-utils": "*", + "@overleaf/logger": "*", + "@overleaf/metrics": "*", + "@overleaf/mongo-utils": "*", + "@overleaf/o-error": "*", + "@overleaf/promise-utils": "*", + "@overleaf/settings": "*", + "async": "^3.2.5", + "base64-stream": "^0.1.2", + "body-parser": "1.20.4", + "bunyan": "^1.8.15", + "express": "4.22.1", + "lodash": "^4.17.21", + "mongodb-legacy": "6.1.3", + "nock": "^13.5.6", + "octonode": "0.9.5", + "p-limit": "^2.2.0", + "randomstring": "^1.1.5", + "request": "2.88.2" + }, + "devDependencies": { + "@overleaf/migrations": "*", + "@overleaf/stream-utils": "*", + "@pollyjs/adapter-node-http": "^6.0.6", + "@pollyjs/core": "^6.0.6", + "@pollyjs/persister-fs": "^6.0.6", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "mocha": "^11.1.0", + "mocha-junit-reporter": "^2.2.1", + "mocha-multi-reporters": "^1.5.1", + "sandboxed-module": "^2.0.4", + "sinon": "^9.2.4", + "sinon-chai": "^3.7.0", + "timekeeper": "2.2.0", + "typescript": "^5.0.4" + }, + "version": "1.0.0", + "license": "AGPL-3.0" +} \ No newline at end of file diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index 2473d03cb3..3ec5dc2d8d 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -1011,10 +1011,25 @@ module.exports = { mainEditorLayoutPanels: [], langFeedbackLinkingWidgets: [], labsExperiments: [], - integrationLinkingWidgets: [], + integrationLinkingWidgets: [ + Path.resolve( + __dirname, + '../modules/github-sync/frontend/js/components/github-sync-widget.tsx' + ), + ], referenceLinkingWidgets: [], - importProjectFromGithubModalWrapper: [], - importProjectFromGithubMenu: [], + importProjectFromGithubModalWrapper: [ + Path.resolve( + __dirname, + '../modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx' + ), + ], + importProjectFromGithubMenu: [ + Path.resolve( + __dirname, + '../modules/github-sync/frontend/js/components/import-from-github-menu.tsx' + ), + ], editorLeftMenuSync: [ Path.resolve( __dirname, @@ -1105,6 +1120,7 @@ module.exports = { 'login-register', 'oauth2-server', 'git-bridge', + 'github-sync' ], viewIncludes: {}, @@ -1154,4 +1170,11 @@ module.exports.oauthProviders = { linkPath: '/oidc/login', }, }), +} + +module.exports.githubSync = { + enabled: process.env.GITHUB_SYNC_ENABLED === 'true', + clientID: process.env.GITHUB_SYNC_CLIENT_ID, + clientSecret: process.env.GITHUB_SYNC_CLIENT_SECRET, + callbackURL: process.env.GITHUB_SYNC_CALLBACK_URL, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/models/githubSyncUserCredentials.mjs b/services/web/modules/github-sync/app/models/githubSyncUserCredentials.mjs new file mode 100644 index 0000000000..b143eea3e4 --- /dev/null +++ b/services/web/modules/github-sync/app/models/githubSyncUserCredentials.mjs @@ -0,0 +1,17 @@ +import mongoose from "../../../../app/src/infrastructure/Mongoose.mjs" + +const { Schema } = mongoose +const { ObjectId } = Schema + +export const GitHubSyncUserCredentialsSchema = new Schema( + { + userId: { type: ObjectId, ref: 'User', required: true, unique: true }, + auth_token_encrypted: { type: String, required: true }, + }, + { collection: 'githubSyncUserCredentials', minimize: false } +) + +export const GitHubSyncUserCredentials = mongoose.model( + 'GitHubSyncUserCredentials', + GitHubSyncUserCredentialsSchema, +) \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs new file mode 100644 index 0000000000..fbc79e4207 --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs @@ -0,0 +1,164 @@ +import logger from '@overleaf/logger' +import fetch from 'node-fetch' + +const GITHUB_API_BASE = 'https://api.github.com' + +/** + * Create headers for GitHub API requests + * @param {string} pat - Personal Access Token + * @returns {Object} + */ +function getHeaders(pat) { + return { + Accept: 'application/vnd.github+json', + Authorization: `Bearer ${pat}`, + 'X-GitHub-Api-Version': '2022-11-28', + 'User-Agent': 'Overleaf-GitHub-Sync', + } +} + +/** + * Verify PAT and get user info + * @param {string} pat - Personal Access Token + * @returns {Promise<{login: string, id: number, name: string}>} + */ +async function verifyPat(pat) { + const response = await fetch(`${GITHUB_API_BASE}/user`, { + headers: getHeaders(pat), + }) + + if (!response.ok) { + if (response.status === 401) { + throw new Error('Invalid GitHub Personal Access Token') + } + throw new Error(`GitHub API error: ${response.status}`) + } + + const user = await response.json() + return { + login: user.login, + id: user.id, + name: user.name, + } +} + +/** + * List repositories for the authenticated user + * @param {string} pat - Personal Access Token + * @param {number} [page=1] - Page number + * @param {number} [perPage=100] - Results per page + * @returns {Promise>} + */ +async function listRepos(pat, page = 1, perPage = 100) { + const params = new URLSearchParams({ + page: page.toString(), + per_page: perPage.toString(), + sort: 'updated', + direction: 'desc', + }) + + const response = await fetch( + `${GITHUB_API_BASE}/user/repos?${params.toString()}`, + { + headers: getHeaders(pat), + } + ) + + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status}`) + } + + let repos = await response.json() + const linkHeader = response.headers.get('link') + logger.debug({ linkHeader }, 'GitHub API Link header for pagination') + + return repos.map(repo => ({ + // owner: repo.owner.login, + name: repo.name, + fullName: repo.full_name, + // private: repo.private, + // defaultBranch: repo.default_branch, + })) +} + + +async function listAllRepos(pat) { + let page = 1 + const perPage = 100 + let allRepos = [] + while (true) { + const repos = await listRepos(pat, page, perPage) + allRepos = allRepos.concat(repos) + if (repos.length < perPage) break + page++ + } + return allRepos +} + + +/** + * List branches for a repository + * @param {string} pat - Personal Access Token + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @returns {Promise>} + */ +async function listBranches(pat, owner, repo) { + const response = await fetch( + `${GITHUB_API_BASE}/repos/${owner}/${repo}/branches`, + { + headers: getHeaders(pat), + } + ) + + if (!response.ok) { + if (response.status === 404) { + throw new Error('Repository not found') + } + throw new Error(`GitHub API error: ${response.status}`) + } + + const branches = await response.json() + return branches.map(branch => ({ + name: branch.name, + protected: branch.protected, + })) +} + +/** + * Check if a repository exists and user has access + * @param {string} pat - Personal Access Token + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @returns {Promise<{exists: boolean, hasWriteAccess: boolean, defaultBranch: string}>} + */ +async function checkRepoAccess(pat, owner, repo) { + const response = await fetch( + `${GITHUB_API_BASE}/repos/${owner}/${repo}`, + { + headers: getHeaders(pat), + } + ) + + if (!response.ok) { + if (response.status === 404) { + return { exists: false, hasWriteAccess: false, defaultBranch: null } + } + throw new Error(`GitHub API error: ${response.status}`) + } + + const repoData = await response.json() + return { + exists: true, + hasWriteAccess: repoData.permissions?.push ?? false, + defaultBranch: repoData.default_branch, + } +} + +export default { + verifyPat, + listRepos, + listAllRepos, + listBranches, + checkRepoAccess, +} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs new file mode 100644 index 0000000000..71540fcaa1 --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -0,0 +1,200 @@ +import { expressify } from '@overleaf/promise-utils' +import SessionManager from '../../../../app/src/Features/Authentication/SessionManager.mjs' +import Csrf from '../../../../app/src/infrastructure/Csrf.mjs' +import GitHubSyncHandler from './GitHubSyncHandler.mjs' +import Settings from '@overleaf/settings' +import logger from '@overleaf/logger' +import Path from 'path' +import fs from 'fs' +import crypto from 'crypto' +import ProjectUploadManager from '../../../../app/src/Features/Uploads/ProjectUploadManager.mjs' +import { Readable } from 'node:stream' + + +/** + * Get user's GitHub connection status + */ +async function getStatus(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + + const status = await GitHubSyncHandler.promises.getUserGitHubStatus(userId) + res.json(status) +} + +/** + * List user's GitHub repositories + */ +async function listRepos(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + + try { + const repos = await GitHubSyncHandler.promises.listUserRepos(userId) + res.json({ repos }) + } catch (error) { + res.status(400).json({ error: error.message }) + } +} + + + + +/** + * Get project's GitHub sync status + */ +async function getProjectStatus(req, res) { + const { Project_id: projectId } = req.params + + const status = await GitHubSyncHandler.promises.getProjectSyncStatus(projectId) + res.json(status) +} + +/** + * Push project to GitHub + */ +async function pushProject(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + const { Project_id: projectId } = req.params + + try { + await GitHubSyncHandler.promises.pushProjectToGitHub(projectId, userId) + res.json({ success: true }) + } catch (error) { + res.status(400).json({ error: error.message }) + } +} + + + +/** + * Import a GitHub repository as a new project + */ +async function importRepo(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + const { projectName, repo } = req.body + + try { + const url = new URL(`https://api.github.com/repos/${repo}/zipball`) + const token = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(userId) + + const response = await fetch(url.toString(), { + headers: { + Authorization: `token ${token}`, + Accept: 'application/vnd.github.raw+json', + }, + }) + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status} ${response.statusText}`) + } + + const fsPath = Path.join( + Settings.path.dumpFolder, + `github_import_${crypto.randomUUID()}` + ) + + const ab = await response.arrayBuffer() + fs.writeFileSync(fsPath, Buffer.from(ab)) + + + const { project } = await ProjectUploadManager.promises.createProjectFromZipArchiveWithName( + userId, + projectName, + fsPath, + {} + ) + res.json({ projectId: project._id}) + } catch (error) { + logger.error({ err: error instanceof Error ? error : new Error(String(error)) }, 'Error importing GitHub repository') + res.status(400).json({ error: error instanceof Error ? error.message : 'Unknown error' }) + } +} + + + +/** + * Redirect user to GitHub OAuth authorization URL + * to begin linking process + */ +async function beginAuth(req, res) { + // build GitHub OAuth URL with required query parameters + let authUrl = new URL('https://github.com/login/oauth/authorize') + authUrl.searchParams.append('client_id', Settings.githubSync.clientID) + authUrl.searchParams.append('redirect_uri', Settings.githubSync.callbackURL) + authUrl.searchParams.append('scope', 'read:org,repo,workflow') + let state = req.csrfToken() + authUrl.searchParams.append('state', state) + + res.redirect(authUrl.toString()) +} + + +/** + * Handle GitHub OAuth callback and complete registration + * 1. Validate CSRF token + * 2. Exchange code for access token + * 3. Save access token for user + * 4. Redirect to user settings with success message + */ +async function completeRegistration(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + const { code, state } = req.query + try { + await Csrf.promises.validateToken(state, req.session) + } catch (error) { + return res.status(403).json({ error: 'Invalid CSRF token' }) + } + + // fetch access token from GitHub using the code + let data + try { + data = await GitHubSyncHandler.promises.exchangeCodeForToken(code) + } catch (error) { + return res.status(400).json({ error: error.message }) + } + + if (!data.access_token) { + return res.status(400).json({ error: 'Failed to obtain access token from GitHub' }) + } + + await GitHubSyncHandler.promises.saveGitHubAccessTokenForUser(userId, data.access_token) + + // Save success message in session to display on redirect + req.session.projectSyncSuccessMessage = req.i18n.translate('github_successfully_linked_description') + // redirect to /user/settings + res.redirect('/user/settings?oauth-complete=github#project-sync') +} + + +/** + * Disconnect user's GitHub account + */ +async function unlink(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + await GitHubSyncHandler.promises.removeGitHubAccessTokenForUser(userId) + res.json({ success: true }) +} + +async function exportProject(req, res){ + +} + +async function getUnmergedCommits(req, res){ + +} + +async function mergeFromGitHub(req, res){ + +} + +export default { + getStatus: expressify(getStatus), + beginAuth: expressify(beginAuth), + unlink: expressify(unlink), + completeRegistration: expressify(completeRegistration), + listRepos: expressify(listRepos), + getProjectStatus: expressify(getProjectStatus), + pushProject: expressify(pushProject), + importRepo: expressify(importRepo), + exportProject: expressify(exportProject), + getUnmergedCommits: expressify(getUnmergedCommits), + mergeFromGitHub: expressify(mergeFromGitHub), +} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs b/services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs new file mode 100644 index 0000000000..cd81803aac --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs @@ -0,0 +1,72 @@ +import crypto from 'node:crypto' +import Settings from '@overleaf/settings' + +const ALGORITHM = 'aes-256-gcm' +const IV_LENGTH = 16 +const AUTH_TAG_LENGTH = 16 + +/** + * Get encryption secret from settings + * @returns {Buffer} + */ +function getSecret() { + const secret = Settings.githubSyncEncryptionSecret + if (!secret) { + throw new Error('GITHUB_SYNC_ENCRYPTION_SECRET is not configured') + } + // Convert hex string to buffer (64 hex chars = 32 bytes) + return Buffer.from(secret, 'hex') +} + +/** + * Encrypt a GitHub PAT for storage + * @param {string} pat - The plaintext PAT + * @returns {string} - Base64 encoded encrypted string (iv + authTag + ciphertext) + */ +function encrypt(pat) { + const secret = getSecret() + const iv = crypto.randomBytes(IV_LENGTH) + const cipher = crypto.createCipheriv(ALGORITHM, secret, iv) + + let encrypted = cipher.update(pat, 'utf8', 'base64') + encrypted += cipher.final('base64') + + const authTag = cipher.getAuthTag() + + // Combine iv + authTag + encrypted data + const combined = Buffer.concat([ + iv, + authTag, + Buffer.from(encrypted, 'base64'), + ]) + + return combined.toString('base64') +} + +/** + * Decrypt a stored GitHub PAT + * @param {string} encryptedPat - Base64 encoded encrypted string + * @returns {string} - The plaintext PAT + */ +function decrypt(encryptedPat) { + const secret = getSecret() + const combined = Buffer.from(encryptedPat, 'base64') + + // Extract iv, authTag, and encrypted data + const iv = combined.subarray(0, IV_LENGTH) + const authTag = combined.subarray(IV_LENGTH, IV_LENGTH + AUTH_TAG_LENGTH) + const encrypted = combined.subarray(IV_LENGTH + AUTH_TAG_LENGTH) + + const decipher = crypto.createDecipheriv(ALGORITHM, secret, iv) + decipher.setAuthTag(authTag) + + let decrypted = decipher.update(encrypted, undefined, 'utf8') + decrypted += decipher.final('utf8') + + return decrypted +} + +export default { + encrypt, + decrypt, +} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs new file mode 100644 index 0000000000..0b2c178183 --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -0,0 +1,450 @@ +import path from 'node:path' +import fs from 'node:fs/promises' +import { User } from '../../../../app/src/models/User.mjs' +import { Project } from '../../../../app/src/models/Project.mjs' +import ProjectEntityHandler from '../../../../app/src/Features/Project/ProjectEntityHandler.mjs' +import ProjectCreationHandler from '../../../../app/src/Features/Project/ProjectCreationHandler.mjs' +import ProjectEntityUpdateHandler from '../../../../app/src/Features/Project/ProjectEntityUpdateHandler.mjs' +import FileStoreHandler from '../../../../app/src/Features/FileStore/FileStoreHandler.mjs' +import GitHubSyncEncryption from './GitHubSyncEncryption.mjs' +import GitHubApiClient from './GitHubApiClient.mjs' +import GitOperations from './GitOperations.mjs' +import { GitHubSyncUserCredentials } from '../models/githubSyncUserCredentials.mjs' +import Settings from '@overleaf/settings' +import logger from '@overleaf/logger' +import SecretsHelper from './SecretsHelper.mjs' + + +/** + * Connect a user's GitHub account by storing their PAT + * @param {string} userId - User ID + * @param {string} pat - Personal Access Token + * @returns {Promise<{username: string}>} + */ +async function connectUserGitHub(userId, pat) { + // Verify PAT with GitHub + const githubUser = await GitHubApiClient.verifyPat(pat) + + // Encrypt the PAT + const tokenEncrypted = GitHubSyncEncryption.encrypt(pat) + + // Update user document + await User.updateOne( + { _id: userId }, + { + $set: { + 'githubSync.enabled': true, + 'githubSync.tokenEncrypted': tokenEncrypted, + 'githubSync.username': githubUser.login, + 'githubSync.connectedAt': new Date(), + }, + } + ) + + return { username: githubUser.login } +} + + + +/** + * Get user's GitHub sync status + */ +async function getUserGitHubStatus(userId) { + const credentials = await GitHubSyncUserCredentials.findOne({ userId }).lean() + if (!credentials) { + return { available: true, enabled: false } + } + return { + available: true, + enabled: true + } +} + +/** + * Get decrypted PAT for a user + * @param {string} userId - User ID + * @returns {Promise} + */ +async function getUserPat(userId) { + const user = await User.findById(userId, 'githubSync.tokenEncrypted').lean() + + if (!user?.githubSync?.tokenEncrypted) { + return null + } + + return GitHubSyncEncryption.decrypt(user.githubSync.tokenEncrypted) +} + +/** + * List user's GitHub repositories + * @param {string} userId - User ID + * @returns {Promise} + */ +async function listUserRepos(userId) { + const pat = await getGitHubAccessTokenForUser(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + return await GitHubApiClient.listAllRepos(pat) +} + +/** + * List branches for a repository + * @param {string} userId - User ID + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @returns {Promise} + */ +async function listRepoBranches(userId, owner, repo) { + const pat = await getUserPat(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + return await GitHubApiClient.listBranches(pat, owner, repo) +} + +/** + * Configure GitHub sync for a project + * @param {string} projectId - Project ID + * @param {string} userId - User ID + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @param {string} branch - Branch name + */ +async function configureProjectSync(projectId, userId, owner, repo, branch) { + const pat = await getUserPat(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + // Verify repository access + const access = await GitHubApiClient.checkRepoAccess(pat, owner, repo) + if (!access.exists) { + throw new Error('Repository not found') + } + if (!access.hasWriteAccess) { + throw new Error('No write access to repository') + } + + // Update project + await Project.updateOne( + { _id: projectId }, + { + $set: { + 'githubSync.enabled': true, + 'githubSync.repoOwner': owner, + 'githubSync.repoName': repo, + 'githubSync.branch': branch, + }, + } + ) +} + +/** + * Remove GitHub sync configuration from a project + * @param {string} projectId - Project ID + */ +async function unconfigureProjectSync(projectId) { + await Project.updateOne( + { _id: projectId }, + { + $set: { + 'githubSync.enabled': false, + }, + $unset: { + 'githubSync.repoOwner': 1, + 'githubSync.repoName': 1, + 'githubSync.branch': 1, + 'githubSync.lastSyncedAt': 1, + 'githubSync.lastSyncedBy': 1, + }, + } + ) +} + +/** + * Get project's GitHub sync status + * @param {string} projectId - Project ID + * @returns {Promise} + */ +async function getProjectSyncStatus(projectId) { + const project = await Project.findById(projectId, 'githubSync').lean() + + if (!project?.githubSync?.enabled) { + return { configured: false } + } + + return { + configured: true, + repoOwner: project.githubSync.repoOwner, + repoName: project.githubSync.repoName, + branch: project.githubSync.branch, + lastSyncedAt: project.githubSync.lastSyncedAt, + } +} + +/** + * Push project to GitHub + * @param {string} projectId - Project ID + * @param {string} userId - User ID + */ +async function pushProjectToGitHub(projectId, userId) { + // Get project and user data + const project = await Project.findById(projectId, 'name githubSync').lean() + if (!project?.githubSync?.enabled) { + throw new Error('GitHub sync not configured for this project') + } + + const pat = await getUserPat(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + const { repoOwner, repoName, branch } = project.githubSync + + // Create temp directory + const tempDir = await GitOperations.createTempDir() + + try { + // Export all docs + const docs = await ProjectEntityHandler.promises.getAllDocs(projectId) + for (const doc of docs) { + const filePath = path.join(tempDir, doc.path) + await fs.mkdir(path.dirname(filePath), { recursive: true }) + await fs.writeFile(filePath, doc.lines.join('\n')) + } + + // Export all files (binary files) + const files = await ProjectEntityHandler.promises.getAllFiles(projectId) + for (const file of files) { + const filePath = path.join(tempDir, file.path) + await fs.mkdir(path.dirname(filePath), { recursive: true }) + + // Get file from FileStore + const stream = await FileStoreHandler.promises.getFileStream( + projectId, + file.file._id.toString() + ) + + const writeStream = (await import('node:fs')).createWriteStream(filePath) + await new Promise((resolve, reject) => { + stream.pipe(writeStream) + stream.on('error', reject) + writeStream.on('finish', resolve) + writeStream.on('error', reject) + }) + } + + // Push to GitHub + const commitMessage = `Sync from Overleaf: ${project.name}` + await GitOperations.pushToGitHub(tempDir, pat, repoOwner, repoName, branch, commitMessage) + + // Update last synced time + await Project.updateOne( + { _id: projectId }, + { + $set: { + 'githubSync.lastSyncedAt': new Date(), + 'githubSync.lastSyncedBy': userId, + }, + } + ) + } finally { + // Cleanup temp directory + await GitOperations.removeTempDir(tempDir) + } +} + +/** + * Import a GitHub repository as a new Overleaf project + * @param {string} userId - User ID + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @param {string} branch - Branch to import + * @returns {Promise<{projectId: string}>} + */ +async function importFromGitHub(userId, owner, repo, branch) { + const pat = await getUserPat(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + // Clone repository + const tempDir = await GitOperations.cloneRepo(pat, owner, repo, branch) + + try { + // Create new project + const projectName = repo + const project = await ProjectCreationHandler.promises.createBlankProject( + userId, + projectName + ) + + // Get list of files from cloned repo + const files = await GitOperations.listFiles(tempDir) + + // Get root folder ID + const rootFolderId = project.rootFolder[0]._id + + // Add files to project + for (const filePath of files) { + const fullPath = path.join(tempDir, filePath) + const content = await fs.readFile(fullPath) + const fileName = path.basename(filePath) + const dirPath = path.dirname(filePath) + + // Determine folder to add to + let folderId = rootFolderId + + // Create folder structure if needed + if (dirPath !== '.') { + const folderParts = dirPath.split(path.sep) + for (const folderName of folderParts) { + // For simplicity, add to root. A full implementation would create subfolders. + // TODO: Create proper folder structure + } + } + + // Check if it's a text file (likely .tex, .bib, .sty, etc.) + const textExtensions = ['.tex', '.bib', '.sty', '.cls', '.txt', '.md', '.bst', '.cfg'] + const ext = path.extname(fileName).toLowerCase() + + if (textExtensions.includes(ext)) { + // Add as doc + const lines = content.toString('utf8').split('\n') + await ProjectEntityUpdateHandler.promises.addDoc( + project._id.toString(), + folderId.toString(), + fileName, + lines, + userId, + 'github-import' + ) + } else { + // Add as file + await ProjectEntityUpdateHandler.promises.addFile( + project._id.toString(), + folderId.toString(), + fileName, + content, + null, // linkedFileData + userId, + 'github-import' + ) + } + } + + // Configure GitHub sync for the new project + await configureProjectSync(project._id.toString(), userId, owner, repo, branch) + + return { projectId: project._id.toString() } + } finally { + // Cleanup temp directory + await GitOperations.removeTempDir(tempDir) + } +} + + +// This function would exchange the OAuth code for an access token with GitHub +// For security, this should be done server-side and not exposed to the client +// The implementation would involve making a POST request to GitHub's token endpoint +// with the client ID, client secret, and the code received from the OAuth callback +async function exchangeCodeForToken(code) { + const resp = await fetch('https://github.com/login/oauth/access_token', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + client_id: Settings.githubSync.clientID, + client_secret: Settings.githubSync.clientSecret, + code, + redirect_uri: Settings.githubSync.callbackURL, + }), + }) + + const data = await resp.json() + if (!resp.ok || data.error) { + throw new Error( + `GitHub token exchange failed: ${data.error || resp.status} ${data.error_description || ''}`.trim() + ) + } + + // data: { access_token, token_type, scope, (maybe expires_in/refresh_token...) } + return data +} + +// Save the GitHub access token for a user, encrypted in the database +async function saveGitHubAccessTokenForUser(userId, accessToken) { + const tokenEncrypted = await SecretsHelper.encryptAccessToken(accessToken) + + let gitHubSyncUserCredentials = new GitHubSyncUserCredentials() + gitHubSyncUserCredentials.userId = userId + gitHubSyncUserCredentials.auth_token_encrypted = tokenEncrypted + + // save tp database + await gitHubSyncUserCredentials.save() +} + +/** + * Disconnect a user's GitHub account + * @param {string} userId - User ID + */ +async function removeGitHubAccessTokenForUser(userId) { + let token = await getGitHubAccessTokenForUser(userId) + if (token) { + let URL = `https://api.github.com/applications/${Settings.githubSync.clientID}/token` + let Authorization = `Basic ${Buffer.from(`${Settings.githubSync.clientID}:${Settings.githubSync.clientSecret}`).toString('base64')}` + // Revoke token with GitHub + const resp = await fetch(URL, { + method: 'DELETE', + headers: { + 'Accept': 'application/vnd.github+json', + 'Authorization': Authorization, + }, + body: JSON.stringify({ access_token: token }), + }) + + if (!resp.ok) { + logger.warn(`Failed to revoke GitHub token for user ${userId}: ${resp.status} ${await resp.text()}`) + } + } + + await GitHubSyncUserCredentials.deleteMany({ userId }) +} + +/** + * Get a user's GitHub token + * @param {string} userId - User ID + */ +async function getGitHubAccessTokenForUser(userId) { + const credentials = await GitHubSyncUserCredentials.findOne({ userId }).lean() + if (!credentials) { + return null + } + return await SecretsHelper.decryptAccessToken(credentials.auth_token_encrypted) +} + + +export default { + promises: { + connectUserGitHub, + // disconnectUserGitHub, + getUserGitHubStatus, + getUserPat, + listUserRepos, + listRepoBranches, + configureProjectSync, + unconfigureProjectSync, + getProjectSyncStatus, + pushProjectToGitHub, + importFromGitHub, + exchangeCodeForToken, + saveGitHubAccessTokenForUser, + removeGitHubAccessTokenForUser, + getGitHubAccessTokenForUser, + }, +} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs b/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs new file mode 100644 index 0000000000..aa04c299db --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs @@ -0,0 +1,86 @@ +import logger from '@overleaf/logger' + +import GitHubSyncController from './GitHubSyncController.mjs' +import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.mjs' +import AuthorizationMiddleware from '../../../../app/src/Features/Authorization/AuthorizationMiddleware.mjs' + +export default { + apply(webRouter) { + logger.debug({}, 'Init github-sync router') + // Check user's GitHub Auth Status + webRouter.get( + '/user/github-sync/status', + AuthenticationController.requireLogin(), + GitHubSyncController.getStatus + ) + + // OAuth redirect endpoint for GitHub Auth flow + webRouter.get( + '/github-sync/beginAuth', + AuthenticationController.requireLogin(), + GitHubSyncController.beginAuth + ) + + // OAuth callback for GitHub registration flow + webRouter.get( + '/github-sync/completeRegistration', + AuthenticationController.requireLogin(), + GitHubSyncController.completeRegistration + ) + + // Unlink GitHub account + webRouter.post( + '/github-sync/unlink', + AuthenticationController.requireLogin(), + GitHubSyncController.unlink + ) + + + // Repository listing (import github project) + webRouter.get( + '/user/github-sync/repos', + AuthenticationController.requireLogin(), + GitHubSyncController.listRepos + ) + + // Need to be owner of that project to configure GitHub Sync + // Export a existing project to GitHub + webRouter.post( + '/project/:Project_id/github-sync/export', + AuthenticationController.requireLogin(), + AuthorizationMiddleware.ensureUserCanAdminProject, + GitHubSyncController.exportProject + ) + + + webRouter.get( + '/project/:Project_id/github-sync/status', + AuthenticationController.requireLogin(), + AuthorizationMiddleware.ensureUserCanReadProject, + GitHubSyncController.getProjectStatus + ) + + webRouter.get( + '/project/:Project_id/github-sync/commits/unmerged', + AuthenticationController.requireLogin(), + AuthorizationMiddleware.ensureUserCanAdminProject, + GitHubSyncController.getUnmergedCommits + ) + + + + // + webRouter.post( + '/project/:Project_id/github-sync/merge', + AuthenticationController.requireLogin(), + AuthorizationMiddleware.ensureUserCanAdminProject, + GitHubSyncController.mergeFromGitHub + ) + + webRouter.post( + '/project/new/github-sync', + AuthenticationController.requireLogin(), + GitHubSyncController.importRepo + ) + }, +} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitOperations.mjs b/services/web/modules/github-sync/app/src/GitOperations.mjs new file mode 100644 index 0000000000..75a37775e7 --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitOperations.mjs @@ -0,0 +1,195 @@ +import { spawn } from 'node:child_process' +import fs from 'node:fs/promises' +import path from 'node:path' +import os from 'node:os' +import crypto from 'node:crypto' + +/** + * Sanitize git error messages to remove any embedded credentials + * @param {string} message - Error message that may contain credentials + * @returns {string} - Sanitized message with credentials replaced + */ +function sanitizeGitError(message) { + // Remove credentials from URLs like https://token@github.com/... + return message.replace(/https:\/\/[^@\s]+@/g, 'https://***@') +} + +/** + * Execute a git command + * @param {string[]} args - Git command arguments + * @param {string} cwd - Working directory + * @param {Object} [env] - Additional environment variables + * @returns {Promise<{stdout: string, stderr: string}>} + */ +function execGit(args, cwd, env = {}) { + return new Promise((resolve, reject) => { + const child = spawn('git', args, { + cwd, + env: { + ...process.env, + GIT_TERMINAL_PROMPT: '0', // Prevent interactive prompts + ...env, + }, + }) + + let stdout = '' + let stderr = '' + + child.stdout.on('data', data => { + stdout += data.toString() + }) + + child.stderr.on('data', data => { + stderr += data.toString() + }) + + child.on('close', code => { + if (code === 0) { + resolve({ stdout, stderr }) + } else { + // Sanitize stderr to remove any credentials before including in error + const sanitizedStderr = sanitizeGitError(stderr) + const error = new Error(`Git command failed with code ${code}: ${sanitizedStderr}`) + error.code = code + error.stderr = sanitizedStderr + reject(error) + } + }) + + child.on('error', reject) + }) +} + +/** + * Create a temporary directory for git operations + * @returns {Promise} Path to temp directory + */ +async function createTempDir() { + const tempBase = os.tmpdir() + const dirName = `overleaf-github-sync-${crypto.randomBytes(8).toString('hex')}` + const tempDir = path.join(tempBase, dirName) + await fs.mkdir(tempDir, { mode: 0o700, recursive: true }) + return tempDir +} + +/** + * Remove a temporary directory and all its contents + * @param {string} dirPath - Path to directory + */ +async function removeTempDir(dirPath) { + try { + await fs.rm(dirPath, { recursive: true, force: true }) + } catch (error) { + console.error(`Failed to remove temp directory ${dirPath}:`, error) + } +} + +/** + * Clone a GitHub repository to a temporary directory + * @param {string} pat - Personal Access Token + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @param {string} branch - Branch to clone + * @returns {Promise} Path to cloned repository + */ +async function cloneRepo(pat, owner, repo, branch) { + const tempDir = await createTempDir() + // Use clean URL without credentials - PAT is passed via credential helper + const cloneUrl = `https://github.com/${owner}/${repo}.git` + + try { + await execGit( + [ + '-c', `credential.helper=!f() { echo "password=${pat}"; }; f`, + 'clone', '--depth', '1', '--branch', branch, cloneUrl, '.' + ], + tempDir + ) + + // Remove .git directory to get just the files + await fs.rm(path.join(tempDir, '.git'), { recursive: true, force: true }) + + return tempDir + } catch (error) { + await removeTempDir(tempDir) + throw error + } +} + +/** + * Initialize a git repo and push to GitHub + * @param {string} projectDir - Directory containing project files + * @param {string} pat - Personal Access Token + * @param {string} owner - Repository owner + * @param {string} repo - Repository name + * @param {string} branch - Branch to push to + * @param {string} commitMessage - Commit message + * @returns {Promise} + */ +async function pushToGitHub(projectDir, pat, owner, repo, branch, commitMessage) { + // Use clean URL without credentials - PAT is passed via credential helper + const repoUrl = `https://github.com/${owner}/${repo}.git` + + // Initialize git repo + await execGit(['init'], projectDir) + + // Configure git user (required for commit) + await execGit(['config', 'user.email', 'overleaf@localhost'], projectDir) + await execGit(['config', 'user.name', 'Overleaf'], projectDir) + + // Add all files + await execGit(['add', '-A'], projectDir) + + // Create commit + await execGit(['commit', '-m', commitMessage, '--allow-empty'], projectDir) + + // Add remote (clean URL without credentials) + await execGit(['remote', 'add', 'origin', repoUrl], projectDir) + + // Force push to the specified branch using credential helper for auth + await execGit( + [ + '-c', `credential.helper=!f() { echo "password=${pat}"; }; f`, + 'push', '--force', 'origin', `HEAD:${branch}` + ], + projectDir + ) +} + +/** + * List all files in a directory recursively + * @param {string} dirPath - Directory path + * @param {string} [basePath=''] - Base path for relative paths + * @returns {Promise} List of relative file paths + */ +async function listFiles(dirPath, basePath = '') { + const files = [] + const entries = await fs.readdir(dirPath, { withFileTypes: true }) + + for (const entry of entries) { + const relativePath = basePath ? path.join(basePath, entry.name) : entry.name + + // Skip hidden files/directories (like .git) + if (entry.name.startsWith('.')) { + continue + } + + if (entry.isDirectory()) { + const subFiles = await listFiles(path.join(dirPath, entry.name), relativePath) + files.push(...subFiles) + } else { + files.push(relativePath) + } + } + + return files +} + +export default { + createTempDir, + removeTempDir, + cloneRepo, + pushToGitHub, + listFiles, + execGit, +} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/SecretsHelper.mjs b/services/web/modules/github-sync/app/src/SecretsHelper.mjs new file mode 100644 index 0000000000..feb90b1a23 --- /dev/null +++ b/services/web/modules/github-sync/app/src/SecretsHelper.mjs @@ -0,0 +1,34 @@ +import AccessTokenEncryptor from '@overleaf/access-token-encryptor' + +const accessTokenEncryptor = new AccessTokenEncryptor({ + cipherPasswords: { + [process.env.CIPHER_LABEL || "2042.1-v3"]: process.env.CIPHER_PASSWORD, + }, + cipherLabel: process.env.CIPHER_LABEL || "2042.1-v3", +}) + +const SecretsHelper = { + async encryptAccessToken(accessToken) { + let tokenEncrypted = "" + try { + tokenEncrypted = await accessTokenEncryptor.promises.encryptJson(accessToken) + } catch (err) { + logger.error({ err }, 'Error encrypting GitHub access token') + return "" // Return empty string on encryption failure + } + return tokenEncrypted + }, + + async decryptAccessToken(tokenEncrypted) { + let tokenDecrypted = "" + try { + tokenDecrypted = await accessTokenEncryptor.promises.decryptToJson(tokenEncrypted) + } catch (err) { + logger.error({ err }, 'Error decrypting GitHub access token') + return "" // Return empty string on decryption failure + } + return tokenDecrypted + } +} + +export default SecretsHelper \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx b/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx new file mode 100644 index 0000000000..a7f592b15d --- /dev/null +++ b/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx @@ -0,0 +1,391 @@ +import { useCallback, useState, useEffect } from 'react' +import { useTranslation } from 'react-i18next' +import { + postJSON, + deleteJSON, + getJSON, +} from '../../../../../frontend/js/infrastructure/fetch-json' +import LeftMenuButton from '../../../../../frontend/js/features/editor-left-menu/components/left-menu-button' +import { + OLModal, + OLModalBody, + OLModalFooter, + OLModalHeader, + OLModalTitle, +} from '@/shared/components/ol/ol-modal' +import OLButton from '@/shared/components/ol/ol-button' +import OLFormGroup from '@/shared/components/ol/ol-form-group' +import OLFormControl from '@/shared/components/ol/ol-form-control' +import OLFormLabel from '@/shared/components/ol/ol-form-label' +import OLNotification from '@/shared/components/ol/ol-notification' +import { useProjectContext } from '@/shared/context/project-context' +import getMeta from '@/utils/meta' + +type GitHubStatus = { + connected: boolean + username?: string +} + +type ProjectSyncStatus = { + configured: boolean + repoOwner?: string + repoName?: string + branch?: string + lastSyncedAt?: string +} + +type Repo = { + owner: string + name: string + fullName: string + private: boolean + defaultBranch: string +} + +type Branch = { + name: string + protected: boolean +} + +export default function GitHubSyncButton() { + const { t } = useTranslation() + const { _id: projectId } = useProjectContext() + const [showModal, setShowModal] = useState(false) + const [userStatus, setUserStatus] = useState({ connected: false }) + const [projectStatus, setProjectStatus] = useState({ + configured: false, + }) + const [repos, setRepos] = useState([]) + const [branches, setBranches] = useState([]) + const [selectedRepo, setSelectedRepo] = useState('') + const [selectedBranch, setSelectedBranch] = useState('') + const [loading, setLoading] = useState(false) + const [pushing, setPushing] = useState(false) + const [configuring, setConfiguring] = useState(false) + const [error, setError] = useState('') + const [success, setSuccess] = useState('') + + const anonymous = getMeta('ol-anonymous') + + const fetchData = useCallback(async () => { + if (anonymous) return + + setLoading(true) + setError('') + + try { + const [userStatusData, projectStatusData] = await Promise.all([ + getJSON('/user/github-sync/status'), + getJSON(`/project/${projectId}/github-sync/status`), + ]) + + setUserStatus(userStatusData) + setProjectStatus(projectStatusData) + + if (userStatusData.connected) { + const reposData = await getJSON<{ repos: Repo[] }>( + '/user/github-sync/repos' + ) + setRepos(reposData.repos) + + if (projectStatusData.configured) { + setSelectedRepo( + `${projectStatusData.repoOwner}/${projectStatusData.repoName}` + ) + setSelectedBranch(projectStatusData.branch || '') + + // Load branches for configured repo + const branchesData = await getJSON<{ branches: Branch[] }>( + `/user/github-sync/repos/${projectStatusData.repoOwner}/${projectStatusData.repoName}/branches` + ) + setBranches(branchesData.branches) + } + } + } catch (err: any) { + setError(err.message || 'Failed to fetch GitHub data') + } finally { + setLoading(false) + } + }, [projectId, anonymous]) + + useEffect(() => { + if (showModal) { + fetchData() + } + }, [showModal, fetchData]) + + const handleRepoChange = useCallback( + async (repoFullName: string) => { + setSelectedRepo(repoFullName) + setSelectedBranch('') + setBranches([]) + setError('') + + if (!repoFullName) return + + const [owner, repo] = repoFullName.split('/') + + try { + const branchesData = await getJSON<{ branches: Branch[] }>( + `/user/github-sync/repos/${owner}/${repo}/branches` + ) + setBranches(branchesData.branches) + + // Auto-select main or master branch if available + const mainBranch = branchesData.branches.find( + b => b.name === 'main' || b.name === 'master' + ) + if (mainBranch) { + setSelectedBranch(mainBranch.name) + } else if (branchesData.branches.length > 0) { + setSelectedBranch(branchesData.branches[0].name) + } + } catch (err: any) { + setError(err.message || 'Failed to fetch branches') + } + }, + [] + ) + + const handleConfigure = useCallback(async () => { + if (!selectedRepo || !selectedBranch) { + setError('Please select a repository and branch') + return + } + + setConfiguring(true) + setError('') + + const [owner, repo] = selectedRepo.split('/') + + try { + await postJSON(`/project/${projectId}/github-sync/configure`, { + body: { owner, repo, branch: selectedBranch }, + }) + setProjectStatus({ + configured: true, + repoOwner: owner, + repoName: repo, + branch: selectedBranch, + }) + setSuccess('GitHub sync configured successfully') + } catch (err: any) { + setError(err.message || 'Failed to configure GitHub sync') + } finally { + setConfiguring(false) + } + }, [projectId, selectedRepo, selectedBranch]) + + const handleUnconfigure = useCallback(async () => { + setConfiguring(true) + setError('') + + try { + await deleteJSON(`/project/${projectId}/github-sync/configure`) + setProjectStatus({ configured: false }) + setSelectedRepo('') + setSelectedBranch('') + setBranches([]) + setSuccess('GitHub sync removed') + } catch (err: any) { + setError(err.message || 'Failed to remove GitHub sync') + } finally { + setConfiguring(false) + } + }, [projectId]) + + const handlePush = useCallback(async () => { + setPushing(true) + setError('') + setSuccess('') + + try { + await postJSON(`/project/${projectId}/github-sync/push`) + setSuccess('Successfully pushed to GitHub!') + // Refresh status to get updated lastSyncedAt + const statusData = await getJSON( + `/project/${projectId}/github-sync/status` + ) + setProjectStatus(statusData) + } catch (err: any) { + setError(err.message || 'Failed to push to GitHub') + } finally { + setPushing(false) + } + }, [projectId]) + + if (anonymous) { + return null + } + + return ( + <> + setShowModal(true)} icon="cloud_upload"> + {t('github_sync', { defaultValue: 'GitHub' })} + + + setShowModal(false)} size="lg"> + + + {t('github_sync_title', { defaultValue: 'GitHub Sync' })} + + + + {loading ? ( +

{t('loading')}...

+ ) : !userStatus.connected ? ( +
+

+ {t('github_not_connected', { + defaultValue: + 'Your GitHub account is not connected. Please connect it in your account settings.', + })} +

+ + {t('go_to_settings', { defaultValue: 'Go to Settings' })} + +
+ ) : ( +
+

+ {t('connected_as')}:{' '} + {userStatus.username} +

+ + {!projectStatus.configured ? ( + <> +
+ {t('configure_repository', { + defaultValue: 'Configure Repository', + })} +
+ + + {t('repository')} + + ) => + handleRepoChange(e.target.value) + } + > + + {repos.map(repo => ( + + ))} + + + + {branches.length > 0 && ( + + + {t('branch')} + + ) => + setSelectedBranch(e.target.value) + } + > + + {branches.map(branch => ( + + ))} + + + )} + + ) : ( +
+
+ {t('linked_repository', { + defaultValue: 'Linked Repository', + })} +
+

+ + {projectStatus.repoOwner}/{projectStatus.repoName} + {' '} + ({projectStatus.branch}) +

+ {projectStatus.lastSyncedAt && ( +

+ {t('last_synced', { defaultValue: 'Last synced' })}:{' '} + {new Date(projectStatus.lastSyncedAt).toLocaleString()} +

+ )} + +
+ )} + + {error && } + {success && } +
+ )} +
+ + setShowModal(false)}> + {t('close')} + + {userStatus.connected && ( + <> + {projectStatus.configured ? ( + <> + + {t('unlink_repository', { defaultValue: 'Unlink' })} + + + {pushing + ? t('pushing', { defaultValue: 'Pushing...' }) + : t('push_to_github', { defaultValue: 'Push to GitHub' })} + + + ) : ( + + {configuring + ? t('configuring', { defaultValue: 'Configuring...' }) + : t('link_repository', { defaultValue: 'Link Repository' })} + + )} + + )} + +
+ + ) +} \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx b/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx new file mode 100644 index 0000000000..df1f399774 --- /dev/null +++ b/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx @@ -0,0 +1,156 @@ +import { useCallback, useState, useEffect } from 'react' +import { useTranslation } from 'react-i18next' +import { + postJSON, + deleteJSON, + getJSON, +} from '../../../../../frontend/js/infrastructure/fetch-json' +import OLButton from '@/shared/components/ol/ol-button' +import OLFormGroup from '@/shared/components/ol/ol-form-group' +import OLFormControl from '@/shared/components/ol/ol-form-control' +import OLFormLabel from '@/shared/components/ol/ol-form-label' +import { + OLModal, + OLModalBody, + OLModalFooter, + OLModalHeader, + OLModalTitle, +} from '@/shared/components/ol/ol-modal' +import OLNotification from '@/shared/components/ol/ol-notification' +import GithubLogo from '@/shared/svgs/github-logo' + +type GitHubStatus = { + available: boolean + enabled: boolean +} + +export default function GitHubSyncWidget() { + const { t } = useTranslation() + const [status, setStatus] = useState({ available: false, enabled: false }) + const [loading, setLoading] = useState(true) + const [error, setError] = useState('') + const [showConnectModal, setShowConnectModal] = useState(false) + const [showDisconnectModal, setShowDisconnectModal] = useState(false) + const [connecting, setConnecting] = useState(false) + const [disconnecting, setDisconnecting] = useState(false) + + const fetchStatus = useCallback(async () => { + try { + const data = await getJSON('/user/github-sync/status') + setStatus(data) + setError('') + } catch (err: any) { + setError(err.message || 'Failed to fetch GitHub status') + } finally { + setLoading(false) + } + }, []) + + useEffect(() => { + fetchStatus() + }, [fetchStatus]) + + + + const handleDisconnect = useCallback(async () => { + setDisconnecting(true) + setError('') + + try { + await postJSON('/github-sync/unlink') + setStatus({ available: true, enabled: false }) + setShowDisconnectModal(false) + } catch (err: any) { + setError(err.message || 'Failed to disconnect GitHub account') + } finally { + setDisconnecting(false) + } + }, []) + + if (loading) { + return ( +
+
+ +
+
+
+

GitHub

+
+

{t('loading')}...

+
+
+ ) + } + + return ( + <> +
+
+ +
+
+
+

GitHub

+
+

+ {t('github_sync_description', { + defaultValue: + 'Sync your Overleaf projects with GitHub repositories.', + })} +

+ {error && } +
+
+ {status.enabled ? ( + setShowDisconnectModal(true)} + disabled={disconnecting} + > + {disconnecting ? t('unlinking') : t('unlink')} + + ) : ( + + {t('link')} + + )} +
+
+ + + {/* Disconnect Confirmation Modal */} + setShowDisconnectModal(false)} + > + + + {t('unlink_provider_account_title', { provider: 'GitHub' })} + + + +

{t('unlink_github_warning', { provider: 'GitHub' })}

+
+ + setShowDisconnectModal(false)} + > + {t('cancel')} + + + {disconnecting ? t('unlinking') : t('unlink')} + + +
+ + ) +} \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/import-from-github-menu.tsx b/services/web/modules/github-sync/frontend/js/components/import-from-github-menu.tsx new file mode 100644 index 0000000000..47f6afb647 --- /dev/null +++ b/services/web/modules/github-sync/frontend/js/components/import-from-github-menu.tsx @@ -0,0 +1,12 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +import { DropdownItem } from '@/shared/components/dropdown/dropdown-menu' + +export default function ImportFromGitHubMenu({ onClick }: { onClick: (e: React.MouseEvent) => void }) { + const { t } = useTranslation() + return ( + + {t('import_from_github')} + + ) +} \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx new file mode 100644 index 0000000000..3009ee043a --- /dev/null +++ b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx @@ -0,0 +1,159 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +import getMeta from '@/utils/meta' +import { + OLModal, + OLModalBody, + OLModalFooter, + OLModalHeader, + OLModalTitle, +} from '@/shared/components/ol/ol-modal' +import OLButton from '@/shared/components/ol/ol-button' + + +const ModalContent = () => { + const { t } = useTranslation() + const { appName } = getMeta('ol-ExposedSettings') + const [isLoading, setIsLoading] = React.useState(true) + const [error, setError] = React.useState(null) + const [repos, setRepos] = React.useState>([]) + const [inFlight, setInFlight] = React.useState(false) + + const handleImport = (name: string, fullName: string) => { + setInFlight(true) + + fetch('/project/new/github-sync', { + method: 'POST', + headers: { + 'X-CSRF-Token': getMeta('ol-csrfToken'), + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + projectName: name, + repo: fullName, + }), + }) + .then(response => response.json()) + .then(data => { + if (data.projectId) { + window.location.href = `/project/${data.projectId}` + } else { + throw new Error('Failed to import project') + } + }) + .catch(error => { + console.error('Error importing GitHub repository:', error) + setError(error instanceof Error ? error.message : 'Unknown error') + setInFlight(false) + }) + } + + // Fetch data from '/user/github-sync/repos', + // and set isLoading to false once data is fetched + React.useEffect(() => { + async function fetchRepos() { + try { + const response = await fetch('/user/github-sync/repos') + if (!response.ok) { + throw new Error('Network response was not ok') + } + // Assuming the response is a JSON array of repositories + const reposData = await response.json() + setRepos(reposData.repos) + } catch (error) { + console.error('Error fetching GitHub repositories:', error) + setError(error instanceof Error ? error.message : 'Unknown error') + } finally { + setIsLoading(false) + } + } + fetchRepos() + }, []) + + return ( + <> + { + isLoading ? ( +
+
+ + {t('loading_github_repositories')} +
+
+ ) : error ? ( +
+

{error}

+
+ ) : ( + <> +

{ + t('select_github_repository', { appName: appName }) + } +

+
+ + + {repos.map((repo) => ( + + + + + ))} + +
{repo.name} + + + {/* */} + handleImport(repo.name, repo.fullName)} + > + { t('import_to_sharelatex', { appName: appName })} + +
+
+ + ) + } + + ) +} + +type ImportFromGitHubModalProps = { + onHide: () => void +} + +export default function ImportFromGitHubModal({ onHide }: ImportFromGitHubModalProps) { + const { t } = useTranslation() + return ( + + + + {t('import_from_github')} + + + + + + + + {t('cancel')} + + + + ) +} \ No newline at end of file diff --git a/services/web/modules/github-sync/index.mjs b/services/web/modules/github-sync/index.mjs new file mode 100644 index 0000000000..0c8f3af24c --- /dev/null +++ b/services/web/modules/github-sync/index.mjs @@ -0,0 +1,10 @@ +import GitHubSyncRouter from './app/src/GitHubSyncRouter.mjs' + +/** @import { WebModule } from "../../types/web-module" */ + +/** @type {WebModule} */ +const GitHubSyncModule = { + router: GitHubSyncRouter, +} + +export default GitHubSyncModule \ No newline at end of file From fa29536aa23cff4edc402e76a907e7c50b1af6be Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 24 Feb 2026 03:51:20 +0000 Subject: [PATCH 02/25] dev: update dev yml for github sync, also added with ldap test, Readme doc --- develop/README.md | 1 + develop/docker-compose.dev.yml | 11 +++++++++++ develop/docker-compose.yml | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/develop/README.md b/develop/README.md index 2cd6a38c4b..bd1e299a96 100644 --- a/develop/README.md +++ b/develop/README.md @@ -80,6 +80,7 @@ each service: | `history-v1` | 9239 | | `project-history` | 9240 | | `linked-url-proxy` | 9241 | +| `github-sync` | 9242 | To attach to a service using Chrome's _remote debugging_, go to and make sure _Discover network targets_ is checked. Next diff --git a/develop/docker-compose.dev.yml b/develop/docker-compose.dev.yml index d6f20310fd..d9d7796d9b 100644 --- a/develop/docker-compose.dev.yml +++ b/develop/docker-compose.dev.yml @@ -65,6 +65,17 @@ services: - ../services/filestore/app.js:/overleaf/services/filestore/app.js - ../services/filestore/config:/overleaf/services/filestore/config + github-sync: + command: ["node", "--watch", "app.js"] + environment: + - NODE_OPTIONS=--inspect=0.0.0.0:9229 + ports: + - "127.0.0.1:9242:9229" + volumes: + - ../services/github-sync/app:/overleaf/services/github-sync/app + - ../services/github-sync/app.js:/overleaf/services/github-sync/app.js + - ../services/github-sync/config:/overleaf/services/github-sync/config + history-v1: command: ["node", "--watch", "app.js"] environment: diff --git a/develop/docker-compose.yml b/develop/docker-compose.yml index c22ec0129c..6630790d83 100644 --- a/develop/docker-compose.yml +++ b/develop/docker-compose.yml @@ -71,6 +71,13 @@ services: - filestore-uploads:/overleaf/services/filestore/uploads - history-v1-buckets:/buckets + github-sync: + build: + context: .. + dockerfile: services/github-sync/Dockerfile + env_file: + - dev.env + history-v1: build: context: .. @@ -155,6 +162,7 @@ services: volumes: - sharelatex-data:/var/lib/overleaf - web-data:/overleaf/services/web/data + - ./data/certs/:/var/lib/overleaf/certs/ depends_on: - mongo - redis @@ -232,4 +240,10 @@ services: ports: - "8081:8081" environment: - ME_CONFIG_MONGODB_SERVER: mongo \ No newline at end of file + ME_CONFIG_MONGODB_SERVER: mongo + + # For ldap testing + # https://github.com/rroemhild/docker-test-openldap + ldap: + restart: always + image: ghcr.io/rroemhild/docker-test-openldap:v2.5.0 \ No newline at end of file From a48fef014e606c78e69356a89658537bf83d7be0 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 24 Feb 2026 05:59:23 +0000 Subject: [PATCH 03/25] web: update passport-ldapauth to 3.0.1 --- services/web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/package.json b/services/web/package.json index 6d6f1c939f..a7c29072d1 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -171,7 +171,7 @@ "parse-data-url": "^2.0.0", "passport": "^0.6.0", "passport-google-oauth20": "^2.0.0", - "passport-ldapauth": "^2.1.4", + "passport-ldapauth": "^3.0.1", "passport-local": "^1.0.0", "passport-oauth2": "^1.5.0", "passport-openidconnect": "^0.1.2", From 382d91450f9407af36f76f12b5c7deb1bed94072 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 24 Feb 2026 06:44:32 +0000 Subject: [PATCH 04/25] optimize: clean unused code and fix unauthorized github reminder - add reminder if user has not authorized github - add readme for API document --- services/web/modules/github-sync/Readme.md | 153 +++++++++ .../github-sync/app/src/GitHubApiClient.mjs | 76 +---- .../app/src/GitHubSyncController.mjs | 15 - .../app/src/GitHubSyncEncryption.mjs | 72 ----- .../github-sync/app/src/GitHubSyncHandler.mjs | 297 +----------------- .../github-sync/app/src/GitOperations.mjs | 195 ------------ .../import-from-github-modal-wrapper.tsx | 128 ++++---- 7 files changed, 234 insertions(+), 702 deletions(-) create mode 100644 services/web/modules/github-sync/Readme.md delete mode 100644 services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs delete mode 100644 services/web/modules/github-sync/app/src/GitOperations.mjs diff --git a/services/web/modules/github-sync/Readme.md b/services/web/modules/github-sync/Readme.md new file mode 100644 index 0000000000..4798401637 --- /dev/null +++ b/services/web/modules/github-sync/Readme.md @@ -0,0 +1,153 @@ +# GitHub Sync API Document + +### API End Point: + +#### 01. Link and Unlink Github Account (Finished in web/modules) +Appeared in user setting page, user can link or unlink github account here. +``` +GET `/github-sync/beginAuth` +``` +It will redirect to github auth and fetch token. + + +Appear in user setting page too, user can unlink github account here. It will revoke token and remove github account info in our database. +``` +POST /github-sync/unlink +{"_csrf": "xxxx" } +``` +Result: just refresh page after success. + + +#### 02. Import Project from Github + +In project list page, we can select import from github, it should shows all repos. +``` +GET: /user/github-sync/repos +{ + "repos": [ + { + "name": "testRepoName", + "full_name": "user/testRepoName" + }, + { + "name": "testRepoName2", + "full_name": "user/testRepoName2" + }, + ] +} +``` + + +``` +POST: `/project/new/github-sync` +{"projectName":"auto-overleaf","repo":"ayaka-notes/auto-overleaf"} +``` + +API return: +``` +{"project_id":"699b0d628a0bdc986b68f21a"} +``` + +#### 03. Publish new project to github +``` +POST: /project/699b0ea46161d1787ce2329b/github-sync/export +{name: "internal-test", description: "internal-test", private: true, org: "ayaka-notes"} +``` + +``` +GET: /user/github-sync/status # check if paid user +{available: true, enabled: true} +``` + + +#### 04. Sync between overleaf and github +When user open project github sync modal, we will fetch github sync status and show it in modal, user can choose to pull github's change or merge overleaf's change to github. + +There are no difference between pull and merge, the only difference is push need a `message` for commit, but pull not. + +Internally, we will export overleaf's changes since last sync point to github (export as a branch), and then we will try to merge the exported branch to default branch (main/master/etc). +- if there is no conflict, we will just merge it, delete the exported branch. +- if there is conflict, we will keep the exported branch and show the unmerged branch info in modal, user can choose to merge or not. + +When there are no conflict, we will just merge the change, delete the exported branch and update sync point. + +Once sync point is determined, we will fetch all changed files since last sync point, and then we will replace all of those files in overleaf with the content in github, and then we will update sync point to latest commit. + +Get github sync status, including if github sync enabled, merge status, repo info, unmerged branch info and owner info. +``` +GET /project/699b0ea46161d1787ce2329b/github-sync/status +{ + "enabled": true, + "merge_status": "success", + "repo": "ayaka-notes/internal-test", + "unmerged_branch": null, + "owner_id": "698bf0400fb804ce63648e1a", + "owner": { + "_id": "698bf0400fb804ce63648e1a", + "email": "xxxx@outlook.in", + "githubFeature": { + "available": true, + "enabled": true + } + } +} +``` + +Pull github's change (maybe some changes Since last sync point) +``` +GET /project/699b0ea46161d1787ce2329b/github-sync/commits/unmerged +{diverged: false, commits: []} +{ + "diverged": false, + "commits": [ + { + "message": "Update main.tex", + "author": { + "name": "xxxx", + "email": "xxxx@xxx.xxx.cn", + "date": "2026-02-22T14:24:30Z" + }, + "sha": "94bf4029733794b9b68fb2692ec06d6a75b5c2b6" + } + ] +} +// or another example: +{ + "diverged": false, + "commits": [ + { + "message": "Update introduction section content", + "author": { + "name": "xxx", + "email": "xxx@xx.edu.cn", + "date": "2026-02-22T16:07:32Z" + }, + "sha": "6bf04e90903975d1b197b0626d9578dbc599176d" + }, + { + "message": "Update main.tex", + "author": { + "name": "xxx", + "email": "xxx@xx.edu.cn", + "date": "2026-02-22T16:07:40Z" + }, + "sha": "1d3f5b1811de8ba25e1407d8f08c0126660cafaf" + }, + { + "message": "Update main.tex", + "author": { + "name": "xxx", + "email": "xxx@xx.edu.cn", + "date": "2026-02-22T16:07:57Z" + }, + "sha": "34d4c2506fbff5cf4a66e4ca63687e64e290e097" + } + ] +} +``` + +User commit overleaf's change to github. +``` +POST /github-sync/merge +{message: "123123123"} +``` \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs index fbc79e4207..9caca8709d 100644 --- a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs +++ b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs @@ -43,11 +43,7 @@ async function verifyPat(pat) { } /** - * List repositories for the authenticated user - * @param {string} pat - Personal Access Token - * @param {number} [page=1] - Page number - * @param {number} [perPage=100] - Results per page - * @returns {Promise>} + * List 100 repositories for the authenticated user */ async function listRepos(pat, page = 1, perPage = 100) { const params = new URLSearchParams({ @@ -69,19 +65,16 @@ async function listRepos(pat, page = 1, perPage = 100) { } let repos = await response.json() - const linkHeader = response.headers.get('link') - logger.debug({ linkHeader }, 'GitHub API Link header for pagination') return repos.map(repo => ({ - // owner: repo.owner.login, name: repo.name, fullName: repo.full_name, - // private: repo.private, - // defaultBranch: repo.default_branch, })) } - +/** + * List All repositories for the authenticated user + */ async function listAllRepos(pat) { let page = 1 const perPage = 100 @@ -96,69 +89,8 @@ async function listAllRepos(pat) { } -/** - * List branches for a repository - * @param {string} pat - Personal Access Token - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @returns {Promise>} - */ -async function listBranches(pat, owner, repo) { - const response = await fetch( - `${GITHUB_API_BASE}/repos/${owner}/${repo}/branches`, - { - headers: getHeaders(pat), - } - ) - - if (!response.ok) { - if (response.status === 404) { - throw new Error('Repository not found') - } - throw new Error(`GitHub API error: ${response.status}`) - } - - const branches = await response.json() - return branches.map(branch => ({ - name: branch.name, - protected: branch.protected, - })) -} - -/** - * Check if a repository exists and user has access - * @param {string} pat - Personal Access Token - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @returns {Promise<{exists: boolean, hasWriteAccess: boolean, defaultBranch: string}>} - */ -async function checkRepoAccess(pat, owner, repo) { - const response = await fetch( - `${GITHUB_API_BASE}/repos/${owner}/${repo}`, - { - headers: getHeaders(pat), - } - ) - - if (!response.ok) { - if (response.status === 404) { - return { exists: false, hasWriteAccess: false, defaultBranch: null } - } - throw new Error(`GitHub API error: ${response.status}`) - } - - const repoData = await response.json() - return { - exists: true, - hasWriteAccess: repoData.permissions?.push ?? false, - defaultBranch: repoData.default_branch, - } -} - export default { verifyPat, listRepos, listAllRepos, - listBranches, - checkRepoAccess, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index 71540fcaa1..8466cd0ec8 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -48,20 +48,6 @@ async function getProjectStatus(req, res) { res.json(status) } -/** - * Push project to GitHub - */ -async function pushProject(req, res) { - const userId = SessionManager.getLoggedInUserId(req.session) - const { Project_id: projectId } = req.params - - try { - await GitHubSyncHandler.promises.pushProjectToGitHub(projectId, userId) - res.json({ success: true }) - } catch (error) { - res.status(400).json({ error: error.message }) - } -} @@ -192,7 +178,6 @@ export default { completeRegistration: expressify(completeRegistration), listRepos: expressify(listRepos), getProjectStatus: expressify(getProjectStatus), - pushProject: expressify(pushProject), importRepo: expressify(importRepo), exportProject: expressify(exportProject), getUnmergedCommits: expressify(getUnmergedCommits), diff --git a/services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs b/services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs deleted file mode 100644 index cd81803aac..0000000000 --- a/services/web/modules/github-sync/app/src/GitHubSyncEncryption.mjs +++ /dev/null @@ -1,72 +0,0 @@ -import crypto from 'node:crypto' -import Settings from '@overleaf/settings' - -const ALGORITHM = 'aes-256-gcm' -const IV_LENGTH = 16 -const AUTH_TAG_LENGTH = 16 - -/** - * Get encryption secret from settings - * @returns {Buffer} - */ -function getSecret() { - const secret = Settings.githubSyncEncryptionSecret - if (!secret) { - throw new Error('GITHUB_SYNC_ENCRYPTION_SECRET is not configured') - } - // Convert hex string to buffer (64 hex chars = 32 bytes) - return Buffer.from(secret, 'hex') -} - -/** - * Encrypt a GitHub PAT for storage - * @param {string} pat - The plaintext PAT - * @returns {string} - Base64 encoded encrypted string (iv + authTag + ciphertext) - */ -function encrypt(pat) { - const secret = getSecret() - const iv = crypto.randomBytes(IV_LENGTH) - const cipher = crypto.createCipheriv(ALGORITHM, secret, iv) - - let encrypted = cipher.update(pat, 'utf8', 'base64') - encrypted += cipher.final('base64') - - const authTag = cipher.getAuthTag() - - // Combine iv + authTag + encrypted data - const combined = Buffer.concat([ - iv, - authTag, - Buffer.from(encrypted, 'base64'), - ]) - - return combined.toString('base64') -} - -/** - * Decrypt a stored GitHub PAT - * @param {string} encryptedPat - Base64 encoded encrypted string - * @returns {string} - The plaintext PAT - */ -function decrypt(encryptedPat) { - const secret = getSecret() - const combined = Buffer.from(encryptedPat, 'base64') - - // Extract iv, authTag, and encrypted data - const iv = combined.subarray(0, IV_LENGTH) - const authTag = combined.subarray(IV_LENGTH, IV_LENGTH + AUTH_TAG_LENGTH) - const encrypted = combined.subarray(IV_LENGTH + AUTH_TAG_LENGTH) - - const decipher = crypto.createDecipheriv(ALGORITHM, secret, iv) - decipher.setAuthTag(authTag) - - let decrypted = decipher.update(encrypted, undefined, 'utf8') - decrypted += decipher.final('utf8') - - return decrypted -} - -export default { - encrypt, - decrypt, -} \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 0b2c178183..15110486fe 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -1,51 +1,11 @@ -import path from 'node:path' -import fs from 'node:fs/promises' -import { User } from '../../../../app/src/models/User.mjs' import { Project } from '../../../../app/src/models/Project.mjs' -import ProjectEntityHandler from '../../../../app/src/Features/Project/ProjectEntityHandler.mjs' -import ProjectCreationHandler from '../../../../app/src/Features/Project/ProjectCreationHandler.mjs' -import ProjectEntityUpdateHandler from '../../../../app/src/Features/Project/ProjectEntityUpdateHandler.mjs' -import FileStoreHandler from '../../../../app/src/Features/FileStore/FileStoreHandler.mjs' -import GitHubSyncEncryption from './GitHubSyncEncryption.mjs' import GitHubApiClient from './GitHubApiClient.mjs' -import GitOperations from './GitOperations.mjs' import { GitHubSyncUserCredentials } from '../models/githubSyncUserCredentials.mjs' import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import SecretsHelper from './SecretsHelper.mjs' -/** - * Connect a user's GitHub account by storing their PAT - * @param {string} userId - User ID - * @param {string} pat - Personal Access Token - * @returns {Promise<{username: string}>} - */ -async function connectUserGitHub(userId, pat) { - // Verify PAT with GitHub - const githubUser = await GitHubApiClient.verifyPat(pat) - - // Encrypt the PAT - const tokenEncrypted = GitHubSyncEncryption.encrypt(pat) - - // Update user document - await User.updateOne( - { _id: userId }, - { - $set: { - 'githubSync.enabled': true, - 'githubSync.tokenEncrypted': tokenEncrypted, - 'githubSync.username': githubUser.login, - 'githubSync.connectedAt': new Date(), - }, - } - ) - - return { username: githubUser.login } -} - - - /** * Get user's GitHub sync status */ @@ -60,20 +20,7 @@ async function getUserGitHubStatus(userId) { } } -/** - * Get decrypted PAT for a user - * @param {string} userId - User ID - * @returns {Promise} - */ -async function getUserPat(userId) { - const user = await User.findById(userId, 'githubSync.tokenEncrypted').lean() - - if (!user?.githubSync?.tokenEncrypted) { - return null - } - return GitHubSyncEncryption.decrypt(user.githubSync.tokenEncrypted) -} /** * List user's GitHub repositories @@ -89,80 +36,8 @@ async function listUserRepos(userId) { return await GitHubApiClient.listAllRepos(pat) } -/** - * List branches for a repository - * @param {string} userId - User ID - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @returns {Promise} - */ -async function listRepoBranches(userId, owner, repo) { - const pat = await getUserPat(userId) - if (!pat) { - throw new Error('GitHub not connected') - } - - return await GitHubApiClient.listBranches(pat, owner, repo) -} - -/** - * Configure GitHub sync for a project - * @param {string} projectId - Project ID - * @param {string} userId - User ID - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @param {string} branch - Branch name - */ -async function configureProjectSync(projectId, userId, owner, repo, branch) { - const pat = await getUserPat(userId) - if (!pat) { - throw new Error('GitHub not connected') - } - // Verify repository access - const access = await GitHubApiClient.checkRepoAccess(pat, owner, repo) - if (!access.exists) { - throw new Error('Repository not found') - } - if (!access.hasWriteAccess) { - throw new Error('No write access to repository') - } - // Update project - await Project.updateOne( - { _id: projectId }, - { - $set: { - 'githubSync.enabled': true, - 'githubSync.repoOwner': owner, - 'githubSync.repoName': repo, - 'githubSync.branch': branch, - }, - } - ) -} - -/** - * Remove GitHub sync configuration from a project - * @param {string} projectId - Project ID - */ -async function unconfigureProjectSync(projectId) { - await Project.updateOne( - { _id: projectId }, - { - $set: { - 'githubSync.enabled': false, - }, - $unset: { - 'githubSync.repoOwner': 1, - 'githubSync.repoName': 1, - 'githubSync.branch': 1, - 'githubSync.lastSyncedAt': 1, - 'githubSync.lastSyncedBy': 1, - }, - } - ) -} /** * Get project's GitHub sync status @@ -185,167 +60,6 @@ async function getProjectSyncStatus(projectId) { } } -/** - * Push project to GitHub - * @param {string} projectId - Project ID - * @param {string} userId - User ID - */ -async function pushProjectToGitHub(projectId, userId) { - // Get project and user data - const project = await Project.findById(projectId, 'name githubSync').lean() - if (!project?.githubSync?.enabled) { - throw new Error('GitHub sync not configured for this project') - } - - const pat = await getUserPat(userId) - if (!pat) { - throw new Error('GitHub not connected') - } - - const { repoOwner, repoName, branch } = project.githubSync - - // Create temp directory - const tempDir = await GitOperations.createTempDir() - - try { - // Export all docs - const docs = await ProjectEntityHandler.promises.getAllDocs(projectId) - for (const doc of docs) { - const filePath = path.join(tempDir, doc.path) - await fs.mkdir(path.dirname(filePath), { recursive: true }) - await fs.writeFile(filePath, doc.lines.join('\n')) - } - - // Export all files (binary files) - const files = await ProjectEntityHandler.promises.getAllFiles(projectId) - for (const file of files) { - const filePath = path.join(tempDir, file.path) - await fs.mkdir(path.dirname(filePath), { recursive: true }) - - // Get file from FileStore - const stream = await FileStoreHandler.promises.getFileStream( - projectId, - file.file._id.toString() - ) - - const writeStream = (await import('node:fs')).createWriteStream(filePath) - await new Promise((resolve, reject) => { - stream.pipe(writeStream) - stream.on('error', reject) - writeStream.on('finish', resolve) - writeStream.on('error', reject) - }) - } - - // Push to GitHub - const commitMessage = `Sync from Overleaf: ${project.name}` - await GitOperations.pushToGitHub(tempDir, pat, repoOwner, repoName, branch, commitMessage) - - // Update last synced time - await Project.updateOne( - { _id: projectId }, - { - $set: { - 'githubSync.lastSyncedAt': new Date(), - 'githubSync.lastSyncedBy': userId, - }, - } - ) - } finally { - // Cleanup temp directory - await GitOperations.removeTempDir(tempDir) - } -} - -/** - * Import a GitHub repository as a new Overleaf project - * @param {string} userId - User ID - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @param {string} branch - Branch to import - * @returns {Promise<{projectId: string}>} - */ -async function importFromGitHub(userId, owner, repo, branch) { - const pat = await getUserPat(userId) - if (!pat) { - throw new Error('GitHub not connected') - } - - // Clone repository - const tempDir = await GitOperations.cloneRepo(pat, owner, repo, branch) - - try { - // Create new project - const projectName = repo - const project = await ProjectCreationHandler.promises.createBlankProject( - userId, - projectName - ) - - // Get list of files from cloned repo - const files = await GitOperations.listFiles(tempDir) - - // Get root folder ID - const rootFolderId = project.rootFolder[0]._id - - // Add files to project - for (const filePath of files) { - const fullPath = path.join(tempDir, filePath) - const content = await fs.readFile(fullPath) - const fileName = path.basename(filePath) - const dirPath = path.dirname(filePath) - - // Determine folder to add to - let folderId = rootFolderId - - // Create folder structure if needed - if (dirPath !== '.') { - const folderParts = dirPath.split(path.sep) - for (const folderName of folderParts) { - // For simplicity, add to root. A full implementation would create subfolders. - // TODO: Create proper folder structure - } - } - - // Check if it's a text file (likely .tex, .bib, .sty, etc.) - const textExtensions = ['.tex', '.bib', '.sty', '.cls', '.txt', '.md', '.bst', '.cfg'] - const ext = path.extname(fileName).toLowerCase() - - if (textExtensions.includes(ext)) { - // Add as doc - const lines = content.toString('utf8').split('\n') - await ProjectEntityUpdateHandler.promises.addDoc( - project._id.toString(), - folderId.toString(), - fileName, - lines, - userId, - 'github-import' - ) - } else { - // Add as file - await ProjectEntityUpdateHandler.promises.addFile( - project._id.toString(), - folderId.toString(), - fileName, - content, - null, // linkedFileData - userId, - 'github-import' - ) - } - } - - // Configure GitHub sync for the new project - await configureProjectSync(project._id.toString(), userId, owner, repo, branch) - - return { projectId: project._id.toString() } - } finally { - // Cleanup temp directory - await GitOperations.removeTempDir(tempDir) - } -} - // This function would exchange the OAuth code for an access token with GitHub // For security, this should be done server-side and not exposed to the client @@ -390,7 +104,8 @@ async function saveGitHubAccessTokenForUser(userId, accessToken) { } /** - * Disconnect a user's GitHub account + * Remove a user's GitHub access token from the database. + * Revokes the token with GitHub before deleting it locally.(try) * @param {string} userId - User ID */ async function removeGitHubAccessTokenForUser(userId) { @@ -431,17 +146,9 @@ async function getGitHubAccessTokenForUser(userId) { export default { promises: { - connectUserGitHub, - // disconnectUserGitHub, getUserGitHubStatus, - getUserPat, listUserRepos, - listRepoBranches, - configureProjectSync, - unconfigureProjectSync, getProjectSyncStatus, - pushProjectToGitHub, - importFromGitHub, exchangeCodeForToken, saveGitHubAccessTokenForUser, removeGitHubAccessTokenForUser, diff --git a/services/web/modules/github-sync/app/src/GitOperations.mjs b/services/web/modules/github-sync/app/src/GitOperations.mjs deleted file mode 100644 index 75a37775e7..0000000000 --- a/services/web/modules/github-sync/app/src/GitOperations.mjs +++ /dev/null @@ -1,195 +0,0 @@ -import { spawn } from 'node:child_process' -import fs from 'node:fs/promises' -import path from 'node:path' -import os from 'node:os' -import crypto from 'node:crypto' - -/** - * Sanitize git error messages to remove any embedded credentials - * @param {string} message - Error message that may contain credentials - * @returns {string} - Sanitized message with credentials replaced - */ -function sanitizeGitError(message) { - // Remove credentials from URLs like https://token@github.com/... - return message.replace(/https:\/\/[^@\s]+@/g, 'https://***@') -} - -/** - * Execute a git command - * @param {string[]} args - Git command arguments - * @param {string} cwd - Working directory - * @param {Object} [env] - Additional environment variables - * @returns {Promise<{stdout: string, stderr: string}>} - */ -function execGit(args, cwd, env = {}) { - return new Promise((resolve, reject) => { - const child = spawn('git', args, { - cwd, - env: { - ...process.env, - GIT_TERMINAL_PROMPT: '0', // Prevent interactive prompts - ...env, - }, - }) - - let stdout = '' - let stderr = '' - - child.stdout.on('data', data => { - stdout += data.toString() - }) - - child.stderr.on('data', data => { - stderr += data.toString() - }) - - child.on('close', code => { - if (code === 0) { - resolve({ stdout, stderr }) - } else { - // Sanitize stderr to remove any credentials before including in error - const sanitizedStderr = sanitizeGitError(stderr) - const error = new Error(`Git command failed with code ${code}: ${sanitizedStderr}`) - error.code = code - error.stderr = sanitizedStderr - reject(error) - } - }) - - child.on('error', reject) - }) -} - -/** - * Create a temporary directory for git operations - * @returns {Promise} Path to temp directory - */ -async function createTempDir() { - const tempBase = os.tmpdir() - const dirName = `overleaf-github-sync-${crypto.randomBytes(8).toString('hex')}` - const tempDir = path.join(tempBase, dirName) - await fs.mkdir(tempDir, { mode: 0o700, recursive: true }) - return tempDir -} - -/** - * Remove a temporary directory and all its contents - * @param {string} dirPath - Path to directory - */ -async function removeTempDir(dirPath) { - try { - await fs.rm(dirPath, { recursive: true, force: true }) - } catch (error) { - console.error(`Failed to remove temp directory ${dirPath}:`, error) - } -} - -/** - * Clone a GitHub repository to a temporary directory - * @param {string} pat - Personal Access Token - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @param {string} branch - Branch to clone - * @returns {Promise} Path to cloned repository - */ -async function cloneRepo(pat, owner, repo, branch) { - const tempDir = await createTempDir() - // Use clean URL without credentials - PAT is passed via credential helper - const cloneUrl = `https://github.com/${owner}/${repo}.git` - - try { - await execGit( - [ - '-c', `credential.helper=!f() { echo "password=${pat}"; }; f`, - 'clone', '--depth', '1', '--branch', branch, cloneUrl, '.' - ], - tempDir - ) - - // Remove .git directory to get just the files - await fs.rm(path.join(tempDir, '.git'), { recursive: true, force: true }) - - return tempDir - } catch (error) { - await removeTempDir(tempDir) - throw error - } -} - -/** - * Initialize a git repo and push to GitHub - * @param {string} projectDir - Directory containing project files - * @param {string} pat - Personal Access Token - * @param {string} owner - Repository owner - * @param {string} repo - Repository name - * @param {string} branch - Branch to push to - * @param {string} commitMessage - Commit message - * @returns {Promise} - */ -async function pushToGitHub(projectDir, pat, owner, repo, branch, commitMessage) { - // Use clean URL without credentials - PAT is passed via credential helper - const repoUrl = `https://github.com/${owner}/${repo}.git` - - // Initialize git repo - await execGit(['init'], projectDir) - - // Configure git user (required for commit) - await execGit(['config', 'user.email', 'overleaf@localhost'], projectDir) - await execGit(['config', 'user.name', 'Overleaf'], projectDir) - - // Add all files - await execGit(['add', '-A'], projectDir) - - // Create commit - await execGit(['commit', '-m', commitMessage, '--allow-empty'], projectDir) - - // Add remote (clean URL without credentials) - await execGit(['remote', 'add', 'origin', repoUrl], projectDir) - - // Force push to the specified branch using credential helper for auth - await execGit( - [ - '-c', `credential.helper=!f() { echo "password=${pat}"; }; f`, - 'push', '--force', 'origin', `HEAD:${branch}` - ], - projectDir - ) -} - -/** - * List all files in a directory recursively - * @param {string} dirPath - Directory path - * @param {string} [basePath=''] - Base path for relative paths - * @returns {Promise} List of relative file paths - */ -async function listFiles(dirPath, basePath = '') { - const files = [] - const entries = await fs.readdir(dirPath, { withFileTypes: true }) - - for (const entry of entries) { - const relativePath = basePath ? path.join(basePath, entry.name) : entry.name - - // Skip hidden files/directories (like .git) - if (entry.name.startsWith('.')) { - continue - } - - if (entry.isDirectory()) { - const subFiles = await listFiles(path.join(dirPath, entry.name), relativePath) - files.push(...subFiles) - } else { - files.push(relativePath) - } - } - - return files -} - -export default { - createTempDir, - removeTempDir, - cloneRepo, - pushToGitHub, - listFiles, - execGit, -} \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx index 3009ee043a..d3450bbe80 100644 --- a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx +++ b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx @@ -15,13 +15,14 @@ const ModalContent = () => { const { t } = useTranslation() const { appName } = getMeta('ol-ExposedSettings') const [isLoading, setIsLoading] = React.useState(true) + const [isEnabled, setIsEnabled] = React.useState(false) const [error, setError] = React.useState(null) const [repos, setRepos] = React.useState>([]) const [inFlight, setInFlight] = React.useState(false) const handleImport = (name: string, fullName: string) => { setInFlight(true) - + fetch('/project/new/github-sync', { method: 'POST', headers: { @@ -51,6 +52,20 @@ const ModalContent = () => { // Fetch data from '/user/github-sync/repos', // and set isLoading to false once data is fetched React.useEffect(() => { + async function checkIfEnabled() { + try { + const response = await fetch('/user/github-sync/status') + if (!response.ok) { + throw new Error('Network response was not ok') + } + const statusData = await response.json() + setIsEnabled(statusData.enabled) + } catch (error) { + console.error('Error checking GitHub sync status:', error) + setError(error instanceof Error ? error.message : 'Unknown error') + } + } + async function fetchRepos() { try { const response = await fetch('/user/github-sync/repos') @@ -67,64 +82,69 @@ const ModalContent = () => { setIsLoading(false) } } + checkIfEnabled() fetchRepos() }, []) return ( <> - { - isLoading ? ( -
-
- - {t('loading_github_repositories')} -
+ {isLoading ? ( +
+
+ + {t('loading_github_repositories')}
- ) : error ? ( -
-

{error}

+
+ ) : isEnabled ? ( + <> + { + error &&

{error}

+ } +

+ {t('select_github_repository', { appName })} +

+
+ + + {repos.map((repo) => ( + + + + + ))} + +
+ {repo.name} + + + handleImport(repo.name, repo.fullName)} + > + {t('import_to_sharelatex', { appName })} + +
- ) : ( - <> -

{ - t('select_github_repository', { appName: appName }) - } -

-
- - - {repos.map((repo) => ( - - - - - ))} - -
{repo.name} - - - {/* */} - handleImport(repo.name, repo.fullName)} - > - { t('import_to_sharelatex', { appName: appName })} - -
-
- - ) + + ) : +
+

{ + t('link_to_github_description', { appName }) + }

+ + {t('link_to_github')} + +
+ } ) @@ -136,8 +156,10 @@ type ImportFromGitHubModalProps = { export default function ImportFromGitHubModal({ onHide }: ImportFromGitHubModalProps) { const { t } = useTranslation() + // backdrop="static" can prevent the modal from being closed by + // clicking outside of it return ( - + {t('import_from_github')} From 8ae670357a1bd0b227a99b2ab166cf0ac60ec88f Mon Sep 17 00:00:00 2001 From: Musicminion Date: Thu, 26 Feb 2026 06:41:56 +0000 Subject: [PATCH 05/25] feat: support import and export for github --- services/github-sync/app.js | 11 +- .../app/js/GitHubSyncController.js | 75 ++++ .../github-sync/app/js/GitHubSyncHandler.js | 288 +++++++++++++ .../app/js/GitHubSyncMiddleware.js | 27 ++ services/github-sync/app/js/SecretHelper.js | 35 ++ .../app/js/modals/githubSyncEntityVersions.js | 86 ++++ .../app/js/modals/githubSyncProjectStates.js | 48 +++ .../js/modals/githubSyncUserCredentials.js | 54 +++ services/github-sync/app/js/modals/index.js | 15 + services/github-sync/app/js/server.js | 19 +- .../github-sync/config/settings.defaults.cjs | 2 +- services/web/config/settings.defaults.js | 8 + services/web/modules/github-sync/Readme.md | 30 +- .../app/models/githubSyncProjectStates.mjs | 33 ++ .../github-sync/app/src/GitHubApiClient.mjs | 144 +++++++ .../app/src/GitHubSyncController.mjs | 83 +++- .../github-sync/app/src/GitHubSyncHandler.mjs | 145 ++++--- .../github-sync/app/src/GitHubSyncRouter.mjs | 14 +- .../github-sync/app/src/SecretsHelper.mjs | 1 + .../js/components/github-integration-card.tsx | 404 ++++++++++++++++++ .../js/components/github-sync-widget.tsx | 8 - .../frontend/js/components/tsconfig.json | 18 + 22 files changed, 1467 insertions(+), 81 deletions(-) create mode 100644 services/github-sync/app/js/GitHubSyncController.js create mode 100644 services/github-sync/app/js/GitHubSyncHandler.js create mode 100644 services/github-sync/app/js/GitHubSyncMiddleware.js create mode 100644 services/github-sync/app/js/SecretHelper.js create mode 100644 services/github-sync/app/js/modals/githubSyncEntityVersions.js create mode 100644 services/github-sync/app/js/modals/githubSyncProjectStates.js create mode 100644 services/github-sync/app/js/modals/githubSyncUserCredentials.js create mode 100644 services/github-sync/app/js/modals/index.js create mode 100644 services/web/modules/github-sync/app/models/githubSyncProjectStates.mjs create mode 100644 services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx create mode 100644 services/web/modules/github-sync/frontend/js/components/tsconfig.json diff --git a/services/github-sync/app.js b/services/github-sync/app.js index 397bf9c44f..24b9a7afa4 100644 --- a/services/github-sync/app.js +++ b/services/github-sync/app.js @@ -1,12 +1,21 @@ // Metrics must be initialized before importing anything else import '@overleaf/metrics/initialize.js' - import logger from '@overleaf/logger' import Settings from '@overleaf/settings' import { createServer } from './app/js/server.js' +import { mongoClient } from './app/js/mongodb.js' const port = Settings.internal?.githubSync?.port const host = Settings.internal?.githubSync?.host +mongoClient + .connect() + .then(() => { + logger.debug('Connected to MongoDB from GitHub Sync service') + }) + .catch(err => { + logger.fatal({ err }, 'Cannot connect to mongo. Exiting.') + process.exit(1) + }) const { server } = createServer() server.listen(port, host, err => { diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js new file mode 100644 index 0000000000..8c095174e4 --- /dev/null +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -0,0 +1,75 @@ +import { GitHubSyncProjectStates } from './modals/index.js' +import GithubSyncHandler from './GitHubSyncHandler.js' +import { expressify } from '@overleaf/promise-utils' + + +// {name: "123123", description: "13123123123", private: true, org: "ayaka-notes"} +// need to check if status existed, if existed, refuse to link github repo. +async function exportProjectToGithub(req, res, next) { + const { Project_id: projectId, user_id: userId } = req.params + const { name, description, private: isPrivate, org } = req.body + // org can be optional + if (!projectId || !name || isPrivate === undefined) { + return res.status(400).json({ error: 'Project_id, name and private are required' }) + } + + try { + const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + if (projectStatus) { + return res.status(400).json({ error: 'Project is already linked to a GitHub repository' }) + } + const repoResult = await GithubSyncHandler.promises.createRepositoryOnGitHub( + userId, + name, + description, + isPrivate, + org + ) + const repoFullName = repoResult.full_name + const defaultBranch = repoResult.default_branch + + + const statusData = await GithubSyncHandler.promises.initializeRepositoryForProject( + projectId, + userId, + repoFullName, + defaultBranch + ) + + res.json({ statusData }) + } catch (err) { + res.status(500).json({ error: err.message }) + } +} + + +// p 699dd39a8a419bfc8f417400 +// u 699d40291c632958125dbdab +async function dev(req, res, next) { + const { Project_id: projectId } = req.params + const { user_id: userId } = req.params + // const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + // const userCredentials = await GithubSyncHandler.promises.getUserGitHubCredentials(userId) + + const repoName = `test-repo-${Date.now()}` + + const createTest = await GithubSyncHandler.promises.createRepositoryOnGitHub( + userId, + repoName, + 'This is a test repository created by GitHub Sync Service', + true, + 'ayaka-notes' + ) + + const repoFullName = createTest.full_name + const defaultBranch = createTest.default_branch + + await GithubSyncHandler.promises.initializeRepositoryForProject(projectId, userId, repoFullName, defaultBranch) + + res.json({ projectId, userId, repoFullName }) +} + +export default { + exportProjectToGithub, + dev +} \ No newline at end of file diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js new file mode 100644 index 0000000000..89ad291dd0 --- /dev/null +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -0,0 +1,288 @@ +import logger from '@overleaf/logger' +import { GitHubSyncProjectStates, GitHubSyncUserCredentials } from './modals/index.js' +import { ObjectId } from './mongodb.js' +import SecretHelper from './SecretHelper.js' +import Settings from '@overleaf/settings' + + +const GITHUB_API_BASE = 'https://api.github.com' + +async function getProjectGitHubSyncStatus(projectId) { + return GitHubSyncProjectStates.findByProjectId(projectId) +} + +async function saveProjectGitHubSyncStatus(projectId, status) { + return GitHubSyncProjectStates.saveByProjectId(projectId, status) +} + + +async function getUserGitHubCredentials(userId) { + const credentials = await GitHubSyncUserCredentials.findByUserId(userId) + if (!credentials) { + return null + } + return await SecretHelper.decryptAccessToken(credentials.auth_token_encrypted) +} + +// This function will create a repository on GitHub for the project +// If org is provided, it will create the repository under the organization, otherwise it will create the repository under the user's account. +// We will initialize the repository with a README file, and then we will remove the README file later, because we need to make sure the repository is not empty, otherwise GitHub API will reject our commit. +// No other initialization is done in this function. +async function createRepositoryOnGitHub(userId, repoName, repoDescription, isPrivate, org) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const githubApiUrl = org + ? `${GITHUB_API_BASE}/orgs/${org}/repos` + : `${GITHUB_API_BASE}/user/repos` + + const response = await fetch(githubApiUrl, { + method: 'POST', + headers: { + 'Authorization': `token ${accessToken}`, + 'Accept': 'application/vnd.github.v3+json', + }, + body: JSON.stringify({ + name: repoName, + description: repoDescription, + private: isPrivate, + auto_init: true, // we need this, but will remove later. + }), + }) + + if (!response.ok) { + const errorData = await response.json() + logger.error('Failed to create GitHub repository', { userId, repoName, error: errorData }) + throw new Error(`GitHub API error: ${errorData.message}`) + } + + const repoData = await response.json() + return repoData +} + + + + +// Request files list from project history, should return like this +// { +// "projectId": "699fbae90f632055939d7a5d", +// "files": { +// "main.tex": { +// "data": { +// "hash": "fd3c0326302e49486d3ea86c833edf9b88320c41" +// } +// }, +// "sample.bib": { +// "data": { +// "hash": "a0e21c740cf81e868f158e30e88985b5ea1d6c19" +// } +// }, +// "frog.jpg": { +// "data": { +// "hash": "5b889ef3cf71c83a4c027c4e4dc3d1a106b27809" +// } +// }, +// } +// We added version for next step to pull file contents. +async function getProjectLatestVersion(projectId) { + let verURL = `${Settings.apis.project_history.url}/project/${projectId}/version` + const response = await fetch(verURL) + if (!response.ok) { + const errorData = await response.json() + logger.error('Failed to pull project version from Project History', { projectId, error: errorData }) + throw new Error(`Project History API error: ${errorData.message}`) + } + const versionData = await response.json() + const latestVersion = versionData.version + + let URL = `${Settings.apis.project_history.url}/project/${projectId}/version/${latestVersion}` + const fileResponse = await fetch(URL) + if (!fileResponse.ok) { + const errorData = await fileResponse.json() + logger.error('Failed to pull project files from Project History', { projectId, version: latestVersion, error: errorData }) + throw new Error(`Project History API error: ${errorData.message}`) + } + + let result = await fileResponse.json() + result.version = latestVersion + return result +} + + +async function uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) { + const encoding = 'base64' + const content = buffer.toString('base64') + + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/blobs`, { + method: 'POST', + headers: { + 'Authorization': `token ${accessToken}`, + 'Accept': 'application/vnd.github.v3+json', + }, + body: JSON.stringify({ + content, + encoding, + }), + }) + + if (!response.ok) { + const errorData = await response.json() + logger.error('Failed to upload blob to GitHub', { repoFullName, filePath, error: errorData }) + throw new Error(`GitHub API error: ${errorData.message}`) + } + + const blobData = await response.json() + return blobData.sha +} + +async function createTreeOnGitHub(repoFullName, blobShas, accessToken) { + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/trees`, { + method: 'POST', + headers: { + 'Authorization': `token ${accessToken}`, + 'Accept': 'application/vnd.github.v3+json', + }, + body: JSON.stringify({ + tree: blobShas.map(item => ({ + path: item.path, + sha: item.sha, + mode: '100644', + type: 'blob', + })), + }), + }) + + if (!response.ok) { + const errorData = await response.json() + logger.error('Failed to create tree on GitHub', { repoFullName, error: errorData }) + throw new Error(`GitHub API error: ${errorData.message}`) + } + + const treeData = await response.json() + return treeData.sha +} + + +async function createCommitOnGitHub(repoFullName, treeSha, message, accessToken, parents = []) { + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/commits`, { + method: 'POST', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + body: JSON.stringify({ + message, + tree: treeSha, + parents: parents, + }), + }) + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + logger.error('Failed to create commit on GitHub', { repoFullName, error: errorData }) + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) + } + + const commitData = await response.json() + return commitData.sha +} + + +// We need to remove init README. +async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, accessToken) { + const response = await fetch( + `${GITHUB_API_BASE}/repos/${repoFullName}/git/refs/heads/${branch}`, + { + method: 'PATCH', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + sha: commitSha, + force: true, // + }), + } + ) + + const text = await response.text().catch(() => '') + if (!response.ok) { + let err = {} + try { err = JSON.parse(text) } catch {} + logger.error({ repoFullName, branch, commitSha, status: response.status, body: text }, 'Failed to force update ref') + throw new Error(`GitHub API error: ${err.message || text || response.statusText}`) + } + + return JSON.parse(text) +} + + +// Export a project to GitHub will be a complex process, +// 1. We need to get the latest version of the project, and get the file list with their hashes from project history service. +// 2. Then we need to pull the file contents from project history service, and upload the file blobs to GitHub, and get the blob shas. +// 3. Then, we need to create a tree with all the blobs, and create a commit with the tree, and finally update the ref of the repo to point to the new commit. +// 4. Finally, we need to save the GitHub sync status to the database, so we can show the status on the UI. +async function initializeRepositoryForProject(projectId, userId, repoFullName, defaultBranch) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + let blobShas = [] + try { + // Get latest version, then ask for file contents. + const latestVersionData = await getProjectLatestVersion(projectId) + const latestVersion = latestVersionData.version + + + for(const filePath in latestVersionData.files) { + const fileURL = `${Settings.apis.project_history.url}/project/${projectId}/version/${latestVersion}/${encodeURIComponent(filePath)}` + logger.debug({ projectId, filePath, fileURL }, 'Pulling project file from Project History') + const fileResponse = await fetch(fileURL) + if (!fileResponse.ok) { + const errorData = await fileResponse.json() + logger.error('Failed to pull project file from Project History', { projectId, filePath, error: errorData }) + throw new Error(`Project History API error: ${errorData.message}`) + } + const buffer = Buffer.from(await fileResponse.arrayBuffer()) + const blobSha = await uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) + blobShas.push({ path: filePath, sha: blobSha }) + + logger.debug({ projectId, filePath, blobSha }, 'Uploaded file blob to GitHub Successfully') + } + + // // Then, we need to create a tree with all the blobs, and create a commit with the tree, and finally update the ref of the repo to point to the new commit. + const treeSha = await createTreeOnGitHub(repoFullName, blobShas, accessToken) + const commitSha = await createCommitOnGitHub(repoFullName, treeSha, `Initial commit for project ${projectId}`, accessToken) + + const updateRefResult = await forceUpdateBranchToCommit(repoFullName, defaultBranch, commitSha, accessToken) + + logger.debug({ projectId, repoFullName, treeSha, commitSha, updateRefResult }, 'Created initial commit on GitHub Successfully') + + // Finally, we need to save the GitHub sync status to the database, so we can show the status on the UI. + return await saveProjectGitHubSyncStatus(projectId, { + merge_status: 'success', + default_branch: defaultBranch, + unmerged_branch: null, + last_sync_sha: commitSha, + last_sync_version: latestVersion, + repo: repoFullName, + ownerId: new ObjectId(userId), + }) + } catch (err) { + logger.error({ err, projectId }, 'Error initializing GitHub repository for project') + throw err + } +} + +export default { + promises: { + getProjectGitHubSyncStatus, + getUserGitHubCredentials, + createRepositoryOnGitHub, + initializeRepositoryForProject, + } +} \ No newline at end of file diff --git a/services/github-sync/app/js/GitHubSyncMiddleware.js b/services/github-sync/app/js/GitHubSyncMiddleware.js new file mode 100644 index 0000000000..8a14712e9d --- /dev/null +++ b/services/github-sync/app/js/GitHubSyncMiddleware.js @@ -0,0 +1,27 @@ +import pLimit from 'p-limit' + +const projectLimiters = new Map() + +function getProjectLimiter(projectId) { + if (!projectLimiters.has(projectId)) { + projectLimiters.set(projectId, pLimit(1)) + } + return projectLimiters.get(projectId) +} + +export function projectConcurrencyMiddleware(req, res, next) { + const projectId = req.params.Project_id + if (!projectId) return res.status(400).json({ error: 'Missing Project_id' }) + const limiter = getProjectLimiter(projectId) + limiter(() => new Promise(resolve => { + req._releaseLimiter = resolve + next() + })) +} + +export function releaseProjectLimiter(req, res, next) { + if (req._releaseLimiter) { + req._releaseLimiter() + } + next() +} \ No newline at end of file diff --git a/services/github-sync/app/js/SecretHelper.js b/services/github-sync/app/js/SecretHelper.js new file mode 100644 index 0000000000..689cbb6f34 --- /dev/null +++ b/services/github-sync/app/js/SecretHelper.js @@ -0,0 +1,35 @@ +import AccessTokenEncryptor from '@overleaf/access-token-encryptor' +import logger from '@overleaf/logger' + +const accessTokenEncryptor = new AccessTokenEncryptor({ + cipherPasswords: { + [process.env.CIPHER_LABEL || "2042.1-v3"]: process.env.CIPHER_PASSWORD, + }, + cipherLabel: process.env.CIPHER_LABEL || "2042.1-v3", +}) + +const SecretsHelper = { + async encryptAccessToken(accessToken) { + let tokenEncrypted = "" + try { + tokenEncrypted = await accessTokenEncryptor.promises.encryptJson(accessToken) + } catch (err) { + logger.error({ err }, 'Error encrypting GitHub access token') + return "" // Return empty string on encryption failure + } + return tokenEncrypted + }, + + async decryptAccessToken(tokenEncrypted) { + let tokenDecrypted = "" + try { + tokenDecrypted = await accessTokenEncryptor.promises.decryptToJson(tokenEncrypted) + } catch (err) { + logger.error({ err }, 'Error decrypting GitHub access token') + return "" // Return empty string on decryption failure + } + return tokenDecrypted + } +} + +export default SecretsHelper \ No newline at end of file diff --git a/services/github-sync/app/js/modals/githubSyncEntityVersions.js b/services/github-sync/app/js/modals/githubSyncEntityVersions.js new file mode 100644 index 0000000000..3ed2c42595 --- /dev/null +++ b/services/github-sync/app/js/modals/githubSyncEntityVersions.js @@ -0,0 +1,86 @@ +import { db, ObjectId } from '../mongodb.js' + +const ENTITY_VERSION_TTL_MS = 1000 * 60 * 60 * 24 * 30 + +function normalizeObjectId(value) { + if (value instanceof ObjectId) { + return value + } + return new ObjectId(value) +} + +function defaultExpiresAt() { + return new Date(Date.now() + ENTITY_VERSION_TTL_MS) +} + +async function findOne(query = {}, options = {}) { + return await db.githubSyncEntityVersions.findOne(query, options) +} + +async function findByProjectIdAndEntityId(projectId, entityId, options = {}) { + return await findOne( + { + pid: normalizeObjectId(projectId), + eid: normalizeObjectId(entityId), + }, + options + ) +} + +async function saveOrUpdate(projectId, entityId, version, expiresAt) { + const now = new Date() + await db.githubSyncEntityVersions.updateOne( + { + pid: normalizeObjectId(projectId), + eid: normalizeObjectId(entityId), + }, + { + $set: { + pid: normalizeObjectId(projectId), + eid: normalizeObjectId(entityId), + v: version, + c: expiresAt || defaultExpiresAt(), + updated_at: now, + }, + $setOnInsert: { + created_at: now, + }, + }, + { upsert: true } + ) + + return await findByProjectIdAndEntityId(projectId, entityId) +} + +async function updateByProjectIdAndEntityId(projectId, entityId, update = {}) { + const now = new Date() + const nextUpdate = { ...update, updated_at: now } + if (!Object.hasOwn(nextUpdate, 'c')) { + nextUpdate.c = defaultExpiresAt() + } + + await db.githubSyncEntityVersions.updateOne( + { + pid: normalizeObjectId(projectId), + eid: normalizeObjectId(entityId), + }, + { $set: nextUpdate } + ) + + return await findByProjectIdAndEntityId(projectId, entityId) +} + +async function removeByProjectIdAndEntityId(projectId, entityId) { + return await db.githubSyncEntityVersions.deleteOne({ + pid: normalizeObjectId(projectId), + eid: normalizeObjectId(entityId), + }) +} + +export default { + findOne, + findByProjectIdAndEntityId, + saveOrUpdate, + updateByProjectIdAndEntityId, + removeByProjectIdAndEntityId, +} diff --git a/services/github-sync/app/js/modals/githubSyncProjectStates.js b/services/github-sync/app/js/modals/githubSyncProjectStates.js new file mode 100644 index 0000000000..27455d0602 --- /dev/null +++ b/services/github-sync/app/js/modals/githubSyncProjectStates.js @@ -0,0 +1,48 @@ +import { db, ObjectId } from '../mongodb.js' + +function normalizeObjectId(value) { + if (value instanceof ObjectId) { + return value + } + return new ObjectId(value) +} + +async function findOne(query = {}, options = {}) { + return await db.githubSyncProjectStates.findOne(query, options) +} + +async function findByProjectId(projectId, options = {}) { + return await findOne({ projectId: normalizeObjectId(projectId) }, options) +} + +// no upsert, only update if existed, otherwise return null +async function updateByProjectId(projectId, update = {}) { + await db.githubSyncProjectStates.updateOne( + { projectId: normalizeObjectId(projectId) }, + { $set: { ...update } } + ) + return await findByProjectId(projectId) +} + +// with upsert true +async function saveByProjectId(projectId, update = {}) { + await db.githubSyncProjectStates.updateOne( + { projectId: normalizeObjectId(projectId) }, + { $set: { ...update } }, + { upsert: true } + ) + return await findByProjectId(projectId) +} + +async function removeByProjectId(projectId) { + return await db.githubSyncProjectStates.deleteOne({ + projectId: normalizeObjectId(projectId), + }) +} + +export default { + findOne, + findByProjectId, + updateByProjectId, + saveByProjectId, +} diff --git a/services/github-sync/app/js/modals/githubSyncUserCredentials.js b/services/github-sync/app/js/modals/githubSyncUserCredentials.js new file mode 100644 index 0000000000..1518c7f967 --- /dev/null +++ b/services/github-sync/app/js/modals/githubSyncUserCredentials.js @@ -0,0 +1,54 @@ +import { db, ObjectId } from '../mongodb.js' + +function normalizeObjectId(value) { + if (value instanceof ObjectId) { + return value + } + return new ObjectId(value) +} + +async function findOne(query = {}, options = {}) { + return await db.githubSyncUserCredentials.findOne(query, options) +} + +async function findByUserId(userId, options = {}) { + return await findOne({ userId: normalizeObjectId(userId) }, options) +} + +async function saveOrUpdateByUserId(userId, authTokenEncrypted) { + await db.githubSyncUserCredentials.updateOne( + { userId: normalizeObjectId(userId) }, + { + $set: { + auth_token_encrypted: authTokenEncrypted, + }, + $setOnInsert: { + }, + }, + { upsert: true } + ) + + return await findByUserId(userId) +} + +async function updateByUserId(userId, update = {}) { + await db.githubSyncUserCredentials.updateOne( + { userId: normalizeObjectId(userId) }, + { $set: { ...update } } + ) + return await findByUserId(userId) +} + +async function removeByUserId(userId) { + return await db.githubSyncUserCredentials.deleteMany({ + userId: normalizeObjectId(userId), + }) +} + +export default { + findOne, + findByUserId, + saveOrUpdateByUserId, + updateByUserId, + removeByUserId, +} diff --git a/services/github-sync/app/js/modals/index.js b/services/github-sync/app/js/modals/index.js new file mode 100644 index 0000000000..91211d6cd6 --- /dev/null +++ b/services/github-sync/app/js/modals/index.js @@ -0,0 +1,15 @@ +import GitHubSyncUserCredentials from './githubSyncUserCredentials.js' +import GitHubSyncProjectStates from './githubSyncProjectStates.js' +import GitHubSyncEntityVersions from './githubSyncEntityVersions.js' + +export { + GitHubSyncUserCredentials, + GitHubSyncProjectStates, + GitHubSyncEntityVersions, +} + +export default { + GitHubSyncUserCredentials, + GitHubSyncProjectStates, + GitHubSyncEntityVersions, +} diff --git a/services/github-sync/app/js/server.js b/services/github-sync/app/js/server.js index 6858d4da84..60da4ce806 100644 --- a/services/github-sync/app/js/server.js +++ b/services/github-sync/app/js/server.js @@ -1,9 +1,11 @@ import express from 'express' -import { db, ObjectId } from './mongodb.js' +import GitHubSyncController from './GitHubSyncController.js' +import { projectConcurrencyMiddleware, releaseProjectLimiter } from './GitHubSyncMiddleware.js' export function createServer() { const app = express() - + app.use(express.json()) + app.get('/status', (_req, res) => { res.status(200).json({ status: 'ok', service: 'github-sync' }) }) @@ -12,5 +14,18 @@ export function createServer() { res.sendStatus(204) }) + app.post('/project/:Project_id/user/:user_id/export', + projectConcurrencyMiddleware, + GitHubSyncController.exportProjectToGithub, + releaseProjectLimiter + ) + + + app.get('/project/:Project_id/user/:user_id/dev', + projectConcurrencyMiddleware, + GitHubSyncController.dev, + releaseProjectLimiter + ) + return { app, server: app } } \ No newline at end of file diff --git a/services/github-sync/config/settings.defaults.cjs b/services/github-sync/config/settings.defaults.cjs index 5fadf3fb56..59e66492e5 100644 --- a/services/github-sync/config/settings.defaults.cjs +++ b/services/github-sync/config/settings.defaults.cjs @@ -8,7 +8,7 @@ https.globalAgent.keepAlive = false module.exports = { internal: { githubSync: { - host: process.env.GITHUB_SYNC_HOST || process.env.LISTEN_ADDRESS || '127.0.0.1', + host: process.env.LISTEN_ADDRESS || '127.0.0.1', port: 3022, }, }, diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index 3ec5dc2d8d..eb58fc21f0 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -303,6 +303,10 @@ module.exports = { // For legacy reasons, we need to populate the below objects. v1: {}, recurly: {}, + + github_sync: { + url: `http://${process.env.GITHUB_SYNC_HOST || '127.0.0.1'}:${process.env.GITHUB_SYNC_PORT || 3022}`, + }, }, // Defines which features are allowed in the @@ -1095,6 +1099,10 @@ module.exports = { __dirname, '../modules/git-bridge/frontend/js/components/git-bridge-integration-card.tsx' ), + Path.resolve( + __dirname, + '../modules/github-sync/frontend/js/components/github-integration-card.tsx' + ), ], referenceSearchSetting: [], errorLogsComponents: [], diff --git a/services/web/modules/github-sync/Readme.md b/services/web/modules/github-sync/Readme.md index 4798401637..0b8f5fb469 100644 --- a/services/web/modules/github-sync/Readme.md +++ b/services/web/modules/github-sync/Readme.md @@ -18,7 +18,7 @@ POST /github-sync/unlink Result: just refresh page after success. -#### 02. Import Project from Github +#### 02. Import Project from Github (Finished in web/modules) In project list page, we can select import from github, it should shows all repos. ``` @@ -37,7 +37,7 @@ GET: /user/github-sync/repos } ``` - +After select a repo, we can create a new project with that repo, it will import all files in that repo to the new project, and link that repo to the project. ``` POST: `/project/new/github-sync` {"projectName":"auto-overleaf","repo":"ayaka-notes/auto-overleaf"} @@ -49,11 +49,16 @@ API return: ``` #### 03. Publish new project to github +In a created project, we can export a project to github(create a new repo, and export current project to that repo). ``` POST: /project/699b0ea46161d1787ce2329b/github-sync/export {name: "internal-test", description: "internal-test", private: true, org: "ayaka-notes"} ``` +Check if user has github sync feature, if user has, we will return github sync status. +- enabled: if user hase linked github account +- available: if paid user(we set to true currently) + ``` GET: /user/github-sync/status # check if paid user {available: true, enabled: true} @@ -74,15 +79,24 @@ When there are no conflict, we will just merge the change, delete the exported b Once sync point is determined, we will fetch all changed files since last sync point, and then we will replace all of those files in overleaf with the content in github, and then we will update sync point to latest commit. Get github sync status, including if github sync enabled, merge status, repo info, unmerged branch info and owner info. + +Check project github sync status, including if github sync enabled, merge status, repo info, unmerged branch info and owner info. ``` GET /project/699b0ea46161d1787ce2329b/github-sync/status { + "enabled": true, + + "merge_status": "success", + "repo": "ayaka-notes/internal-test", + "unmerged_branch": null, - "owner_id": "698bf0400fb804ce63648e1a", - "owner": { + + "owner_id": "698bf0400fb804ce63648e1a", + + "owner": { "_id": "698bf0400fb804ce63648e1a", "email": "xxxx@outlook.in", "githubFeature": { @@ -94,11 +108,14 @@ GET /project/699b0ea46161d1787ce2329b/github-sync/status ``` Pull github's change (maybe some changes Since last sync point) +Authorization: shared user with read/write can commit changes. ``` GET /project/699b0ea46161d1787ce2329b/github-sync/commits/unmerged {diverged: false, commits: []} { + "diverged": false, + "commits": [ { "message": "Update main.tex", @@ -146,8 +163,9 @@ GET /project/699b0ea46161d1787ce2329b/github-sync/commits/unmerged } ``` -User commit overleaf's change to github. +User commit overleaf's change to github. +Authorization: shared user with read/write can commit changes. ``` -POST /github-sync/merge +POST /project/699c54c33e4bb0e9c15e00c4/github-sync/merge {message: "123123123"} ``` \ No newline at end of file diff --git a/services/web/modules/github-sync/app/models/githubSyncProjectStates.mjs b/services/web/modules/github-sync/app/models/githubSyncProjectStates.mjs new file mode 100644 index 0000000000..91d9890832 --- /dev/null +++ b/services/web/modules/github-sync/app/models/githubSyncProjectStates.mjs @@ -0,0 +1,33 @@ +import mongoose from "../../../../app/src/infrastructure/Mongoose.mjs" + +const { Schema } = mongoose +const { ObjectId } = Schema + +export const GitHubSyncProjectStatesSchema = new Schema( + { + // the project we sync to github + projectId: { type: ObjectId, ref: 'Project', required: true, unique: true }, + // the user who syncs the project to github + // may not be the project owner, but must have write access to the project + // he can connect the project to github, and do sync operation. + ownerId: { type: ObjectId, ref: 'User', required: true }, + // the repo we sync to, in format "owner/repoName" + repo: { type: String, required: true }, + // if last merge is success + merge_status: { type: String, enum: ['success', 'failure', 'pending'], default: 'pending' }, + // sync branch + default_branch: { type: String, default: null }, + // if merge_status is failure, this field will be the branch name we pushed to. + unmerged_branch: { type: String, default: null }, + // the sha of last commit we synced to github + last_sync_sha: { type: String, default: null }, + // the version in overleaf project when we do last sync. + last_sync_version: { type: Number, default: null }, + }, + { collection: 'githubSyncProjectStates', minimize: false } +) + +export const GitHubSyncProjectStates = mongoose.model( + 'GitHubSyncProjectStates', + GitHubSyncProjectStatesSchema, +) \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs index 9caca8709d..04a86267ae 100644 --- a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs +++ b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs @@ -1,8 +1,15 @@ import logger from '@overleaf/logger' import fetch from 'node-fetch' +import Settings from '@overleaf/settings' +import HttpsProxyAgent from 'https-proxy-agent' const GITHUB_API_BASE = 'https://api.github.com' +// For example: 'http://127.0.0.1:1080' +const proxyUrl = process.env.GITHUB_SYNC_PROXY_URL +const httpsAgent = proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined + + /** * Create headers for GitHub API requests * @param {string} pat - Personal Access Token @@ -25,6 +32,7 @@ function getHeaders(pat) { async function verifyPat(pat) { const response = await fetch(`${GITHUB_API_BASE}/user`, { headers: getHeaders(pat), + agent: httpsAgent, }) if (!response.ok) { @@ -57,6 +65,7 @@ async function listRepos(pat, page = 1, perPage = 100) { `${GITHUB_API_BASE}/user/repos?${params.toString()}`, { headers: getHeaders(pat), + agent: httpsAgent, } ) @@ -88,9 +97,144 @@ async function listAllRepos(pat) { return allRepos } +/** + * Get repository info + * @param {string} pat - Personal Access Token + * @param {string} fullName - Full repository name (e.g. "owner/repo") + * @returns {Promise<{fullName: string, defaultBranch: string, latestCommitSha: string}>} + */ +async function getRepoInfo(pat, fullName) { + const response = await fetch(`${GITHUB_API_BASE}/repos/${fullName}`, { + headers: getHeaders(pat), + agent: httpsAgent, + }) + + if (!response.ok) { + if (response.status === 404) { + throw new Error('Repository not found or access denied') + } + throw new Error(`GitHub API error: ${response.status}`) + } + + const repo = await response.json() + const defaultBranch = repo.default_branch + + const branchResp = await fetch( + `${GITHUB_API_BASE}/repos/${fullName}/branches/${encodeURIComponent(defaultBranch)}`, + { headers: getHeaders(pat), agent: httpsAgent } + ) + + if (!branchResp.ok) { + throw new Error(`GitHub API error: ${branchResp.status}`) + } + + const branch = await branchResp.json() + + return { + fullName: repo.full_name, + defaultBranch: repo.default_branch, + latestCommitSha: branch.commit?.sha, + } +} + +async function listOrgs(pat) { + const response = await fetch(`${GITHUB_API_BASE}/user/orgs`, { + headers: getHeaders(pat), + agent: httpsAgent, + }) + + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status}`) + } + + const orgs = await response.json() + return orgs.map(org => ({ + login: org.login, + })) +} + +async function listUser(pat) { + const response = await fetch(`${GITHUB_API_BASE}/user`, { + headers: getHeaders(pat), + agent: httpsAgent, + }) + + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status}`) + } + + const user = await response.json() + + return { + login: user.login + } +} + +async function revokePat(token) { + const ULR = `${GITHUB_API_BASE}/applications/${Settings.githubSync.clientID}/token` + const clientId = Settings.githubSync.clientID + const clientSecret = Settings.githubSync.clientSecret + + if (!clientId || !clientSecret) { + logger.warn('GitHub client ID or secret not configured, skipping token revocation') + return + } + + const Authorization = `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}` + const resp = await fetch(ULR, { + method: 'DELETE', + agent: httpsAgent, + headers: { + 'Accept': 'application/vnd.github+json', + 'Authorization': Authorization, + }, + body: JSON.stringify({ access_token: token }), + }) + + if (!resp.ok) { + logger.warn(`Failed to revoke GitHub token: ${resp.status} ${await resp.text()}`) + } +} + + + +// This function would exchange the OAuth code for an access token with GitHub +// For security, this should be done server-side and not exposed to the client +// The implementation would involve making a POST request to GitHub's token endpoint +// with the client ID, client secret, and the code received from the OAuth callback +async function exchangeCodeForPat(code) { + const resp = await fetch('https://github.com/login/oauth/access_token', { + method: 'POST', + agent: httpsAgent, + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + client_id: Settings.githubSync.clientID, + client_secret: Settings.githubSync.clientSecret, + code, + redirect_uri: Settings.githubSync.callbackURL, + }), + }) + + const data = await resp.json() + if (!resp.ok || data.error) { + throw new Error( + `GitHub token exchange failed: ${data.error || resp.status} ${data.error_description || ''}`.trim() + ) + } + + return data +} export default { + exchangeCodeForPat, verifyPat, + revokePat, listRepos, listAllRepos, + listOrgs, + listUser, + getRepoInfo, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index 8466cd0ec8..21344414f2 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -8,7 +8,9 @@ import Path from 'path' import fs from 'fs' import crypto from 'crypto' import ProjectUploadManager from '../../../../app/src/Features/Uploads/ProjectUploadManager.mjs' -import { Readable } from 'node:stream' +import ProjectGetter from '../../../../app/src/Features/Project/ProjectGetter.mjs' +import { fetchJson } from '@overleaf/fetch-utils' +import UserGetter from '../../../../app/src/Features/User/UserGetter.mjs' /** @@ -18,6 +20,10 @@ async function getStatus(req, res) { const userId = SessionManager.getLoggedInUserId(req.session) const status = await GitHubSyncHandler.promises.getUserGitHubStatus(userId) + if (!status) { + return res.json({ enabled: false }) + } + res.json(status) } @@ -44,7 +50,18 @@ async function listRepos(req, res) { async function getProjectStatus(req, res) { const { Project_id: projectId } = req.params - const status = await GitHubSyncHandler.promises.getProjectSyncStatus(projectId) + const status = await GitHubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + + if (status && status.enabled) { + const ownerId = status.ownerId + const owner = await UserGetter.promises.getUser(ownerId, { + _id: 1, + email: 1, + }) + if (owner) { + status.owner = owner + } + } res.json(status) } @@ -59,7 +76,11 @@ async function importRepo(req, res) { const { projectName, repo } = req.body try { - const url = new URL(`https://api.github.com/repos/${repo}/zipball`) + // Get the latest sha1, branch name of a repo + const { defaultBranch, latestCommitSha } = await GitHubSyncHandler.promises.getRepoInfo(userId, repo) + + // Then download the zipball from GitHub and create a new project with that zipball + const url = new URL(`https://api.github.com/repos/${repo}/zipball/${encodeURIComponent(latestCommitSha)}`) const token = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(userId) const response = await fetch(url.toString(), { @@ -80,13 +101,33 @@ async function importRepo(req, res) { const ab = await response.arrayBuffer() fs.writeFileSync(fsPath, Buffer.from(ab)) - + // Upload zip to create a new project const { project } = await ProjectUploadManager.promises.createProjectFromZipArchiveWithName( userId, projectName, fsPath, {} ) + const projectId = project._id.toString() + + // Clean up temp file + fs.unlinkSync(fsPath) + + // Re get projectID and version + // We need get from project history, because that's more accurate. + const snapshot = await fetchJson( + `${Settings.apis.project_history.url}/project/${projectId}/version` + ) + const projectVersion = snapshot.version + await GitHubSyncHandler.promises.saveNewlySyncedProjectState( + project._id, + userId, + repo, + latestCommitSha, + defaultBranch, + projectVersion + ) + res.json({ projectId: project._id}) } catch (error) { logger.error({ err: error instanceof Error ? error : new Error(String(error)) }, 'Error importing GitHub repository') @@ -159,8 +200,34 @@ async function unlink(req, res) { res.json({ success: true }) } +/** + * Export changes to Github. + */ async function exportProject(req, res){ + const userId = SessionManager.getLoggedInUserId(req.session) + const { Project_id: projectId } = req.params + const { name, description, private: isPrivate, org } = req.body + logger.debug({ userId, projectId, name, isPrivate, org }, 'Received request to export project to GitHub') + if (!name || isPrivate === undefined || !projectId) { + return res.status(400).json({ error: 'Name, private and projectId are required' }) + } + + + try { + const repoResult = await GitHubSyncHandler.promises.exportProjectToGitHub( + userId, + projectId, + name, + description, + isPrivate, + org + ) + res.json(repoResult) + } catch (error) { + logger.error({ err: error instanceof Error ? error : new Error(String(error)) }, 'Error exporting project to GitHub') + res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' }) + } } async function getUnmergedCommits(req, res){ @@ -171,10 +238,18 @@ async function mergeFromGitHub(req, res){ } +// List user and user's orgs. +async function listOrgs(req, res) { + const userId = SessionManager.getLoggedInUserId(req.session) + const result = await GitHubSyncHandler.promises.getGitHubOrgsForUser(userId) + res.json(result) +} + export default { getStatus: expressify(getStatus), beginAuth: expressify(beginAuth), unlink: expressify(unlink), + listOrgs: expressify(listOrgs), completeRegistration: expressify(completeRegistration), listRepos: expressify(listRepos), getProjectStatus: expressify(getProjectStatus), diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 15110486fe..6b9282cfba 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -1,6 +1,7 @@ import { Project } from '../../../../app/src/models/Project.mjs' import GitHubApiClient from './GitHubApiClient.mjs' import { GitHubSyncUserCredentials } from '../models/githubSyncUserCredentials.mjs' +import { GitHubSyncProjectStates } from '../models/githubSyncProjectStates.mjs' import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import SecretsHelper from './SecretsHelper.mjs' @@ -20,7 +21,23 @@ async function getUserGitHubStatus(userId) { } } - +/** + * Get project's GitHub sync status + */ +async function getProjectGitHubSyncStatus(projectId) { + const projectStatus = await GitHubSyncProjectStates.findOne({ projectId }, + { + _id: 0, __v: 0, + last_sync_sha: 0, + last_sync_version: 0, + } + ).lean() + if (!projectStatus) { + return { enabled: false } + } + projectStatus.enabled = true + return projectStatus +} /** * List user's GitHub repositories @@ -37,27 +54,15 @@ async function listUserRepos(userId) { } - - /** - * Get project's GitHub sync status - * @param {string} projectId - Project ID - * @returns {Promise} + * Get project's GitHub sync status, directly from db. */ async function getProjectSyncStatus(projectId) { - const project = await Project.findById(projectId, 'githubSync').lean() - - if (!project?.githubSync?.enabled) { - return { configured: false } - } - - return { - configured: true, - repoOwner: project.githubSync.repoOwner, - repoName: project.githubSync.repoName, - branch: project.githubSync.branch, - lastSyncedAt: project.githubSync.lastSyncedAt, + const projectStatus = await GitHubSyncProjectStates.findOne({ projectId }, { _id: 0, __v: 0 }).lean() + if (!projectStatus) { + return { enabled: false } } + return projectStatus } @@ -66,29 +71,8 @@ async function getProjectSyncStatus(projectId) { // The implementation would involve making a POST request to GitHub's token endpoint // with the client ID, client secret, and the code received from the OAuth callback async function exchangeCodeForToken(code) { - const resp = await fetch('https://github.com/login/oauth/access_token', { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - client_id: Settings.githubSync.clientID, - client_secret: Settings.githubSync.clientSecret, - code, - redirect_uri: Settings.githubSync.callbackURL, - }), - }) - - const data = await resp.json() - if (!resp.ok || data.error) { - throw new Error( - `GitHub token exchange failed: ${data.error || resp.status} ${data.error_description || ''}`.trim() - ) - } - // data: { access_token, token_type, scope, (maybe expires_in/refresh_token...) } - return data + return await GitHubApiClient.exchangeCodeForToken(code) } // Save the GitHub access token for a user, encrypted in the database @@ -103,6 +87,22 @@ async function saveGitHubAccessTokenForUser(userId, accessToken) { await gitHubSyncUserCredentials.save() } +// Save githubSyncProjectStates for a project +async function saveNewlySyncedProjectState(projectId, ownerId, repo, sha, branch, ver) { + let gitHubSyncProjectStates = new GitHubSyncProjectStates() + gitHubSyncProjectStates.projectId = projectId + gitHubSyncProjectStates.ownerId = ownerId + gitHubSyncProjectStates.repo = repo + gitHubSyncProjectStates.merge_status = 'success' + gitHubSyncProjectStates.last_sync_sha = sha + gitHubSyncProjectStates.default_branch = branch + gitHubSyncProjectStates.last_sync_sha = sha + gitHubSyncProjectStates.last_sync_version = ver + await gitHubSyncProjectStates.save() +} + + + /** * Remove a user's GitHub access token from the database. * Revokes the token with GitHub before deleting it locally.(try) @@ -111,23 +111,8 @@ async function saveGitHubAccessTokenForUser(userId, accessToken) { async function removeGitHubAccessTokenForUser(userId) { let token = await getGitHubAccessTokenForUser(userId) if (token) { - let URL = `https://api.github.com/applications/${Settings.githubSync.clientID}/token` - let Authorization = `Basic ${Buffer.from(`${Settings.githubSync.clientID}:${Settings.githubSync.clientSecret}`).toString('base64')}` - // Revoke token with GitHub - const resp = await fetch(URL, { - method: 'DELETE', - headers: { - 'Accept': 'application/vnd.github+json', - 'Authorization': Authorization, - }, - body: JSON.stringify({ access_token: token }), - }) - - if (!resp.ok) { - logger.warn(`Failed to revoke GitHub token for user ${userId}: ${resp.status} ${await resp.text()}`) - } + await GitHubApiClient.revokePat(token) } - await GitHubSyncUserCredentials.deleteMany({ userId }) } @@ -143,15 +128,63 @@ async function getGitHubAccessTokenForUser(userId) { return await SecretsHelper.decryptAccessToken(credentials.auth_token_encrypted) } +/** + * Get a repo's basic info + * @param {string} userId - User ID + */ +async function getRepoInfo(userId, repoFullName) { + const pat = await getGitHubAccessTokenForUser(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + return await GitHubApiClient.getRepoInfo(pat, repoFullName) +} + +async function getGitHubOrgsForUser(userId) { + const pat = await getGitHubAccessTokenForUser(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + const orgs = await GitHubApiClient.listOrgs(pat) + const user = await GitHubApiClient.listUser(pat) + return { user: user, orgs: orgs } +} + +async function exportProjectToGitHub(userId, projectId, name, description, isPrivate, org) { + const url = `${Settings.apis.github_sync.url}/project/${projectId}/user/${userId}/export` + + logger.debug({ userId, projectId, url }, 'Exporting project to GitHub') + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ name, description, private: isPrivate, org }), + }) + + if (!response.ok) { + const errorText = await response.text() + throw new Error(`GitHub Sync Service error: ${response.status} - ${errorText}`) + } + + return await response.json() +} export default { promises: { getUserGitHubStatus, + getProjectGitHubSyncStatus, listUserRepos, getProjectSyncStatus, exchangeCodeForToken, saveGitHubAccessTokenForUser, removeGitHubAccessTokenForUser, getGitHubAccessTokenForUser, + getRepoInfo, + saveNewlySyncedProjectState, + getGitHubOrgsForUser, + exportProjectToGitHub, }, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs b/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs index aa04c299db..090a4f0a4e 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncRouter.mjs @@ -21,6 +21,14 @@ export default { GitHubSyncController.beginAuth ) + // Get user's Github org + webRouter.get( + '/user/github-sync/orgs', + AuthenticationController.requireLogin(), + GitHubSyncController.listOrgs + ) + + // OAuth callback for GitHub registration flow webRouter.get( '/github-sync/completeRegistration', @@ -48,7 +56,7 @@ export default { webRouter.post( '/project/:Project_id/github-sync/export', AuthenticationController.requireLogin(), - AuthorizationMiddleware.ensureUserCanAdminProject, + AuthorizationMiddleware.ensureUserCanWriteProjectContent, GitHubSyncController.exportProject ) @@ -63,7 +71,7 @@ export default { webRouter.get( '/project/:Project_id/github-sync/commits/unmerged', AuthenticationController.requireLogin(), - AuthorizationMiddleware.ensureUserCanAdminProject, + AuthorizationMiddleware.ensureUserCanWriteProjectContent, GitHubSyncController.getUnmergedCommits ) @@ -73,7 +81,7 @@ export default { webRouter.post( '/project/:Project_id/github-sync/merge', AuthenticationController.requireLogin(), - AuthorizationMiddleware.ensureUserCanAdminProject, + AuthorizationMiddleware.ensureUserCanWriteProjectContent, GitHubSyncController.mergeFromGitHub ) diff --git a/services/web/modules/github-sync/app/src/SecretsHelper.mjs b/services/web/modules/github-sync/app/src/SecretsHelper.mjs index feb90b1a23..689cbb6f34 100644 --- a/services/web/modules/github-sync/app/src/SecretsHelper.mjs +++ b/services/web/modules/github-sync/app/src/SecretsHelper.mjs @@ -1,4 +1,5 @@ import AccessTokenEncryptor from '@overleaf/access-token-encryptor' +import logger from '@overleaf/logger' const accessTokenEncryptor = new AccessTokenEncryptor({ cipherPasswords: { diff --git a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx new file mode 100644 index 0000000000..423850328c --- /dev/null +++ b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx @@ -0,0 +1,404 @@ + +import { useTranslation } from 'react-i18next' +import { useState, useEffect } from 'react' +import GithubLogo from '@/shared/svgs/github-logo' +import { useProjectContext } from '@/shared/context/project-context' +import IntegrationCard from '@/features/ide-redesign/components/integrations-panel/integration-card' +import { + OLModalBody, + OLModalFooter, + OLModalHeader, + OLModalTitle, + OLModal, +} from '@/shared/components/ol/ol-modal' +import OLButton from '@/shared/components/ol/ol-button' +import OLForm from '@/shared/components/ol/ol-form' +import OLFormGroup from '@/shared/components/ol/ol-form-group' +import OLFormControl from '@/shared/components/ol/ol-form-control' +import OLFormLabel from '@/shared/components/ol/ol-form-label' +import OLFormCheckbox from '@/shared/components/ol/ol-form-checkbox' +import OLFormSelect from '@/shared/components/ol/ol-form-select' + +import OLRow from '@/shared/components/ol/ol-row' +import OLCol from '@/shared/components/ol/ol-col' +import { + getJSON, + postJSON +} from '../../../../../frontend/js/infrastructure/fetch-json' +import getMeta from '@/utils/meta' + + +type GithubSyncModalLoadingProps = { + handleHide: () => void +} +const GithubSyncModalLoading = ({ handleHide }: GithubSyncModalLoadingProps) => { + const { t } = useTranslation() + return ( + <> + +
+ + {t('checking_project_github_status')} +
+
+ + + {t('cancel')} + + + + ) +} + +type GithubSyncModalExportingProps = { + handleHide: () => void + handleSetModalState: (modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit') => void +} +const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyncModalExportingProps) => { + const { t } = useTranslation() + const [orgs, setOrgs] = useState([]) + const [user, setUser] = useState('') + const [selectedOwner, setSelectedOwner] = useState('') + const [repoName, setRepoName] = useState('') + const [description, setDescription] = useState('') + const [visibility, setVisibility] = useState<'public' | 'private'>('private') + const [submitLoading, setSubmitLoading] = useState(false) + const { project } = useProjectContext() + + useEffect(() => { + const fetchOrgs = async () => { + try { + const data = await getJSON('/user/github-sync/orgs') + if (data.user) { + setUser(data.user.login) + setSelectedOwner(data.user.login) + } + if (data.orgs) { + setOrgs(data.orgs.map((org: any) => org.login)) + } + } catch (err: any) { + console.error('Failed to fetch GitHub orgs', err) + } + } + + fetchOrgs() + }, []) + + const handlerSubmit = (e: React.FormEvent) => { + e.preventDefault() + setSubmitLoading(true) + // Interface with backend + // Endpoint: /project//github-sync/export + + // description: "repoDescription" + // name: "repoName" + // private: true + // org: "test-org" (Optional, if not set, use user's) + const exportRepo = async () => { + try { + await postJSON(`/project/${project?._id}/github-sync/export`, { + body: { + name: repoName, + description, + private: visibility === 'private', + org: selectedOwner === user ? undefined : selectedOwner, + }, + }) + // After successful export, we should set modal status to loading. + + setSubmitLoading(false) + handleSetModalState('loading') + } catch (err: any) { + console.error('Failed to export project to GitHub', err) + setSubmitLoading(false) + } + } + + exportRepo() + } + + return ( + <> + +

{t('export_project_to_github')}

+

{t('project_not_linked_to_github')}

+ + + + + + {t('owner')} + + ) => + setSelectedOwner(e.target.value) + } + > + + {orgs.map(org => ( + + ))} + + + + + + + + {t('repository_name')} + + ) => + setRepoName(e.target.value) + } + /> + + + + + + + + + {t('description')} ({t('optional')}) + + ) => + setDescription(e.target.value) + } + /> + + + + +
+ +
+ + {t('repository_visibility')} + + + + + + setVisibility('public')} + label={t('public', { defaultValue: 'Public' })} + description={t('github_public_description')} + /> + + + + + + + + setVisibility('private')} + label={t('private', { defaultValue: 'Private' })} + description={t('github_private_description')} + /> + + + +
+
+
+ + + {t('cancel')} + + + {t('create_project_in_github')} + + + + ) +} + + +type GithubSyncModalMergingProps = { + handleHide: () => void + projectSyncStatus: any + // other props to show conflict and allow user to resolve conflict +} + +const GithubSyncModalMerging = ({ handleHide, projectSyncStatus }: GithubSyncModalMergingProps) => { + const { t } = useTranslation() + // appName + const { appName } = getMeta('ol-ExposedSettings') + return ( + <> + +

{t('project_linked_to')}: + + {projectSyncStatus.repo} + +

+
+ +
+

{t('no_new_commits_in_github')}

+
+
+ + +

+ + {t('push_sharelatex_changes_to_github', { appName })} + +

+ + +
+ + + {t('close')} + + + + ) +} + + +type GitHubSyncModalProps = { + show: boolean + handleHide: () => void + projectId: string +} + + +// 0. Check project github sync status +// Show spinner while loading, show error message if error occurs +// 1. If /project//github-sync/status +// returns {enabled: false} then show export Github table +// a) export Github table will check /user/github-sync/orgs +// b) once user submits export, spinner in button +// c) if export is successful, return to step 0, to reload status. +// 2. If /project//github-sync/status +// returns {enabled: true, merge_status: 'success'} +// then show pull/push table +// a) check /project//github-sync/commits/unmerged +// b) if there are unmerged commits, show pull button +// c) push button should always be shown +// 3. If /project//github-sync/status +// returns {enabled: true, merge_status: 'conflict'} +// then show conflict resolution contents. +// a) user can choose to merge confict in github, and submit +// remerge form overleaf. +function GitHubSyncModal({ show, handleHide, projectId }: GitHubSyncModalProps) { + const { t } = useTranslation() + const { project } = useProjectContext() + // loading: checking github sync status + // export: show export table to link github repo + // merge: show remote changes from github and allow user to pull/push + // pushSubmit: allow user to fill submit message + const [modalStatus, setModalStatus] = useState<'loading' | 'export' | 'merge' | 'pushSubmit'>('loading') + const [projectSyncStatus, setProjectSyncStatus] = useState(null) + + // If modalStatus is loading, we will fetch status + useEffect(() => { + if (!show || !project || modalStatus !== 'loading') { + return + } + const fetchGitHubSyncStatus = async () => { + try { + const data = await getJSON(`/project/${projectId}/github-sync/status`) + if (data.enabled) { + setModalStatus('merge') + setProjectSyncStatus(data) + } else { + setModalStatus('export') + } + } catch (err: any) { + console.error('Failed to fetch GitHub sync status', err) + } + } + + fetchGitHubSyncStatus() + }, [show, modalStatus]) + + return ( + + + {t('github_sync')} + + {modalStatus === 'loading' && } + {modalStatus === 'export' && } + {modalStatus === 'merge' && } + + + ) +} + + + + +const GitHubSyncCard = () => { + const { t } = useTranslation() + + const [showGithubSyncModal, setShowGithubSyncModal] = useState(false) + const { project, tags: projectTags } = useProjectContext() + + return ( + <> + } + showPaywallBadge={false} + onClick={() => setShowGithubSyncModal(true)} + > + + setShowGithubSyncModal(false)} + projectId={project?._id || ''} + /> + + ) +} + +export default GitHubSyncCard diff --git a/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx b/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx index df1f399774..1883c2264e 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx @@ -2,13 +2,9 @@ import { useCallback, useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { postJSON, - deleteJSON, getJSON, } from '../../../../../frontend/js/infrastructure/fetch-json' import OLButton from '@/shared/components/ol/ol-button' -import OLFormGroup from '@/shared/components/ol/ol-form-group' -import OLFormControl from '@/shared/components/ol/ol-form-control' -import OLFormLabel from '@/shared/components/ol/ol-form-label' import { OLModal, OLModalBody, @@ -29,9 +25,7 @@ export default function GitHubSyncWidget() { const [status, setStatus] = useState({ available: false, enabled: false }) const [loading, setLoading] = useState(true) const [error, setError] = useState('') - const [showConnectModal, setShowConnectModal] = useState(false) const [showDisconnectModal, setShowDisconnectModal] = useState(false) - const [connecting, setConnecting] = useState(false) const [disconnecting, setDisconnecting] = useState(false) const fetchStatus = useCallback(async () => { @@ -50,8 +44,6 @@ export default function GitHubSyncWidget() { fetchStatus() }, [fetchStatus]) - - const handleDisconnect = useCallback(async () => { setDisconnecting(true) setError('') diff --git a/services/web/modules/github-sync/frontend/js/components/tsconfig.json b/services/web/modules/github-sync/frontend/js/components/tsconfig.json new file mode 100644 index 0000000000..7159377670 --- /dev/null +++ b/services/web/modules/github-sync/frontend/js/components/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "ESNext", + "jsx": "react-jsx", + "lib": [ + "ESNext", + "DOM" + ], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": [ + "." + ] +} \ No newline at end of file From 9d061051a72ea64b13ba26250b8d305550c405c2 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Thu, 26 Feb 2026 15:53:20 +0000 Subject: [PATCH 06/25] github-sync: bug fix and new features: - fix repeated repo in github error display - add API for checking unmerged commits in github, with frontend dispaly - add commit message table in modal (ToDo: backend code) --- .../app/js/GitHubSyncController.js | 99 +++++++--- .../github-sync/app/js/GitHubSyncHandler.js | 4 +- .../app/js/GitHubSyncMiddleware.js | 20 ++- services/github-sync/app/js/server.js | 9 +- .../github-sync/app/src/GitHubApiClient.mjs | 38 ++++ .../app/src/GitHubSyncController.mjs | 42 +++++ .../github-sync/app/src/GitHubSyncHandler.mjs | 18 +- .../js/components/github-integration-card.tsx | 170 ++++++++++++++++-- 8 files changed, 344 insertions(+), 56 deletions(-) diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js index 8c095174e4..705edc9684 100644 --- a/services/github-sync/app/js/GitHubSyncController.js +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -3,8 +3,15 @@ import GithubSyncHandler from './GitHubSyncHandler.js' import { expressify } from '@overleaf/promise-utils' -// {name: "123123", description: "13123123123", private: true, org: "ayaka-notes"} -// need to check if status existed, if existed, refuse to link github repo. + +// This function will create a new repo on GitHub, export current project to that repo, +// and link the repo with the project by saving sync status in database. +// body: {name: "xxx", description: "xxx", private: true, org: "github-org-name"} +// name: the name of the repo to be created on GitHub, required +// description: the description of the repo to be created on GitHub, optional +// private: whether the repo is private or not, required +// org: if provided, the repo will be created under the organization, +// otherwise it will be created under user's account. async function exportProjectToGithub(req, res, next) { const { Project_id: projectId, user_id: userId } = req.params const { name, description, private: isPrivate, org } = req.body @@ -42,34 +49,80 @@ async function exportProjectToGithub(req, res, next) { } } +// This funcion will check github sync status. +// 0. No merge_status in db, return error, no linked repo. +// 1. If merge_status is `success` +// a), we will export a changes in overleaf since last sync to github, +// as a branch with name `overleaf-2026-02-26-1528` +// b), we will call api to merge the branch `overleaf-2026-02-26-1528` to default branch in our db. +// c), If merge success, goto step 3, +// if failed, we will set merge_status to `failure`, and +// set unmerged_branch to `overleaf-2026-02-26-1528`, +// and return error to client, [end] + +// 2. If merge_status is `failure` +// a), we will call api to merge unmerged_branch to default branch in our db. +// b), If merge success, goto step 3, +// if failed, we will keep merge_status to `failure`, and report error to client, [end] + +// 3. we need to remember the new merged sha, and compare it with old sha. +// a), list the differences between old sha and new sha +// b), post the changes to web service, give them a [filePath, URL], +// just like what we do in git-bridge, we use an internal API/v0 +// c), web service will download URL to a temp folder, and apply all changes to the project +// this is a realtime API call. + +// 4. we need to update the sync status in our db, +// set merge_status to `success`, unmerged_branch to null +// update last_sync_sha to new merged sha, and last_sync_version to version we just merged. +// [end] +async function mergeToGitHubAndPushback(req, res, next) { + const { Project_id: projectId, user_id: userId } = req.params + + try { + const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + if (!projectStatus) { + return res.status(400).json({ error: 'Project is not linked to a GitHub repository' }) + } + + } catch (err) { + res.status(500).json({ error: err.message }) + } +} + + + // p 699dd39a8a419bfc8f417400 // u 699d40291c632958125dbdab async function dev(req, res, next) { - const { Project_id: projectId } = req.params - const { user_id: userId } = req.params - // const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) - // const userCredentials = await GithubSyncHandler.promises.getUserGitHubCredentials(userId) - - const repoName = `test-repo-${Date.now()}` - - const createTest = await GithubSyncHandler.promises.createRepositoryOnGitHub( - userId, - repoName, - 'This is a test repository created by GitHub Sync Service', - true, - 'ayaka-notes' - ) - - const repoFullName = createTest.full_name - const defaultBranch = createTest.default_branch + // const { Project_id: projectId } = req.params + // const { user_id: userId } = req.params + // // const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + // // const userCredentials = await GithubSyncHandler.promises.getUserGitHubCredentials(userId) + + // const repoName = `test-repo-${Date.now()}` + + // const createTest = await GithubSyncHandler.promises.createRepositoryOnGitHub( + // userId, + // repoName, + // 'This is a test repository created by GitHub Sync Service', + // true, + // 'ayaka-notes' + // ) + + // const repoFullName = createTest.full_name + // const defaultBranch = createTest.default_branch - await GithubSyncHandler.promises.initializeRepositoryForProject(projectId, userId, repoFullName, defaultBranch) + // await GithubSyncHandler.promises.initializeRepositoryForProject(projectId, userId, repoFullName, defaultBranch) - res.json({ projectId, userId, repoFullName }) + // res.json({ projectId, userId, repoFullName }) } + + export default { - exportProjectToGithub, - dev + exportProjectToGithub: expressify(exportProjectToGithub), + mergeToGitHubAndPushback: expressify(mergeToGitHubAndPushback), + dev: expressify(dev) } \ No newline at end of file diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index 89ad291dd0..04845d810f 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -55,7 +55,7 @@ async function createRepositoryOnGitHub(userId, repoName, repoDescription, isPri if (!response.ok) { const errorData = await response.json() logger.error('Failed to create GitHub repository', { userId, repoName, error: errorData }) - throw new Error(`GitHub API error: ${errorData.message}`) + throw new Error(`Repository creation failed.`) } const repoData = await response.json() @@ -256,7 +256,7 @@ async function initializeRepositoryForProject(projectId, userId, repoFullName, d // // Then, we need to create a tree with all the blobs, and create a commit with the tree, and finally update the ref of the repo to point to the new commit. const treeSha = await createTreeOnGitHub(repoFullName, blobShas, accessToken) - const commitSha = await createCommitOnGitHub(repoFullName, treeSha, `Initial commit for project ${projectId}`, accessToken) + const commitSha = await createCommitOnGitHub(repoFullName, treeSha, `Initial Overleaf Import`, accessToken) const updateRefResult = await forceUpdateBranchToCommit(repoFullName, defaultBranch, commitSha, accessToken) diff --git a/services/github-sync/app/js/GitHubSyncMiddleware.js b/services/github-sync/app/js/GitHubSyncMiddleware.js index 8a14712e9d..a34a6e656f 100644 --- a/services/github-sync/app/js/GitHubSyncMiddleware.js +++ b/services/github-sync/app/js/GitHubSyncMiddleware.js @@ -13,15 +13,21 @@ export function projectConcurrencyMiddleware(req, res, next) { const projectId = req.params.Project_id if (!projectId) return res.status(400).json({ error: 'Missing Project_id' }) const limiter = getProjectLimiter(projectId) + limiter(() => new Promise(resolve => { - req._releaseLimiter = resolve + let released = false + const releaseOnce = () => { + if (released) return + released = true + resolve() + } + + req._releaseLimiter = releaseOnce + + res.on('finish', releaseOnce) + res.on('close', releaseOnce) + next() })) } -export function releaseProjectLimiter(req, res, next) { - if (req._releaseLimiter) { - req._releaseLimiter() - } - next() -} \ No newline at end of file diff --git a/services/github-sync/app/js/server.js b/services/github-sync/app/js/server.js index 60da4ce806..2f94ca5071 100644 --- a/services/github-sync/app/js/server.js +++ b/services/github-sync/app/js/server.js @@ -1,6 +1,6 @@ import express from 'express' import GitHubSyncController from './GitHubSyncController.js' -import { projectConcurrencyMiddleware, releaseProjectLimiter } from './GitHubSyncMiddleware.js' +import { projectConcurrencyMiddleware } from './GitHubSyncMiddleware.js' export function createServer() { const app = express() @@ -14,17 +14,20 @@ export function createServer() { res.sendStatus(204) }) + // Export a existing project to GitHub app.post('/project/:Project_id/user/:user_id/export', projectConcurrencyMiddleware, GitHubSyncController.exportProjectToGithub, - releaseProjectLimiter ) + app.post('/project/:Project_id/user/:user_id/merge', + projectConcurrencyMiddleware, + GitHubSyncController.mergeToGitHubAndPushback, + ) app.get('/project/:Project_id/user/:user_id/dev', projectConcurrencyMiddleware, GitHubSyncController.dev, - releaseProjectLimiter ) return { app, server: app } diff --git a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs index 04a86267ae..7153ba0907 100644 --- a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs +++ b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs @@ -228,6 +228,43 @@ async function exchangeCodeForPat(code) { return data } +async function listCommitsSince(pat, fullName, branch, sinceCommitSha) { + logger.info({ fullName, branch, sinceCommitSha }, 'Listing commits since last sync') + + if (!sinceCommitSha) { + return [] + } + + const url = `${GITHUB_API_BASE}/repos/${fullName}/compare/` + + `${encodeURIComponent(sinceCommitSha)}...${encodeURIComponent(branch)}` + + const response = await fetch(url, { + headers: getHeaders(pat), + agent: httpsAgent, + }) + + if (!response.ok) { + if (response.status === 404) { + throw new Error('Repository not found or access denied') + } + throw new Error(`GitHub API error: ${response.status}`) + } + + const data = await response.json() + + const commits = (data.commits || []).map(c => ({ + message: c.commit?.message || '', + author: { + name: c.commit?.author?.name || '', + email: c.commit?.author?.email || '', + date: c.commit?.author?.date || '', + }, + sha: c.sha, + })) + + return commits +} + export default { exchangeCodeForPat, verifyPat, @@ -237,4 +274,5 @@ export default { listOrgs, listUser, getRepoInfo, + listCommitsSince, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index 21344414f2..58a232be15 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -61,6 +61,12 @@ async function getProjectStatus(req, res) { if (owner) { status.owner = owner } + + // remove status. last_sync_sha and .last_sync_version + if (status.last_sync_sha) + delete status.last_sync_sha + if (status.last_sync_version) + delete status.last_sync_version } res.json(status) } @@ -202,6 +208,8 @@ async function unlink(req, res) { /** * Export changes to Github. + * This will create a new repository on GitHub, and link the project to that repository. + * Since this operation is invoked by loggenin user, we will use this to sync. */ async function exportProject(req, res){ const userId = SessionManager.getLoggedInUserId(req.session) @@ -230,8 +238,42 @@ async function exportProject(req, res){ } } +/** + * Get unmerged commits from GitHub and show in Overleaf, + * so user can choose to merge or not. + * Since this operation is invoked by any editor of the project, we will + * use githubSyncStatus's owner to get + */ async function getUnmergedCommits(req, res){ + const { Project_id: projectId } = req.params + const projectStatus = await GitHubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + + if (!projectStatus) { + return res.status(400).json({ error: 'Project is not linked to a GitHub repository' }) + } + + const ownerId = projectStatus.ownerId + const lastSyncSha = projectStatus.last_sync_sha + const repo = projectStatus.repo + const defaultBranch = projectStatus.default_branch + const crentials = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(ownerId) + if (!crentials) { + return res.status(400).json({ error: 'GitHub credentials not found for project owner' }) + } + try { + logger.debug({ lastSyncSha }, 'Getting commits since last sync') + let commits = await GitHubSyncHandler.promises.listCommitsSince( + ownerId, repo, defaultBranch, lastSyncSha + ) + res.json({ + diverged: projectStatus.merge_status === 'failure', + commits: commits + }) + } catch (error) { + logger.error({ err: error instanceof Error ? error : new Error(String(error)) }, 'Error listing commits since last sync') + res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' }) + } } async function mergeFromGitHub(req, res){ diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 6b9282cfba..c6b638a4a6 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -28,8 +28,8 @@ async function getProjectGitHubSyncStatus(projectId) { const projectStatus = await GitHubSyncProjectStates.findOne({ projectId }, { _id: 0, __v: 0, - last_sync_sha: 0, - last_sync_version: 0, + // last_sync_sha: 0, + // last_sync_version: 0, } ).lean() if (!projectStatus) { @@ -165,13 +165,22 @@ async function exportProjectToGitHub(userId, projectId, name, description, isPri }) if (!response.ok) { - const errorText = await response.text() - throw new Error(`GitHub Sync Service error: ${response.status} - ${errorText}`) + const error = await response.json() + throw new Error(`GitHub Sync Service error: ${response.status} - ${error.error || error}`) } return await response.json() } + +async function listCommitsSince(userId, repoFullName, branch, since) { + const pat = await getGitHubAccessTokenForUser(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + return await GitHubApiClient.listCommitsSince(pat, repoFullName, branch, since) +} + export default { promises: { getUserGitHubStatus, @@ -186,5 +195,6 @@ export default { saveNewlySyncedProjectState, getGitHubOrgsForUser, exportProjectToGitHub, + listCommitsSince }, } \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx index 423850328c..23a23a8c41 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx @@ -26,6 +26,7 @@ import { postJSON } from '../../../../../frontend/js/infrastructure/fetch-json' import getMeta from '@/utils/meta' +import OLNotification from '@/shared/components/ol/ol-notification' type GithubSyncModalLoadingProps = { @@ -66,6 +67,7 @@ const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyn const [description, setDescription] = useState('') const [visibility, setVisibility] = useState<'public' | 'private'>('private') const [submitLoading, setSubmitLoading] = useState(false) + const [isSubmitError, setIsSubmitError] = useState(false) const { project } = useProjectContext() useEffect(() => { @@ -114,6 +116,7 @@ const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyn } catch (err: any) { console.error('Failed to export project to GitHub', err) setSubmitLoading(false) + setIsSubmitError(true) } } @@ -125,6 +128,14 @@ const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyn

{t('export_project_to_github')}

{t('project_not_linked_to_github')}

+ { + isSubmitError && ( + + ) + } @@ -255,14 +266,54 @@ const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyn type GithubSyncModalMergingProps = { handleHide: () => void + setModalStatus: (modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit') => void projectSyncStatus: any + projectId: string // other props to show conflict and allow user to resolve conflict } -const GithubSyncModalMerging = ({ handleHide, projectSyncStatus }: GithubSyncModalMergingProps) => { +const GithubSyncModalMerging = ({ handleHide, setModalStatus, projectSyncStatus, projectId }: GithubSyncModalMergingProps) => { const { t } = useTranslation() - // appName const { appName } = getMeta('ol-ExposedSettings') + const [unmergedCommits, setUnmergedCommits] = useState([]) + const [isLoadingCommits, setIsLoadingCommits] = useState(true) + + useEffect(() => { + const fetchUnmergedCommits = async () => { + try { + const data = await getJSON(`/project/${projectId}/github-sync/commits/unmerged`) + setUnmergedCommits(data.commits) + setIsLoadingCommits(false) + } catch (err) { + console.error('Failed to fetch unmerged commits', err) + setIsLoadingCommits(false) + } + } + fetchUnmergedCommits() + }, []) + + if (isLoadingCommits) { + return ( + <> + +
+ + {t('checking_project_github_status')} +
+
+ + + {t('close')} + + + + ) + } + + return ( <> @@ -273,16 +324,52 @@ const GithubSyncModalMerging = ({ handleHide, projectSyncStatus }: GithubSyncMod


-
-

{t('no_new_commits_in_github')}

-
-
- + {unmergedCommits.length === 0 && +
+

{t('no_new_commits_in_github')}

+
+ } + {unmergedCommits.length > 0 && + <> +

+ {t('recent_commits_in_github')} +

+
+ {unmergedCommits.map((commit: any) => ( +
+ + + {commit.sha.substring(0, 7)} + + + + {commit.message} + +
by {commit.author.name} <{commit.author.email}>
+
+ //

{commit.message}

+ ))} +
+ + + } +

+ + {t('pull_github_changes_into_sharelatex', { appName })} + +

+

setModalStatus('pushSubmit')} > {t('push_sharelatex_changes_to_github', { appName })} @@ -303,13 +390,55 @@ const GithubSyncModalMerging = ({ handleHide, projectSyncStatus }: GithubSyncMod } +type GitHubSyncModalPushSubmitProps = { + handleHide: () => void + // other props to show commit message input and submit button +} + +const GitHubSyncModalPushSubmit = ({ handleHide }: GitHubSyncModalPushSubmitProps) => { + const { t } = useTranslation() + const { appName } = getMeta('ol-ExposedSettings') + + return ( + <> + + +

{t('sync_project_to_github_explanation', { appName })}

+ + + +
+
+ + + {t('cancel')} + + + {t('sync')} + + + + ) +} + + type GitHubSyncModalProps = { show: boolean handleHide: () => void projectId: string + modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit' + setModalStatus: (modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit') => void } - // 0. Check project github sync status // Show spinner while loading, show error message if error occurs // 1. If /project//github-sync/status @@ -328,14 +457,10 @@ type GitHubSyncModalProps = { // then show conflict resolution contents. // a) user can choose to merge confict in github, and submit // remerge form overleaf. -function GitHubSyncModal({ show, handleHide, projectId }: GitHubSyncModalProps) { +function GitHubSyncModal({ show, handleHide, projectId, modalStatus, setModalStatus }: GitHubSyncModalProps) { const { t } = useTranslation() const { project } = useProjectContext() - // loading: checking github sync status - // export: show export table to link github repo - // merge: show remote changes from github and allow user to pull/push - // pushSubmit: allow user to fill submit message - const [modalStatus, setModalStatus] = useState<'loading' | 'export' | 'merge' | 'pushSubmit'>('loading') + const [projectSyncStatus, setProjectSyncStatus] = useState(null) // If modalStatus is loading, we will fetch status @@ -367,8 +492,8 @@ function GitHubSyncModal({ show, handleHide, projectId }: GitHubSyncModalProps) {modalStatus === 'loading' && } {modalStatus === 'export' && } - {modalStatus === 'merge' && } - + {modalStatus === 'merge' && } + {modalStatus === 'pushSubmit' && } ) } @@ -382,6 +507,12 @@ const GitHubSyncCard = () => { const [showGithubSyncModal, setShowGithubSyncModal] = useState(false) const { project, tags: projectTags } = useProjectContext() + // loading: checking github sync status + // export: show export table to link github repo + // merge: show remote changes from github and allow user to pull/push + // pushSubmit: allow user to fill submit message + const [modalStatus, setModalStatus] = useState<'loading' | 'export' | 'merge' | 'pushSubmit'>('loading') + return ( <> { setShowGithubSyncModal(false)} + modalStatus={modalStatus} + setModalStatus={setModalStatus} + handleHide={() => { + setShowGithubSyncModal(false) + setModalStatus('loading') + }} projectId={project?._id || ''} /> From 76654fb3af624135a5593aaad8607ad1bbebcbd2 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Fri, 27 Feb 2026 16:20:07 +0000 Subject: [PATCH 07/25] feature: support github sync with merge API, also frontend code --- .../app/js/GitHubSyncController.js | 183 ++++++- .../github-sync/app/js/GitHubSyncHandler.js | 504 ++++++++++++++++-- .../app/src/GitHubSyncController.mjs | 36 ++ .../github-sync/app/src/GitHubSyncHandler.mjs | 81 ++- .../github-sync/app/src/GitHubSyncUpdater.mjs | 238 +++++++++ .../js/components/github-integration-card.tsx | 198 ++++++- 6 files changed, 1174 insertions(+), 66 deletions(-) create mode 100644 services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js index 705edc9684..d31c495c89 100644 --- a/services/github-sync/app/js/GitHubSyncController.js +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -1,7 +1,7 @@ import { GitHubSyncProjectStates } from './modals/index.js' import GithubSyncHandler from './GitHubSyncHandler.js' import { expressify } from '@overleaf/promise-utils' - +import logger from '@overleaf/logger' // This function will create a new repo on GitHub, export current project to that repo, @@ -32,23 +32,23 @@ async function exportProjectToGithub(req, res, next) { isPrivate, org ) + const repoFullName = repoResult.full_name const defaultBranch = repoResult.default_branch - - const statusData = await GithubSyncHandler.promises.initializeRepositoryForProject( projectId, userId, repoFullName, defaultBranch ) - + res.json({ statusData }) } catch (err) { res.status(500).json({ error: err.message }) } } + // This funcion will check github sync status. // 0. No merge_status in db, return error, no linked repo. // 1. If merge_status is `success` @@ -60,10 +60,12 @@ async function exportProjectToGithub(req, res, next) { // set unmerged_branch to `overleaf-2026-02-26-1528`, // and return error to client, [end] -// 2. If merge_status is `failure` -// a), we will call api to merge unmerged_branch to default branch in our db. -// b), If merge success, goto step 3, -// if failed, we will keep merge_status to `failure`, and report error to client, [end] +// 2. If merge_status is `failure` we will check if there is an unmerged_branch on Github +// a), if unmerged_branch deleted, we will choose defeault branch latest commit sha as next +// b), if unmerged_branch still exists, we compare the unmerged_branch with default branch, +// [] if unmerged_branch falls behind, do nothing, remain conflict status. +// [] if unmerged_branch is ahead, we can try to merge unmerged_branch to default +// branch, if success, goto step 3, if failed, return error // 3. we need to remember the new merged sha, and compare it with old sha. // a), list the differences between old sha and new sha @@ -76,23 +78,178 @@ async function exportProjectToGithub(req, res, next) { // set merge_status to `success`, unmerged_branch to null // update last_sync_sha to new merged sha, and last_sync_version to version we just merged. // [end] + +// What should we return? +// If nothing wrong, we return +// { +// "newSha": string, // the new sha after merge +// "files": [ +// "name": string, // the file path in overleaf project +// "url": string, // the url we can download the file content, +// null if no changes +// ] +// } +// We leave web to to import changes and update project sync infomation. async function mergeToGitHubAndPushback(req, res, next) { + logger.info('Received request to merge changes to GitHub and push back changes if needed', { params: req.params }) const { Project_id: projectId, user_id: userId } = req.params + let message = 'Sync changes from Overleaf' + if (req.body && req.body.message) { + message = req.body.message + } + try { + // Step 0, check if the project is linked to a GitHub repository const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) if (!projectStatus) { return res.status(400).json({ error: 'Project is not linked to a GitHub repository' }) } - + let newSha = "" + + // Step 1, last merge success, we can try to merge new changes to github + if (projectStatus.merge_status === 'success') { + const latestVersionData = await GithubSyncHandler.promises.getProjectLatestVersion(projectId) + const latestVersion = latestVersionData.version + const last_sync_version = projectStatus.last_sync_version + const last_sync_sha = projectStatus.last_sync_sha + + // only export changes + if (latestVersion > last_sync_version) { + // create a new branch from last_sync_sha + const now = new Date() + const branchName = `overleaf-${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}-${String(now.getDate()).padStart(2,'0')}-${String(now.getHours()).padStart(2,'0')}${String(now.getMinutes()).padStart(2,'0')}` + + const branchCreated = await GithubSyncHandler.promises.createOrUpdateBranchRef( + projectStatus.repo, + branchName, + last_sync_sha, + userId + ) + + // export changes to github + await GithubSyncHandler.promises.exportChangesToGitHub( + projectId, + userId, + projectStatus.repo, + branchName, + last_sync_version, + latestVersion, + last_sync_sha, + message + ) + + // Try merge the branch to default branch, if failed, record. + try { + const mergeResult = await GithubSyncHandler.promises.mergeBranchToDefaultBranch( + projectStatus.repo, + branchName, + projectStatus.default_branch, + userId + ) + + newSha = mergeResult.sha + } catch (err) { + // update merge_status to failure, and save the unmerged_branch + await GithubSyncHandler.promises.updateProjectGitHubSyncStatus(projectId, { + merge_status: 'failure', + unmerged_branch: branchName, + }) + + logger.error('Failed to merge branch to default branch', { err }) + return res.status(500).json({ + error: 'Failed to merge changes to GitHub, please resolve the conflict on GitHub and try again' + }) + } + + } else if (latestVersion === last_sync_version) { + // newSha will be the latest sha in default branch + newSha = await GithubSyncHandler.promises.getBranchHeadCommitSha( + projectStatus.repo, + projectStatus.default_branch, + userId + ) + + } + + } else if (projectStatus.merge_status === 'failure') { + // If the last merge failed, we try to re-merge the unmerged branch + const unmergedBranch = projectStatus.unmerged_branch + if (!unmergedBranch) { + return res.status(500).json({ error: 'Unmerged branch info is missing.' }) + } + + try { + // const mergeResult = await GithubSyncHandler.promises.mergeBranchToDefaultBranch( + // projectStatus.repo, + // unmergedBranch, + // projectStatus.default_branch, + // userId + // ) + const diff = await GithubSyncHandler.promises.diffBranchsOnGitHub( + projectStatus.repo, + projectStatus.default_branch, + unmergedBranch, + userId + ) + + if (diff.length === 0) { + newSha = await GithubSyncHandler.promises.getBranchHeadCommitSha( + projectStatus.repo, + projectStatus.default_branch, + userId + ) + } else { + return res.status(500).json({ error: 'There are still conflicts between unmerged branch and default branch, please resolve the conflict on GitHub and try again' }) + } + } catch (err) { + await GithubSyncHandler.promises.updateProjectGitHubSyncStatus( + projectId, + { + merge_status: 'failure', + unmerged_branch: unmergedBranch, // keep the same unmerged branch + } + ) + logger.error('Failed to re-merge unmerged branch', { err }) + return res.status(500).json({ + error: 'Failed to re-merge changes to GitHub, please resolve the conflict on GitHub and try again' + }) + } + } + + // now we have the new sha after merge. + // Step 3, we need to compare the new sha with last_sync_sha, if they are different, we need to push the changes back to overleaf. + if (newSha && newSha != "" + && newSha !== projectStatus.last_sync_sha) { + // list the differences between newSha and last_sync_sha on GitHub + const diff = await GithubSyncHandler.promises.diffChangesOnGitHub( + projectStatus.repo, + projectStatus.default_branch, + projectStatus.last_sync_sha, + newSha, + userId + ) + + const tree = await GithubSyncHandler.promises.getFileTreeOnCommit( + projectStatus.repo, + newSha, + userId + ) + + let resp = GithubSyncHandler.generateRespURL(diff, tree, projectStatus.repo, newSha) + + return res.json( + { + files: resp, + newSha: newSha + } + ) + } } catch (err) { res.status(500).json({ error: err.message }) } } - - - // p 699dd39a8a419bfc8f417400 // u 699d40291c632958125dbdab async function dev(req, res, next) { @@ -113,7 +270,7 @@ async function dev(req, res, next) { // const repoFullName = createTest.full_name // const defaultBranch = createTest.default_branch - + // await GithubSyncHandler.promises.initializeRepositoryForProject(projectId, userId, repoFullName, defaultBranch) // res.json({ projectId, userId, repoFullName }) diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index 04845d810f..05d8de7e44 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -15,6 +15,10 @@ async function saveProjectGitHubSyncStatus(projectId, status) { return GitHubSyncProjectStates.saveByProjectId(projectId, status) } +async function updateProjectGitHubSyncStatus(projectId, status) { + return GitHubSyncProjectStates.updateByProjectId(projectId, status) +} + async function getUserGitHubCredentials(userId) { const credentials = await GitHubSyncUserCredentials.findByUserId(userId) @@ -24,9 +28,13 @@ async function getUserGitHubCredentials(userId) { return await SecretHelper.decryptAccessToken(credentials.auth_token_encrypted) } + // This function will create a repository on GitHub for the project -// If org is provided, it will create the repository under the organization, otherwise it will create the repository under the user's account. -// We will initialize the repository with a README file, and then we will remove the README file later, because we need to make sure the repository is not empty, otherwise GitHub API will reject our commit. +// If org is provided, it will create the repository under the organization, +// otherwise it will create the repository under the user's account. +// We will initialize the repository with a README file, and then we will +// remove the README file later, because we need to make sure the repository +// is not empty, otherwise GitHub API will reject our commit. // No other initialization is done in this function. async function createRepositoryOnGitHub(userId, repoName, repoDescription, isPrivate, org) { const accessToken = await getUserGitHubCredentials(userId) @@ -37,7 +45,7 @@ async function createRepositoryOnGitHub(userId, repoName, repoDescription, isPri const githubApiUrl = org ? `${GITHUB_API_BASE}/orgs/${org}/repos` : `${GITHUB_API_BASE}/user/repos` - + const response = await fetch(githubApiUrl, { method: 'POST', headers: { @@ -96,7 +104,7 @@ async function getProjectLatestVersion(projectId) { } const versionData = await response.json() const latestVersion = versionData.version - + let URL = `${Settings.apis.project_history.url}/project/${projectId}/version/${latestVersion}` const fileResponse = await fetch(URL) if (!fileResponse.ok) { @@ -104,13 +112,56 @@ async function getProjectLatestVersion(projectId) { logger.error('Failed to pull project files from Project History', { projectId, version: latestVersion, error: errorData }) throw new Error(`Project History API error: ${errorData.message}`) } - + let result = await fileResponse.json() result.version = latestVersion return result } +// Communicate with project history service to get the file tree diff +// between two versions, and return a array +// If operation appeared, it means it has been changed. +// operation can be "added", "removed", "edited". +// [ +// { +// "pathname": "main.tex", +// "editable": true +// }, +// { +// "pathname": "sample.bib", +// "operation": "removed", +// "editable": true, +// "deletedAtV": 5 +// }, +// { +// "pathname": "frog.jpg", +// "operation": "added", +// "editable": false +// }, +// { +// "pathname": "4535345345/3453453.tex", +// "operation": "added", +// "editable": true +// } +// ] +async function getProjectFileTreeDiff(projectId, fromVersion, toVersion) { + let historyURL = `${Settings.apis.project_history.url}/project/${projectId}/filetree/diff?from=${fromVersion}&to=${toVersion}` + const response = await fetch(historyURL) + if (!response.ok) { + const errorData = await response.json() + logger.error('Failed to pull project file tree diff from Project History', { projectId, fromVersion, toVersion, error: errorData }) + throw new Error(`Project History API error: ${errorData.message}`) + } + const diffData = await response.json() + + if (!diffData || !diffData.diff) { + return [] + } + return diffData.diff +} + + async function uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) { const encoding = 'base64' const content = buffer.toString('base64') @@ -132,26 +183,31 @@ async function uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) { logger.error('Failed to upload blob to GitHub', { repoFullName, filePath, error: errorData }) throw new Error(`GitHub API error: ${errorData.message}`) } - + const blobData = await response.json() return blobData.sha } -async function createTreeOnGitHub(repoFullName, blobShas, accessToken) { +async function createTreeOnGitHub(repoFullName, blobShas, accessToken, baseTreeSha = null) { + const body = { + tree: blobShas.map(item => ({ + path: item.path, + sha: item.sha, + mode: '100644', + type: 'blob', + })), + } + if (baseTreeSha) { + body.base_tree = baseTreeSha + } + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/trees`, { method: 'POST', headers: { 'Authorization': `token ${accessToken}`, 'Accept': 'application/vnd.github.v3+json', }, - body: JSON.stringify({ - tree: blobShas.map(item => ({ - path: item.path, - sha: item.sha, - mode: '100644', - type: 'blob', - })), - }), + body: JSON.stringify(body), }) if (!response.ok) { @@ -189,6 +245,30 @@ async function createCommitOnGitHub(repoFullName, treeSha, message, accessToken, return commitData.sha } +async function getBranchHeadCommitSha(repoFullName, branch, userId) { + const accessToken = await getUserGitHubCredentials(userId) + + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/ref/heads/${branch}`, { + method: 'GET', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (response.status === 404) return null + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) + } + + const refData = await response.json() + return refData?.object?.sha || null +} // We need to remove init README. async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, accessToken) { @@ -203,7 +283,7 @@ async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, access }, body: JSON.stringify({ sha: commitSha, - force: true, // + force: true, }), } ) @@ -211,7 +291,7 @@ async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, access const text = await response.text().catch(() => '') if (!response.ok) { let err = {} - try { err = JSON.parse(text) } catch {} + try { err = JSON.parse(text) } catch { } logger.error({ repoFullName, branch, commitSha, status: response.status, body: text }, 'Failed to force update ref') throw new Error(`GitHub API error: ${err.message || text || response.statusText}`) } @@ -219,6 +299,17 @@ async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, access return JSON.parse(text) } +// Communicate with project history service to get the file content buffer, and return the buffer. +async function getProjectFileBuffer(projectId, version, filePath) { + const fileURL = `${Settings.apis.project_history.url}/project/${projectId}/version/${version}/${encodeURIComponent(filePath)}` + const response = await fetch(fileURL) + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + logger.error({ projectId, version, filePath, errorData }, 'Failed to fetch file snapshot') + throw new Error(`Project History API error: ${errorData.message || response.statusText}`) + } + return Buffer.from(await response.arrayBuffer()) +} // Export a project to GitHub will be a complex process, // 1. We need to get the latest version of the project, and get the file list with their hashes from project history service. @@ -237,32 +328,31 @@ async function initializeRepositoryForProject(projectId, userId, repoFullName, d const latestVersionData = await getProjectLatestVersion(projectId) const latestVersion = latestVersionData.version - - for(const filePath in latestVersionData.files) { - const fileURL = `${Settings.apis.project_history.url}/project/${projectId}/version/${latestVersion}/${encodeURIComponent(filePath)}` - logger.debug({ projectId, filePath, fileURL }, 'Pulling project file from Project History') - const fileResponse = await fetch(fileURL) - if (!fileResponse.ok) { - const errorData = await fileResponse.json() - logger.error('Failed to pull project file from Project History', { projectId, filePath, error: errorData }) - throw new Error(`Project History API error: ${errorData.message}`) - } - const buffer = Buffer.from(await fileResponse.arrayBuffer()) + for (const filePath in latestVersionData.files) { + const buffer = await getProjectFileBuffer(projectId, latestVersion, filePath) const blobSha = await uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) blobShas.push({ path: filePath, sha: blobSha }) - - logger.debug({ projectId, filePath, blobSha }, 'Uploaded file blob to GitHub Successfully') + logger.debug({ projectId, filePath, blobSha }, + 'Uploaded file blob to GitHub Successfully') } - // // Then, we need to create a tree with all the blobs, and create a commit with the tree, and finally update the ref of the repo to point to the new commit. - const treeSha = await createTreeOnGitHub(repoFullName, blobShas, accessToken) - const commitSha = await createCommitOnGitHub(repoFullName, treeSha, `Initial Overleaf Import`, accessToken) - - const updateRefResult = await forceUpdateBranchToCommit(repoFullName, defaultBranch, commitSha, accessToken) + // Then, we need to create a tree with all the blobs, and + // create a commit with the tree, and finally update the ref + // of the repo to point to the new commit. + const treeSha = await createTreeOnGitHub( + repoFullName, blobShas, accessToken, null) - logger.debug({ projectId, repoFullName, treeSha, commitSha, updateRefResult }, 'Created initial commit on GitHub Successfully') + const commitSha = await createCommitOnGitHub( + repoFullName, treeSha, `Initial Overleaf Import`, accessToken) + + const updateRefResult = await forceUpdateBranchToCommit( + repoFullName, defaultBranch, commitSha, accessToken) + + logger.debug({ projectId, repoFullName, treeSha, commitSha, updateRefResult }, + 'Created initial commit on GitHub Successfully') - // Finally, we need to save the GitHub sync status to the database, so we can show the status on the UI. + // Finally, we need to save the GitHub sync status to the database, + // so we can show the status on the UI. return await saveProjectGitHubSyncStatus(projectId, { merge_status: 'success', default_branch: defaultBranch, @@ -278,11 +368,349 @@ async function initializeRepositoryForProject(projectId, userId, repoFullName, d } } +// This function will export all changes in overleaf to github +async function exportChangesToGitHub( + projectId, userId, repoFullName, branch, + fromV, toV, parentCommitSha, commitMessage +) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + const diff = await getProjectFileTreeDiff(projectId, fromV, toV) + const upsertPaths = new Set() + const deletePaths = new Set() + + for (const item of diff) { + if (!item?.operation) continue + + if (item.operation === 'added' || item.operation === 'edited') { + upsertPaths.add(item.pathname) + continue + } + + if (item.operation === 'removed') { + deletePaths.add(item.pathname) + continue + } + + if (item.operation === 'renamed') { + deletePaths.add(item.pathname) + if (item.newPathname) upsertPaths.add(item.newPathname) + continue + } + } + + // 冲突消解:同路径既删又改,按“保留最终文件”处理 + for (const p of upsertPaths) { + if (deletePaths.has(p)) deletePaths.delete(p) + } + + const changed = Array.from(upsertPaths) + const removed = Array.from(deletePaths) + + // 没变化直接返回 + if (changed.length === 0 && removed.length === 0) { + return { + noChange: true, + commitSha: parentCommitSha, + changed, + removed, + } + } + + const treeEntries = [] + + // 处理新增/修改:拉最新版本文件 -> upload blob + for (const filePath of changed) { + const buffer = await getProjectFileBuffer(projectId, toV, filePath) + const blobSha = await uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) + treeEntries.push({ path: filePath, sha: blobSha }) + } + + // 处理删除:sha=null + for (const filePath of removed) { + treeEntries.push({ path: filePath, sha: null }) + } + + const baseTreeSha = await getCommitTreeSha(repoFullName, parentCommitSha, accessToken) + const treeSha = await createTreeOnGitHub(repoFullName, treeEntries, accessToken, baseTreeSha) + + const commitSha = await createCommitOnGitHub( + repoFullName, + treeSha, + commitMessage || `Sync Overleaf changes v${fromV}..v${toV}`, + accessToken, + [parentCommitSha] + ) + + await createOrUpdateBranchRef(repoFullName, branch, commitSha, userId) + + return { + noChange: false, + commitSha, + treeSha, + changed, + removed, + } +} + +// create a new branch from commitSha +// if the branch already exists, we will update the branch to point to the new commitSha +// but only if the branch is currently pointing to the commitSha, +// otherwise we consider it as a conflict and throw an error. +async function createOrUpdateBranchRef(repoFullName, branch, commitSha, userId) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + const headSha = await getBranchHeadCommitSha(repoFullName, branch, userId) + + if (!headSha) { + const createResp = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/refs`, { + method: 'POST', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + ref: `refs/heads/${branch}`, + sha: commitSha, + }), + }) + if (!createResp.ok) { + const errorData = await createResp.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || createResp.statusText}`) + } + return + } + + const updateResp = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/refs/heads/${branch}`, { + method: 'PATCH', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + sha: commitSha, + force: false, + }), + }) + + if (!updateResp.ok) { + const errorData = await updateResp.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || updateResp.statusText}`) + } +} + + +async function getCommitTreeSha(repoFullName, commitSha, accessToken) { + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/commits/${commitSha}`, { + method: 'GET', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) + } + + const commitData = await response.json() + return commitData?.tree?.sha +} + +async function mergeBranchToDefaultBranch(repoFullName, sourceBranch, defaultBranch, userId) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/merges`, { + method: 'POST', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + base: defaultBranch, + head: sourceBranch, + commit_message: `Merge ${sourceBranch} to ${defaultBranch}`, + }), + }) + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) + } + + const mergeData = await response.json() + return mergeData +} + +async function diffChangesOnGitHub(repoFullName, baseBranch, + fromSha, toSha, userId) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/compare/${fromSha}...${toSha}`, { + method: 'GET', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) + } + + const compareData = await response.json() + return compareData.files || [] +} + +async function diffBranchsOnGitHub( + repoFullName, baseBranch, compareBranch, userId +){ + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/compare/${baseBranch}...${compareBranch}`, { + method: 'GET', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + logger.error('Failed to diff branches on GitHub', { repoFullName, baseBranch, compareBranch, error: errorData }) + return [] + } + const compareData = await response.json() + return compareData.files || [] +} + +// Return File list on Github on a specific commit. +async function getFileTreeOnCommit(repoFullName, commitSha, userId) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/commits/${commitSha}`, { + method: 'GET', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) + } + + const commitData = await response.json() + const treeURL = commitData?.tree?.url + `?recursive=1` + if (!treeURL) { + throw new Error('Invalid commit data from GitHub API: missing tree url') + } + + const treeResponse = await fetch(treeURL, { + method: 'GET', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (!treeResponse.ok) { + const errorData = await treeResponse.json().catch(() => ({})) + throw new Error(`GitHub API error: ${errorData.message || treeResponse.statusText}`) + } + + const treeData = await treeResponse.json() + return treeData.tree || [] +} + +// diff: +// [ +// { +// "sha": "f2e6004eece8a664d1c603ff1a0b6b13400553fb", +// "filename": "develop/dev.env", +// "status": "modified", +// "additions": 1, +// "deletions": 0, +// "changes": 1, +// "blob_url": "https://github.com/overleaf/overleaf/blob/17e01526b48b070a374cca24d779c462336560ae/develop%2Fdev.env", +// "raw_url": "https://github.com/overleaf/overleaf/raw/17e01526b48b070a374cca24d779c462336560ae/develop%2Fdev.env", +// "contents_url": "https://api.github.com/repos/overleaf/overleaf/contents/develop%2Fdev.env?ref=17e01526b48b070a374cca24d779c462336560ae", +// "patch": "@@ -1,5 +1,6 @@\n CHAT_HOST=chat\n CLSI_HOST=clsi\n+DOWNLOAD_HOST=clsi-nginx\n CONTACTS_HOST=contacts\n DOCSTORE_HOST=docstore\n DOCUMENT_UPDATER_HOST=document-updater" +// }, +// ... +// ] + + +// tree +// [ +// { +// "path": "main.tex", +// "mode": "100644", +// "type": "blob", +// "sha": "3d21ec53a331a6f037a91c368710b99387d012c1" +// "size": 30, +// "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1" +// }, +// ... +// ] +function generateRespURL(diff, tree, repoFullName, newSha) { + const resp = [] + const BaseURL = `${GITHUB_API_BASE}/repos/${repoFullName}/contents/` + for (const item of tree) { + let obj = { + name: item.path, + } + + // if item.path exists in diff, we put url in that + const diffItem = diff.find(d => d.filename === item.path) + if (diffItem) { + obj.url = `${BaseURL}${item.path}?ref=${newSha}` + } + resp.push(obj) + } + return resp +} + export default { promises: { getProjectGitHubSyncStatus, getUserGitHubCredentials, + getFileTreeOnCommit, createRepositoryOnGitHub, + createOrUpdateBranchRef, + getCommitTreeSha, initializeRepositoryForProject, - } + getProjectFileTreeDiff, + exportChangesToGitHub, + mergeBranchToDefaultBranch, + diffChangesOnGitHub, + getProjectLatestVersion, + getBranchHeadCommitSha, + updateProjectGitHubSyncStatus, + saveProjectGitHubSyncStatus, + diffBranchsOnGitHub, + }, + generateRespURL, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index 58a232be15..6fa43ac7e5 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -277,7 +277,43 @@ async function getUnmergedCommits(req, res){ } async function mergeFromGitHub(req, res){ + const projectId = req.params.Project_id + if (!projectId) { + return res.status(400).json({ error: 'Project ID is required' }) + } + + let message = 'Merge changes from overleaf' + if (req.body && req.body.message) { + message = req.body.message + } + + const projectStatus = await GitHubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) + if (!projectStatus) { + return res.status(400).json({ error: 'Project is not linked to a GitHub repository' }) + } + const ownerId = projectStatus.ownerId + try { + const result = await GitHubSyncHandler.promises.syncProjectToGitHub( + ownerId, projectId, message + ) + logger.debug({ projectId, result }, 'Merge from GitHub result') + + if (result.newSha && result.files) { + const credentials = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(ownerId) + if (!credentials) { + throw new Error('GitHub credentials not found for project owner') + } + + await GitHubSyncHandler.promises.applyChangesToOverleaf( + projectId, result.newSha, result.files, ownerId) + } + + res.status(200).json({ success: true }) + } catch (error) { + logger.error({ err: error instanceof Error ? error : new Error(String(error)) }, 'Error syncing project to GitHub') + res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' }) + } } // List user and user's orgs. diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index c6b638a4a6..02e0df9f89 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -5,6 +5,9 @@ import { GitHubSyncProjectStates } from '../models/githubSyncProjectStates.mjs' import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import SecretsHelper from './SecretsHelper.mjs' +import GitHubSyncUpdater from './GitHubSyncUpdater.mjs' +import { fetchJson } from '@overleaf/fetch-utils' + /** @@ -39,6 +42,25 @@ async function getProjectGitHubSyncStatus(projectId) { return projectStatus } +/** + * Save project's GitHub sync status + */ +async function updateProjectGitHubSyncStatus(projectId, updateFields) { + logger.debug({ projectId, updateFields }, 'Updating project GitHub sync status') + const projectStatus = await GitHubSyncProjectStates.findOneAndUpdate( + { projectId }, + { $set: updateFields }, + { new: true, upsert: false, fields: { _id: 0, __v: 0 } } + ).lean() + + if (!projectStatus) { + throw new Error('Project GitHub sync status not found') + } + return projectStatus +} + + + /** * List user's GitHub repositories * @param {string} userId - User ID @@ -181,6 +203,61 @@ async function listCommitsSince(userId, repoFullName, branch, since) { return await GitHubApiClient.listCommitsSince(pat, repoFullName, branch, since) } +async function syncProjectToGitHub(userId, projectId, message) { + const url = `${Settings.apis.github_sync.url}/project/${projectId}/user/${userId}/merge` + logger.debug({ userId, projectId, url }, 'Syncing project to GitHub') + + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ message }), + }) + + if (!response.ok) { + const error = await response.json() + throw new Error(`GitHub Sync Service error: ${response.status} - ${error.error || error}`) + } + + return await response.json() +} + + +// 1. apply changes +// 2. update project sync status +// 3. return ok, client will fetch status again. +async function applyChangesToOverleaf(projectId, newSha, files, userId) { + const token = await getGitHubAccessTokenForUser(userId) + + if (!token) { + throw new Error('GitHub not connected') + } + + try { + await GitHubSyncUpdater.promises.postSnapshot(projectId, files, userId, token) + // Re get projectID and version + const snapshot = await fetchJson( + `${Settings.apis.project_history.url}/project/${projectId}/version` + ) + const projectVersion = snapshot.version + + + // get latest version in overleaf + await updateProjectGitHubSyncStatus(projectId, + { + merge_status: 'success', + last_sync_version: projectVersion, + last_sync_sha: newSha, + unmerged_branch: null, // clear unmerged branch if any + }) + } catch (err) { + logger.error({ err, projectId, newSha }, 'Failed to apply changes to Overleaf') + throw err + } + +} + export default { promises: { getUserGitHubStatus, @@ -195,6 +272,8 @@ export default { saveNewlySyncedProjectState, getGitHubOrgsForUser, exportProjectToGitHub, - listCommitsSince + listCommitsSince, + syncProjectToGitHub, + applyChangesToOverleaf, }, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs b/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs new file mode 100644 index 0000000000..b3031c1e7a --- /dev/null +++ b/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs @@ -0,0 +1,238 @@ +import logger from "@overleaf/logger"; +import settings from "@overleaf/settings"; +import ProjectEntityHandler from "../../../../app/src/Features/Project/ProjectEntityHandler.mjs"; +import ProjectGetter from "../../../../app/src/Features/Project/ProjectGetter.mjs"; +import Path from 'path' +import crypto from 'crypto' +import fs from 'fs' +import FileTypeManager from "../../../../app/src/Features/Uploads/FileTypeManager.mjs"; +import EditorController from "../../../../app/src/Features/Editor/EditorController.mjs"; +import { fetchJson } from '@overleaf/fetch-utils' +import { promises as fsPromises } from 'fs' +import { Snapshot } from 'overleaf-editor-core' +import { pipeline } from 'stream/promises' +import { fetchStream } from '@overleaf/fetch-utils' + + +/** + * Validate a file path + */ +function validateFilePath(path) { + // Check for invalid characters or patterns + // Git-bridge already handles most validation, but we do basic checks + + if (!path || path.length === 0) { + return { valid: false, state: 'error' } + } + + // Check for null bytes + if (path.includes('\0')) { + return { valid: false, state: 'error' } + } + + // Check for suspicious patterns + if (path.includes('..') || path.startsWith('/')) { + return { valid: false, state: 'error' } + } + + // Check for .git directory + if (path.startsWith('.git/') || path === '.git') { + return { valid: false, state: 'disallowed' } + } + + return { valid: true } +} + +async function postSnapshot(projectId, files, userId, token) { + const source = 'github' + const project = await ProjectGetter.promises.getProject(projectId, { + name: 1, + rootFolder: 1, + }) + + if (!project) { + throw new Error('Project not found') + } + + const { docs, files: existingFiles } = + await ProjectEntityHandler.promises.getAllEntities(projectId) + + logger.debug( + { projectId, numFiles: files.length, userId }, + 'Processing snapshot push' + ) + + const existingPaths = new Set() + // docs is editable docs + docs.forEach(doc => existingPaths.add(doc.path)) + // existingFiles is blob files + existingFiles.forEach(file => existingPaths.add(file.path)) + + // Track which paths are in the new snapshot + const newPaths = new Set(files.map(f => "/" + f.name)) + + // validate files first + const invalidFiles = [] + for (const file of files) { + const validation = validateFilePath(file.name) + if (!validation.valid) { + invalidFiles.push({ + file: file.name, + state: validation.state, + cleanFile: validation.cleanPath, + }) + } + } + logger.debug( + { invalidFiles }, 'File validation completed successfully' + ) + + if (invalidFiles.length > 0) { + logger.warn( + { projectId, invalidFiles }, 'Invalid file paths detected in snapshot' + ) + } + + const fsPath = Path.join( + settings.path.dumpFolder, + `${projectId}_${crypto.randomUUID()}` + ) + + for (const file of files) { + if (file.url) { + // File has been modified - download and update it + await downloadFile(file.url, fsPath, file.name, token) + } + } + + for (const file of files) { + const filePath = file.name + const elementPath = "/" + file.name + const localPath = Path.join(fsPath, file.name) + + if (file.url) { + const fileType = await determineFileType(projectId, filePath, localPath, docs, existingFiles) + + // File has been modified - update it + if (fileType === 'doc') { + const docLines = await readFileIntoTextArray(localPath) + + await EditorController.promises.upsertDocWithPath( + projectId, + elementPath, + docLines, + source, + userId + ) + } else { + await EditorController.promises.upsertFileWithPath( + projectId, elementPath, localPath, null, source, userId) + } + } + } + + // Now handle deletions - any existing path not in newPaths should be deleted + const pathsToDelete = [...existingPaths].filter(path => !newPaths.has(path)) + for (const path of pathsToDelete) { + try { + await EditorController.promises.deleteEntityWithPath( + projectId, + path, + source, + userId + ) + logger.debug({ projectId, path, source }, 'Deleted file from project') + } catch (err) { + logger.warn({ err, projectId, path, source }, 'Failed to delete file') + } + } + + // Clean up temp files + fs.rm(fsPath, { recursive: true, force: true }, (err) => { + if (err) { + logger.warn({ err, projectId, fsPath }, 'Failed to clean up temp files') + } else { + logger.debug({ projectId, fsPath }, 'Cleaned up temp files successfully') + } + }) +} + + +/** + * Read a file into an array of lines + */ +async function readFileIntoTextArray(fsPath) { + let content = await fsPromises.readFile(fsPath, 'utf8') + if (content === null || content === undefined) { + content = '' + } + const lines = content.split(/\r\n|\n|\r/) + return lines +} + +/** + * Determine if a file should be treated as a doc or binary file + * - path: relateive path to project + * - fsPath: the local file path we downloaded to + */ +async function determineFileType(projectId, path, fsPath, docs, files) { + // Check if there is an existing file with the same path + const existingDoc = docs.find(d => d.path === path) + const existingFile = files.find(f => f.path === path) + const existingFileType = existingDoc ? 'doc' : existingFile ? 'file' : null + + // Determine whether the update should create a doc or binary file + const { binary, encoding } = await FileTypeManager.promises.getType( + path, + fsPath, + existingFileType + ) + + // If we receive a non-utf8 encoding, treat as binary + const isBinary = binary || encoding !== 'utf-8' + + // If a binary file already exists, always keep it as a binary file + if (existingFileType === 'file') { + return 'file' + } else { + return isBinary ? 'file' : 'doc' + } +} + +// fsPath: dumpFolder for our temp download +async function downloadFile(url, fsPath, fileName, token) { + const headers = { + 'Authorization': `Bearer ${token}`, + 'Accept': 'application/vnd.github.v3.raw' + } + + const response = await fetch(url, { headers: headers }) + + if (!response.ok) { + throw new Error(`Failed to download file from ${url}: ${response.statusText}`) + } + + const filePath = Path.join(fsPath, fileName) + await fs.promises.mkdir(Path.dirname(filePath), { recursive: true }) + const writeStream = fs.createWriteStream(filePath) + + try { + const readStream = await fetchStream(url, { headers }) + await pipeline(readStream, writeStream) + return fsPath + } catch (err) { + // Clean up on error + try { + await fsPromises.unlink(filePath) + } catch (unlinkErr) { + logger.warn({ err: unlinkErr, fsPath }, 'Failed to delete file after download error') + } + throw err + } +} + +export default { + promises: { + postSnapshot, + } +} \ No newline at end of file diff --git a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx index 23a23a8c41..4534f2fca3 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx @@ -27,8 +27,82 @@ import { } from '../../../../../frontend/js/infrastructure/fetch-json' import getMeta from '@/utils/meta' import OLNotification from '@/shared/components/ol/ol-notification' +import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context' +import { Trans } from 'react-i18next' +type GitHubSyncModalStatus = 'loading' | 'export' | 'merge' | 'pushSubmit' | 'syncing' | 'conflict' + +type GitHubSyncModalSyncingProps = { + handleHide: () => void + modalStatus: GitHubSyncModalStatus + setModalStatus: (modalStatus: GitHubSyncModalStatus) => void + commitMessage: string + projectId: string +} + +const GitHubSyncModalSyncing = ({ + handleHide, modalStatus, setModalStatus, + commitMessage, projectId +}: GitHubSyncModalSyncingProps) => { + const { t } = useTranslation() + const { setIgnoringExternalUpdates } = useEditorManagerContext() + + // launch syncing when this component is rendered + useEffect(() => { + let cancelled = false + + const syncProjectWithGitHub = async () => { + setIgnoringExternalUpdates(true) + try { + // call backend to start syncing process, endpoint: /project//github-sync/sync + await postJSON(`/project/${projectId}/github-sync/merge`, { + body: { + message: commitMessage, + }, + }) + // after syncing is done, we can set modal status to loading to fetch latest status and show merge table if needed. + if (!cancelled) + setModalStatus('loading') + } catch (err) { + console.error('Failed to sync project with GitHub', err) + // if error occurs, we can set modal status to merge to show pull/push table, user can decide how to resolve the conflict. + if (!cancelled) + setModalStatus('loading') + } finally { + setIgnoringExternalUpdates(false) + } + } + + if (modalStatus === 'syncing') syncProjectWithGitHub() + + return () => { + cancelled = true + setIgnoringExternalUpdates(false) + } + }, [modalStatus, projectId, commitMessage, setModalStatus, setIgnoringExternalUpdates]) + + + return ( + <> + +
+ + {t('importing_and_merging_changes_in_github')} +
+
+ + + {t('cancel')} + + + + ) +} + type GithubSyncModalLoadingProps = { handleHide: () => void } @@ -56,7 +130,7 @@ const GithubSyncModalLoading = ({ handleHide }: GithubSyncModalLoadingProps) => type GithubSyncModalExportingProps = { handleHide: () => void - handleSetModalState: (modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit') => void + handleSetModalState: (modalStatus: GitHubSyncModalStatus) => void } const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyncModalExportingProps) => { const { t } = useTranslation() @@ -266,13 +340,15 @@ const GithubSyncModalExporting = ({ handleHide, handleSetModalState }: GithubSyn type GithubSyncModalMergingProps = { handleHide: () => void - setModalStatus: (modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit') => void + setModalStatus: (modalStatus: GitHubSyncModalStatus) => void projectSyncStatus: any projectId: string // other props to show conflict and allow user to resolve conflict } -const GithubSyncModalMerging = ({ handleHide, setModalStatus, projectSyncStatus, projectId }: GithubSyncModalMergingProps) => { +const GithubSyncModalMerging = ({ + handleHide, setModalStatus, projectSyncStatus, projectId +}: GithubSyncModalMergingProps) => { const { t } = useTranslation() const { appName } = getMeta('ol-ExposedSettings') const [unmergedCommits, setUnmergedCommits] = useState([]) @@ -359,7 +435,8 @@ const GithubSyncModalMerging = ({ handleHide, setModalStatus, projectSyncStatus,

setModalStatus('syncing')} > {t('pull_github_changes_into_sharelatex', { appName })} @@ -393,9 +470,14 @@ const GithubSyncModalMerging = ({ handleHide, setModalStatus, projectSyncStatus, type GitHubSyncModalPushSubmitProps = { handleHide: () => void // other props to show commit message input and submit button + commitMessage: string + setCommitMessage: (message: string) => void + setModalStatus: (modalStatus: GitHubSyncModalStatus) => void } -const GitHubSyncModalPushSubmit = ({ handleHide }: GitHubSyncModalPushSubmitProps) => { +const GitHubSyncModalPushSubmit = ({ + handleHide, commitMessage, setCommitMessage, setModalStatus +}: GitHubSyncModalPushSubmitProps) => { const { t } = useTranslation() const { appName } = getMeta('ol-ExposedSettings') @@ -409,6 +491,8 @@ const GitHubSyncModalPushSubmit = ({ handleHide }: GitHubSyncModalPushSubmitProp as="textarea" rows={2} placeholder={t('github_commit_message_placeholder', { appName })} + value={commitMessage} + onChange={(e) => setCommitMessage(e.target.value)} /> @@ -422,6 +506,9 @@ const GitHubSyncModalPushSubmit = ({ handleHide }: GitHubSyncModalPushSubmitProp { + setModalStatus('syncing') + }} > {t('sync')} @@ -430,13 +517,58 @@ const GitHubSyncModalPushSubmit = ({ handleHide }: GitHubSyncModalPushSubmitProp ) } +type GitHubSyncModalConflictProps = { + // props to show conflict and allow user to resolve conflict + projectSyncStatus: any + handleHide: () => void + setModalStatus: (modalStatus: GitHubSyncModalStatus) => void +} + +const GitHubSyncModalConflict = ({ projectSyncStatus, handleHide, setModalStatus }: GitHubSyncModalConflictProps) => { + const { t } = useTranslation() + const { appName } = getMeta('ol-ExposedSettings') + + return ( + <> + + +

+ ]} + /> +

+ + + + {t('close')} + + setModalStatus('pushSubmit') + } + > + {t('continue_github_merge')} + + + + ) +} type GitHubSyncModalProps = { show: boolean handleHide: () => void projectId: string - modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit' - setModalStatus: (modalStatus: 'loading' | 'export' | 'merge' | 'pushSubmit') => void + modalStatus: GitHubSyncModalStatus + setModalStatus: (modalStatus: GitHubSyncModalStatus) => void } // 0. Check project github sync status @@ -457,12 +589,19 @@ type GitHubSyncModalProps = { // then show conflict resolution contents. // a) user can choose to merge confict in github, and submit // remerge form overleaf. -function GitHubSyncModal({ show, handleHide, projectId, modalStatus, setModalStatus }: GitHubSyncModalProps) { +function GitHubSyncModal({ + show, handleHide, projectId, modalStatus, setModalStatus +}: GitHubSyncModalProps) { const { t } = useTranslation() const { project } = useProjectContext() - + const [projectSyncStatus, setProjectSyncStatus] = useState(null) + + // since we need to switch to syncing component when user clicks pull or push, + // we need to pass this var + const [commitMessage, setCommitMessage] = useState('') + // If modalStatus is loading, we will fetch status useEffect(() => { if (!show || !project || modalStatus !== 'loading') { @@ -471,10 +610,14 @@ function GitHubSyncModal({ show, handleHide, projectId, modalStatus, setModalSta const fetchGitHubSyncStatus = async () => { try { const data = await getJSON(`/project/${projectId}/github-sync/status`) - if (data.enabled) { + if (data.enabled && data.merge_status === 'success') { setModalStatus('merge') setProjectSyncStatus(data) - } else { + } else if (data.enabled && data.merge_status === 'failure') { + setModalStatus('conflict') + setProjectSyncStatus(data) + } + else { setModalStatus('export') } } catch (err: any) { @@ -485,6 +628,11 @@ function GitHubSyncModal({ show, handleHide, projectId, modalStatus, setModalSta fetchGitHubSyncStatus() }, [show, modalStatus]) + useEffect(() => { + if (!show) + setCommitMessage('') + }, [show]) + return ( @@ -492,8 +640,29 @@ function GitHubSyncModal({ show, handleHide, projectId, modalStatus, setModalSta {modalStatus === 'loading' && } {modalStatus === 'export' && } - {modalStatus === 'merge' && } - {modalStatus === 'pushSubmit' && } + {modalStatus === 'merge' && + } + {modalStatus === 'pushSubmit' && } + {modalStatus === 'syncing' && } + { + modalStatus === 'conflict' && + } + ) } @@ -511,7 +680,8 @@ const GitHubSyncCard = () => { // export: show export table to link github repo // merge: show remote changes from github and allow user to pull/push // pushSubmit: allow user to fill submit message - const [modalStatus, setModalStatus] = useState<'loading' | 'export' | 'merge' | 'pushSubmit'>('loading') + // syncing: show syncing spinner while request is being processed + const [modalStatus, setModalStatus] = useState('loading') return ( <> From 9c96646885c0fa46dc493111997995e07e419005 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 03:35:12 +0000 Subject: [PATCH 08/25] fix: add clean up for github-sync - remove sync status for delete project (hard del) - remove branch for unneed sync - add GITHUB_SYNC_ENABLED to control module import --- .../app/js/GitHubSyncController.js | 12 ++++++++ .../github-sync/app/js/GitHubSyncHandler.js | 26 +++++++++++++++++ .../github-sync/app/src/GitHubSyncHandler.mjs | 8 +++++- services/web/modules/github-sync/index.mjs | 28 +++++++++++++++---- 4 files changed, 68 insertions(+), 6 deletions(-) diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js index d31c495c89..e63c8ee6c7 100644 --- a/services/github-sync/app/js/GitHubSyncController.js +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -149,6 +149,14 @@ async function mergeToGitHubAndPushback(req, res, next) { ) newSha = mergeResult.sha + + // delete overleaf branch + await GithubSyncHandler.promises.deleteBranchOnGitHub( + projectStatus.repo, + branchName, + userId + ) + } catch (err) { // update merge_status to failure, and save the unmerged_branch await GithubSyncHandler.promises.updateProjectGitHubSyncStatus(projectId, { @@ -244,10 +252,14 @@ async function mergeToGitHubAndPushback(req, res, next) { newSha: newSha } ) + } else { + // no changes, just return ok + return res.status(200).json({ message: 'Already up to date, no changes to sync' }) } } catch (err) { res.status(500).json({ error: err.message }) } + res.status(200).json({ message: 'Merge to GitHub and push back process completed' }) } // p 699dd39a8a419bfc8f417400 diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index 05d8de7e44..7af6ebffd2 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -506,6 +506,29 @@ async function createOrUpdateBranchRef(repoFullName, branch, commitSha, userId) } +async function deleteBranchOnGitHub(repoFullName, branch, userId) { + const accessToken = getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const url = `${GITHUB_API_BASE}/repos/${repoFullName}/git/refs/heads/${branch}` + + const response = await fetch(url, { + method: 'DELETE', + headers: { + Authorization: `token ${accessToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (response.status === 404) { + logger.warn({ repoFullName, branch }, 'Branch not found when trying to delete, ignoring') + return + } +} + + async function getCommitTreeSha(repoFullName, commitSha, accessToken) { const response = await fetch(`${GITHUB_API_BASE}/repos/${repoFullName}/git/commits/${commitSha}`, { method: 'GET', @@ -693,6 +716,8 @@ function generateRespURL(diff, tree, repoFullName, newSha) { return resp } + + export default { promises: { getProjectGitHubSyncStatus, @@ -711,6 +736,7 @@ export default { updateProjectGitHubSyncStatus, saveProjectGitHubSyncStatus, diffBranchsOnGitHub, + deleteBranchOnGitHub, }, generateRespURL, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 02e0df9f89..2a72247b27 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -59,7 +59,12 @@ async function updateProjectGitHubSyncStatus(projectId, updateFields) { return projectStatus } - +/** + * Delete project's GitHub sync status + */ +async function deleteProjectGitHubSyncStatus(projectId) { + await GitHubSyncProjectStates.deleteOne({ projectId }) +} /** * List user's GitHub repositories @@ -275,5 +280,6 @@ export default { listCommitsSince, syncProjectToGitHub, applyChangesToOverleaf, + deleteProjectGitHubSyncStatus, }, } \ No newline at end of file diff --git a/services/web/modules/github-sync/index.mjs b/services/web/modules/github-sync/index.mjs index 0c8f3af24c..dc3b32a40c 100644 --- a/services/web/modules/github-sync/index.mjs +++ b/services/web/modules/github-sync/index.mjs @@ -1,10 +1,28 @@ import GitHubSyncRouter from './app/src/GitHubSyncRouter.mjs' - +import Modules from '../../app/src/infrastructure/Modules.mjs' +import logger from '@overleaf/logger' +import GitHubSyncHandler from './app/src/GitHubSyncHandler.mjs' /** @import { WebModule } from "../../types/web-module" */ -/** @type {WebModule} */ -const GitHubSyncModule = { - router: GitHubSyncRouter, + +let GitHubSyncModule = {} +if (process.env.GITHUB_SYNC_ENABLED === 'true') { + logger.debug({}, 'Enabling GitHub Sync module') + + // Notes, this is only triggered in hard delete, no soft delete. + // Hard delete have some time delay, usually 30 or more days after soft delete. + Modules.hooks.attach('projectExpired', async projectId => { + try { + await GitHubSyncHandler.promises.deleteProjectGitHubSyncStatus(projectId) + logger.debug({ projectId }, 'Deleted GitHub sync status for expired project') + } catch (err) { + logger.warn({ projectId, err }, 'failed deleting project in github sync.') + } + }) + + GitHubSyncModule = { + router: GitHubSyncRouter, + } } -export default GitHubSyncModule \ No newline at end of file +export default GitHubSyncModule From e17d2c50661dc4f6f32814a25460b0576b709571 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 03:35:42 +0000 Subject: [PATCH 09/25] frontend: optimize import while loading --- .../import-from-github-modal-wrapper.tsx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx index d3450bbe80..d3c4c7e965 100644 --- a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx +++ b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx @@ -15,14 +15,15 @@ const ModalContent = () => { const { t } = useTranslation() const { appName } = getMeta('ol-ExposedSettings') const [isLoading, setIsLoading] = React.useState(true) + const [isLoadingImport, setIsLoadingImport] = React.useState(false) const [isEnabled, setIsEnabled] = React.useState(false) const [error, setError] = React.useState(null) const [repos, setRepos] = React.useState>([]) - const [inFlight, setInFlight] = React.useState(false) - const handleImport = (name: string, fullName: string) => { - setInFlight(true) + const handleImport = (name: string, fullName: string) => { + setIsLoading(true) + setIsLoadingImport(true) fetch('/project/new/github-sync', { method: 'POST', headers: { @@ -45,7 +46,6 @@ const ModalContent = () => { .catch(error => { console.error('Error importing GitHub repository:', error) setError(error instanceof Error ? error.message : 'Unknown error') - setInFlight(false) }) } @@ -92,7 +92,9 @@ const ModalContent = () => {
- {t('loading_github_repositories')} + { + isLoadingImport ? t('importing') : t('loading_github_repositories') + }
) : isEnabled ? ( @@ -120,7 +122,6 @@ const ModalContent = () => { handleImport(repo.name, repo.fullName)} > {t('import_to_sharelatex', { appName })} @@ -132,7 +133,7 @@ const ModalContent = () => { - ) : + ) :

{ t('link_to_github_description', { appName }) @@ -144,7 +145,7 @@ const ModalContent = () => { {t('link_to_github')}

- + } ) From 9094979f5ce6f5fa830fd5d128d8a84b4f3f3ec2 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 04:18:59 +0000 Subject: [PATCH 10/25] fix: use fast-forward to apply changes in overleaf if no update in github default branch --- .../app/js/GitHubSyncController.js | 38 +++++++++---- .../github-sync/app/js/GitHubSyncHandler.js | 56 ++++++++++++++++--- 2 files changed, 77 insertions(+), 17 deletions(-) diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js index e63c8ee6c7..1310a1c5ec 100644 --- a/services/github-sync/app/js/GitHubSyncController.js +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -113,14 +113,19 @@ async function mergeToGitHubAndPushback(req, res, next) { const latestVersion = latestVersionData.version const last_sync_version = projectStatus.last_sync_version const last_sync_sha = projectStatus.last_sync_sha + const branch_latest_sha = await GithubSyncHandler.promises.getBranchHeadCommitSha( + projectStatus.repo, + projectStatus.default_branch, + userId + ) // only export changes if (latestVersion > last_sync_version) { // create a new branch from last_sync_sha const now = new Date() - const branchName = `overleaf-${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}-${String(now.getDate()).padStart(2,'0')}-${String(now.getHours()).padStart(2,'0')}${String(now.getMinutes()).padStart(2,'0')}` + const branchName = `overleaf-${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}-${String(now.getHours()).padStart(2, '0')}${String(now.getMinutes()).padStart(2, '0')}` - const branchCreated = await GithubSyncHandler.promises.createOrUpdateBranchRef( + const branchCreated = await GithubSyncHandler.promises.createOrUpdateBranchRef( projectStatus.repo, branchName, last_sync_sha, @@ -141,15 +146,28 @@ async function mergeToGitHubAndPushback(req, res, next) { // Try merge the branch to default branch, if failed, record. try { - const mergeResult = await GithubSyncHandler.promises.mergeBranchToDefaultBranch( - projectStatus.repo, - branchName, - projectStatus.default_branch, - userId - ) + if (branch_latest_sha !== last_sync_sha) { + const mergeResult = await GithubSyncHandler.promises.mergeBranchToDefaultBranch( + projectStatus.repo, + branchName, + projectStatus.default_branch, + userId + ) + newSha = mergeResult.sha + } else { + // we need to fast-forward the default branch + const mergeResult = await GithubSyncHandler.promises.fastForwardBranchToDefaultBranch( + projectStatus.repo, + branchName, + projectStatus.default_branch, + userId + ) + newSha = mergeResult.sha + } + - newSha = mergeResult.sha + logger.debug({ projectId, branchName, newSha }, 'Branch merged to default branch successfully') // delete overleaf branch await GithubSyncHandler.promises.deleteBranchOnGitHub( projectStatus.repo, @@ -179,7 +197,7 @@ async function mergeToGitHubAndPushback(req, res, next) { ) } - + } else if (projectStatus.merge_status === 'failure') { // If the last merge failed, we try to re-merge the unmerged branch const unmergedBranch = projectStatus.unmerged_branch diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index 7af6ebffd2..3229258bce 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -271,7 +271,9 @@ async function getBranchHeadCommitSha(repoFullName, branch, userId) { } // We need to remove init README. -async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, accessToken) { +async function updateBranchToCommit( + repoFullName, branch, commitSha, accessToken, ifForce = false +) { const response = await fetch( `${GITHUB_API_BASE}/repos/${repoFullName}/git/refs/heads/${branch}`, { @@ -283,7 +285,7 @@ async function forceUpdateBranchToCommit(repoFullName, branch, commitSha, access }, body: JSON.stringify({ sha: commitSha, - force: true, + force: ifForce, }), } ) @@ -345,8 +347,8 @@ async function initializeRepositoryForProject(projectId, userId, repoFullName, d const commitSha = await createCommitOnGitHub( repoFullName, treeSha, `Initial Overleaf Import`, accessToken) - const updateRefResult = await forceUpdateBranchToCommit( - repoFullName, defaultBranch, commitSha, accessToken) + const updateRefResult = await updateBranchToCommit( + repoFullName, defaultBranch, commitSha, accessToken, true) logger.debug({ projectId, repoFullName, treeSha, commitSha, updateRefResult }, 'Created initial commit on GitHub Successfully') @@ -507,7 +509,8 @@ async function createOrUpdateBranchRef(repoFullName, branch, commitSha, userId) async function deleteBranchOnGitHub(repoFullName, branch, userId) { - const accessToken = getUserGitHubCredentials(userId) + logger.debug({ repoFullName, branch }, 'Deleting branch on GitHub') + const accessToken = await getUserGitHubCredentials(userId) if (!accessToken) { throw new Error('User does not have GitHub credentials') } @@ -521,11 +524,21 @@ async function deleteBranchOnGitHub(repoFullName, branch, userId) { Accept: 'application/vnd.github.v3+json', }, }) - + if (response.status === 404) { logger.warn({ repoFullName, branch }, 'Branch not found when trying to delete, ignoring') return } + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + logger.warn( + { repoFullName, branch, status: response.status, error: errorData }, + 'Failed to delete branch on GitHub' + ) + } + + logger.debug({ repoFullName, branch, status: response.status }, 'Deleted branch on GitHub') } @@ -576,6 +589,30 @@ async function mergeBranchToDefaultBranch(repoFullName, sourceBranch, defaultBra return mergeData } +async function fastForwardBranchToDefaultBranch(repoFullName, sourceBranch, defaultBranch, userId) { + const accessToken = await getUserGitHubCredentials(userId) + if (!accessToken) { + throw new Error('User does not have GitHub credentials') + } + + const sourceHeadSha = await getBranchHeadCommitSha(repoFullName, sourceBranch, userId) + if (!sourceHeadSha) { + throw new Error(`Source branch ${sourceBranch} not found`) + } + + + // Fast forward the default branch to the source branch head sha, if possible. + let ffResult = await updateBranchToCommit( + repoFullName, defaultBranch, sourceHeadSha, accessToken, false + ) + + return { + ...ffResult, + sha: ffResult?.object?.sha || sourceHeadSha, + } +} + + async function diffChangesOnGitHub(repoFullName, baseBranch, fromSha, toSha, userId) { const accessToken = await getUserGitHubCredentials(userId) @@ -600,6 +637,10 @@ async function diffChangesOnGitHub(repoFullName, baseBranch, return compareData.files || [] } + +// We do a workarount here +// if user delete that branch on GitHub, we will consider merge successful +// Return [] means no diff. async function diffBranchsOnGitHub( repoFullName, baseBranch, compareBranch, userId ){ @@ -737,6 +778,7 @@ export default { saveProjectGitHubSyncStatus, diffBranchsOnGitHub, deleteBranchOnGitHub, + fastForwardBranchToDefaultBranch }, generateRespURL, -} \ No newline at end of file +} From 5ababd602ea216b1bed41c84f63c8b1e6d322e45 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 04:58:19 +0000 Subject: [PATCH 11/25] ce: add github-sync to `server-ce` --- server-ce/config/env.sh | 1 + server-ce/runit/github-sync/run | 12 ++++++++++++ server-ce/services.js | 3 +++ 3 files changed, 16 insertions(+) create mode 100755 server-ce/runit/github-sync/run diff --git a/server-ce/config/env.sh b/server-ce/config/env.sh index 7c12b7aa30..a0364c65d1 100644 --- a/server-ce/config/env.sh +++ b/server-ce/config/env.sh @@ -12,6 +12,7 @@ export PROJECT_HISTORY_HOST=127.0.0.1 export REALTIME_HOST=127.0.0.1 export WEB_HOST=127.0.0.1 export WEB_API_HOST=127.0.0.1 +export GITHUB_SYNC_HOST=127.0.0.1 # If SANDBOXED_COMPILES_SIBLING_CONTAINERS is set to true, # we need to set the TEXLIVE_IMAGE_USER to www-data so that the diff --git a/server-ce/runit/github-sync/run b/server-ce/runit/github-sync/run new file mode 100755 index 0000000000..1b028cbfec --- /dev/null +++ b/server-ce/runit/github-sync/run @@ -0,0 +1,12 @@ +#!/bin/bash + +NODE_PARAMS="" +if [ "$DEBUG_NODE" == "true" ]; then + echo "running debug - github-sync" + NODE_PARAMS="--inspect=0.0.0.0:30670" +fi + +source /etc/overleaf/env.sh +export LISTEN_ADDRESS=127.0.0.1 + +exec /sbin/setuser www-data /usr/bin/node $NODE_PARAMS /overleaf/services/github-sync/app.js >> /var/log/overleaf/github-sync.log 2>&1 \ No newline at end of file diff --git a/server-ce/services.js b/server-ce/services.js index 546df2bc3a..5cf372e1b6 100644 --- a/server-ce/services.js +++ b/server-ce/services.js @@ -35,6 +35,9 @@ module.exports = [ { name: 'linked-url-proxy', }, + { + name: 'github-sync', + } ] if (require.main === module) { From 370bf05144713b6b3d89bd4d482e9041bc39157d Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 05:40:19 +0000 Subject: [PATCH 12/25] feat: add proxy for github sync --- .../github-sync/app/js/GitHubSyncHandler.js | 21 ++++++++++++++++++- services/github-sync/package.json | 1 + .../github-sync/app/src/GitHubApiClient.mjs | 20 ++++++++++++++++++ .../app/src/GitHubSyncController.mjs | 13 +----------- .../github-sync/app/src/GitHubSyncHandler.mjs | 16 +++++++++----- .../github-sync/app/src/GitHubSyncUpdater.mjs | 9 ++++++-- 6 files changed, 60 insertions(+), 20 deletions(-) diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index 3229258bce..f48bc89a75 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -3,9 +3,13 @@ import { GitHubSyncProjectStates, GitHubSyncUserCredentials } from './modals/ind import { ObjectId } from './mongodb.js' import SecretHelper from './SecretHelper.js' import Settings from '@overleaf/settings' - +import HttpsProxyAgent from 'https-proxy-agent' +import fetch from 'node-fetch' const GITHUB_API_BASE = 'https://api.github.com' +const proxyUrl = process.env.GITHUB_SYNC_PROXY_URL +const httpsAgent = proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined + async function getProjectGitHubSyncStatus(projectId) { return GitHubSyncProjectStates.findByProjectId(projectId) @@ -52,6 +56,7 @@ async function createRepositoryOnGitHub(userId, repoName, repoDescription, isPri 'Authorization': `token ${accessToken}`, 'Accept': 'application/vnd.github.v3+json', }, + agent: httpsAgent, body: JSON.stringify({ name: repoName, description: repoDescription, @@ -172,6 +177,7 @@ async function uploadBlobToGitHub(repoFullName, filePath, buffer, accessToken) { 'Authorization': `token ${accessToken}`, 'Accept': 'application/vnd.github.v3+json', }, + agent: httpsAgent, body: JSON.stringify({ content, encoding, @@ -207,6 +213,7 @@ async function createTreeOnGitHub(repoFullName, blobShas, accessToken, baseTreeS 'Authorization': `token ${accessToken}`, 'Accept': 'application/vnd.github.v3+json', }, + agent: httpsAgent, body: JSON.stringify(body), }) @@ -233,6 +240,7 @@ async function createCommitOnGitHub(repoFullName, treeSha, message, accessToken, tree: treeSha, parents: parents, }), + agent: httpsAgent, }) if (!response.ok) { @@ -258,6 +266,7 @@ async function getBranchHeadCommitSha(repoFullName, branch, userId) { Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (response.status === 404) return null @@ -287,6 +296,7 @@ async function updateBranchToCommit( sha: commitSha, force: ifForce, }), + agent: httpsAgent, } ) @@ -480,6 +490,7 @@ async function createOrUpdateBranchRef(repoFullName, branch, commitSha, userId) ref: `refs/heads/${branch}`, sha: commitSha, }), + agent: httpsAgent, }) if (!createResp.ok) { const errorData = await createResp.json().catch(() => ({})) @@ -499,6 +510,7 @@ async function createOrUpdateBranchRef(repoFullName, branch, commitSha, userId) sha: commitSha, force: false, }), + agent: httpsAgent, }) if (!updateResp.ok) { @@ -523,6 +535,7 @@ async function deleteBranchOnGitHub(repoFullName, branch, userId) { Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (response.status === 404) { @@ -549,6 +562,7 @@ async function getCommitTreeSha(repoFullName, commitSha, accessToken) { Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (!response.ok) { @@ -578,6 +592,7 @@ async function mergeBranchToDefaultBranch(repoFullName, sourceBranch, defaultBra head: sourceBranch, commit_message: `Merge ${sourceBranch} to ${defaultBranch}`, }), + agent: httpsAgent, }) if (!response.ok) { @@ -626,6 +641,7 @@ async function diffChangesOnGitHub(repoFullName, baseBranch, Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (!response.ok) { @@ -655,6 +671,7 @@ async function diffBranchsOnGitHub( Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (!response.ok) { @@ -679,6 +696,7 @@ async function getFileTreeOnCommit(repoFullName, commitSha, userId) { Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (!response.ok) { @@ -698,6 +716,7 @@ async function getFileTreeOnCommit(repoFullName, commitSha, userId) { Authorization: `token ${accessToken}`, Accept: 'application/vnd.github.v3+json', }, + agent: httpsAgent, }) if (!treeResponse.ok) { diff --git a/services/github-sync/package.json b/services/github-sync/package.json index 46ccd4db87..91aa17ed4b 100644 --- a/services/github-sync/package.json +++ b/services/github-sync/package.json @@ -28,6 +28,7 @@ "body-parser": "1.20.4", "bunyan": "^1.8.15", "express": "4.22.1", + "https-proxy-agent": "^7.0.6", "lodash": "^4.17.21", "mongodb-legacy": "6.1.3", "nock": "^13.5.6", diff --git a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs index 7153ba0907..ff21143279 100644 --- a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs +++ b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs @@ -265,6 +265,25 @@ async function listCommitsSince(pat, fullName, branch, sinceCommitSha) { return commits } +async function getRepoZipball(pat, repoFullName, latestCommitSha) { + const url = `${GITHUB_API_BASE}/repos/${repoFullName}/zipball/${latestCommitSha}` + const headers = { + Authorization: `token ${pat}`, + Accept: 'application/vnd.github.v3+json', + } + + const response = await fetch(url, { + headers, + agent: httpsAgent, + }) + + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status} - ${response.statusText}`) + } + + return response +} + export default { exchangeCodeForPat, verifyPat, @@ -274,5 +293,6 @@ export default { listOrgs, listUser, getRepoInfo, + getRepoZipball, listCommitsSince, } \ No newline at end of file diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index 6fa43ac7e5..bfc0309999 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -86,18 +86,7 @@ async function importRepo(req, res) { const { defaultBranch, latestCommitSha } = await GitHubSyncHandler.promises.getRepoInfo(userId, repo) // Then download the zipball from GitHub and create a new project with that zipball - const url = new URL(`https://api.github.com/repos/${repo}/zipball/${encodeURIComponent(latestCommitSha)}`) - const token = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(userId) - - const response = await fetch(url.toString(), { - headers: { - Authorization: `token ${token}`, - Accept: 'application/vnd.github.raw+json', - }, - }) - if (!response.ok) { - throw new Error(`GitHub API error: ${response.status} ${response.statusText}`) - } + const response = await GitHubSyncHandler.promises.getRepoZipball(userId, repo, latestCommitSha) const fsPath = Path.join( Settings.path.dumpFolder, diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 2a72247b27..0b0af50909 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -6,9 +6,6 @@ import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import SecretsHelper from './SecretsHelper.mjs' import GitHubSyncUpdater from './GitHubSyncUpdater.mjs' -import { fetchJson } from '@overleaf/fetch-utils' - - /** * Get user's GitHub sync status @@ -98,8 +95,7 @@ async function getProjectSyncStatus(projectId) { // The implementation would involve making a POST request to GitHub's token endpoint // with the client ID, client secret, and the code received from the OAuth callback async function exchangeCodeForToken(code) { - - return await GitHubApiClient.exchangeCodeForToken(code) + return await GitHubApiClient.exchangeCodeForPat(code) } // Save the GitHub access token for a user, encrypted in the database @@ -263,6 +259,15 @@ async function applyChangesToOverleaf(projectId, newSha, files, userId) { } +async function getRepoZipball(userId, repoFullName, latestCommitSha) { + const pat = await getGitHubAccessTokenForUser(userId) + if (!pat) { + throw new Error('GitHub not connected') + } + + return await GitHubApiClient.getRepoZipball(pat, repoFullName, latestCommitSha) +} + export default { promises: { getUserGitHubStatus, @@ -274,6 +279,7 @@ export default { removeGitHubAccessTokenForUser, getGitHubAccessTokenForUser, getRepoInfo, + getRepoZipball, saveNewlySyncedProjectState, getGitHubOrgsForUser, exportProjectToGitHub, diff --git a/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs b/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs index b3031c1e7a..12014de500 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs @@ -12,6 +12,11 @@ import { promises as fsPromises } from 'fs' import { Snapshot } from 'overleaf-editor-core' import { pipeline } from 'stream/promises' import { fetchStream } from '@overleaf/fetch-utils' +import HttpsProxyAgent from 'https-proxy-agent' +import fetch from 'node-fetch' + +const proxyUrl = process.env.GITHUB_SYNC_PROXY_URL +const httpsAgent = proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined /** @@ -206,7 +211,7 @@ async function downloadFile(url, fsPath, fileName, token) { 'Accept': 'application/vnd.github.v3.raw' } - const response = await fetch(url, { headers: headers }) + const response = await fetch(url, { headers: headers, agent: httpsAgent }) if (!response.ok) { throw new Error(`Failed to download file from ${url}: ${response.statusText}`) @@ -217,7 +222,7 @@ async function downloadFile(url, fsPath, fileName, token) { const writeStream = fs.createWriteStream(filePath) try { - const readStream = await fetchStream(url, { headers }) + const readStream = await fetchStream(url, { headers, agent: httpsAgent }) await pipeline(readStream, writeStream) return fsPath } catch (err) { From 37f8b844e0f8000bc732e659a41797de0092dee9 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 06:29:56 +0000 Subject: [PATCH 13/25] fix: proxy import from github-sync --- services/web/modules/github-sync/app/src/GitHubApiClient.mjs | 2 +- .../web/modules/github-sync/app/src/GitHubSyncUpdater.mjs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs index ff21143279..57809a7193 100644 --- a/services/web/modules/github-sync/app/src/GitHubApiClient.mjs +++ b/services/web/modules/github-sync/app/src/GitHubApiClient.mjs @@ -1,7 +1,7 @@ import logger from '@overleaf/logger' import fetch from 'node-fetch' import Settings from '@overleaf/settings' -import HttpsProxyAgent from 'https-proxy-agent' +import { HttpsProxyAgent } from 'https-proxy-agent' const GITHUB_API_BASE = 'https://api.github.com' diff --git a/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs b/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs index 12014de500..75b8725cbe 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncUpdater.mjs @@ -12,7 +12,7 @@ import { promises as fsPromises } from 'fs' import { Snapshot } from 'overleaf-editor-core' import { pipeline } from 'stream/promises' import { fetchStream } from '@overleaf/fetch-utils' -import HttpsProxyAgent from 'https-proxy-agent' +import { HttpsProxyAgent } from 'https-proxy-agent' import fetch from 'node-fetch' const proxyUrl = process.env.GITHUB_SYNC_PROXY_URL @@ -240,4 +240,4 @@ export default { promises: { postSnapshot, } -} \ No newline at end of file +} From 7f1a7b7868ae9e4e9e9096383b6789d97f2aae42 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 28 Feb 2026 07:22:25 +0000 Subject: [PATCH 14/25] fix: enhance GitHub sync Modal with need-auth modal for new user --- .../app/src/GitHubSyncController.mjs | 11 ++- .../github-sync/app/src/GitHubSyncHandler.mjs | 10 ++ .../js/components/github-integration-card.tsx | 92 ++++++++++++++++--- 3 files changed, 99 insertions(+), 14 deletions(-) diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index bfc0309999..eca5b8864f 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -23,7 +23,6 @@ async function getStatus(req, res) { if (!status) { return res.json({ enabled: false }) } - res.json(status) } @@ -62,6 +61,16 @@ async function getProjectStatus(req, res) { status.owner = owner } + // check if owner's GitHub credentials are still valid. If not, return enabled: false to trigger re-auth flow in frontend + const credentials = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(ownerId) + if (!credentials) { + status.enabled = false + return res.json({ + enabled: false + } + ) + } + // remove status. last_sync_sha and .last_sync_version if (status.last_sync_sha) delete status.last_sync_sha diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 0b0af50909..c5d8c65428 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -15,6 +15,16 @@ async function getUserGitHubStatus(userId) { if (!credentials) { return { available: true, enabled: false } } + + // test if the token is still valid by making an API call to GitHub + const token = await SecretsHelper.decryptAccessToken(credentials.auth_token_encrypted) + try { + await GitHubApiClient.listRepos(token, { per_page: 1 }) + } catch (err) { + logger.warn({ userId, err }, 'GitHub token invalid, treating as not connected') + return { available: true, enabled: false } + } + return { available: true, enabled: true diff --git a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx index 4534f2fca3..567d60e102 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx @@ -31,7 +31,44 @@ import { useEditorManagerContext } from '@/features/ide-react/context/editor-man import { Trans } from 'react-i18next' -type GitHubSyncModalStatus = 'loading' | 'export' | 'merge' | 'pushSubmit' | 'syncing' | 'conflict' +type GitHubSyncModalStatus = 'loading' | 'export' | 'merge' | 'pushSubmit' | 'syncing' | 'conflict' | 'need-auth' + +type GitHubSyncModalNeedAuthProps = { + handleHide: () => void +} + +const GitHubSyncModalNeedAuth = ({ handleHide }: GitHubSyncModalNeedAuthProps) => { + const { t } = useTranslation() + const { appName } = getMeta('ol-ExposedSettings') + return ( + <> + +

{t('link_to_github_description', { appName })}

+
+ + + {t('close')} + + + { + window.open( + '/github-sync/beginAuth', + 'githubAuth', + 'width=600,height=700' + ) + }} + > + {t('link_to_github')} + + + + ) +} type GitHubSyncModalSyncingProps = { handleHide: () => void @@ -607,27 +644,53 @@ function GitHubSyncModal({ if (!show || !project || modalStatus !== 'loading') { return } - const fetchGitHubSyncStatus = async () => { + + const fetchUserGitHubSyncStatus = async () => { try { - const data = await getJSON(`/project/${projectId}/github-sync/status`) - if (data.enabled && data.merge_status === 'success') { - setModalStatus('merge') - setProjectSyncStatus(data) - } else if (data.enabled && data.merge_status === 'failure') { - setModalStatus('conflict') - setProjectSyncStatus(data) - } - else { - setModalStatus('export') + const data = await getJSON('/user/github-sync/status') + if (data.enabled) { + // fetch project github sync status + const projectStatus = await getJSON(`/project/${projectId}/github-sync/status`) + if (projectStatus.enabled && projectStatus.merge_status === 'success') { + setModalStatus('merge') + setProjectSyncStatus(projectStatus) + } else if (projectStatus.enabled && projectStatus.merge_status === 'failure') { + setModalStatus('conflict') + setProjectSyncStatus(projectStatus) + } else { + setModalStatus('export') + } + } else { + setModalStatus('need-auth') } } catch (err: any) { console.error('Failed to fetch GitHub sync status', err) } } - fetchGitHubSyncStatus() + // const fetchGitHubSyncStatus = async () => { + // try { + // const data = await getJSON(`/project/${projectId}/github-sync/status`) + // if (data.enabled && data.merge_status === 'success') { + // setModalStatus('merge') + // setProjectSyncStatus(data) + // } else if (data.enabled && data.merge_status === 'failure') { + // setModalStatus('conflict') + // setProjectSyncStatus(data) + // } + // else { + // setModalStatus('export') + // } + // } catch (err: any) { + // console.error('Failed to fetch GitHub sync status', err) + // } + // } + + fetchUserGitHubSyncStatus() }, [show, modalStatus]) + + useEffect(() => { if (!show) setCommitMessage('') @@ -662,6 +725,9 @@ function GitHubSyncModal({ setModalStatus={setModalStatus} /> } + { + modalStatus === 'need-auth' && + } ) From ff2527aef9e8a42697fc27820bf31881821b002f Mon Sep 17 00:00:00 2001 From: Musicminion Date: Mon, 2 Mar 2026 03:34:09 +0000 Subject: [PATCH 15/25] docs: update README - update README with Overleaf Pro features and add new screenshot - update GitHub Sync README --- README.md | 22 +++++++++++++++++++-- doc/screenshot-pro.png | Bin 0 -> 886429 bytes services/github-sync/README.md | 35 ++++++++++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 doc/screenshot-pro.png diff --git a/README.md b/README.md index 524a831262..f05c571ff6 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,29 @@ License

-A screenshot of a project being edited in Overleaf Community Edition +A screenshot of a project being edited in Overleaf Community Edition

- Figure 1: A screenshot of a project being edited in Overleaf Community Edition. + Figure 1: A screenshot of a project being edited in Overleaf Pro Edition.

+## Overleaf Pro Edition +Overleaf Pro is an enhanced version of Overleaf with almost all features and capabilities. For details, please check [Overleaf Pro](https://overleaf-pro.ayaka.space) page. Features in Overleaf Pro include: + +- GitHub Sync in 2-ways (Features in SaaS) +- Git-Bridge Support (Features in Server Pro) +- Admin Panel (User/Project management) +- SSO with LDAP and SAML or OAuth 2.0 +- Unlimited Compile Times (Adjustable in admin panel) +- Self Register (Optional, can be limited by mail domain) +- Sandbox Compile (With [texlive-full](https://github.com/ayaka-notes/texlive-full) Image Support) +- Template System (With Template Gallery) +- Track Changes (With Review and Comment Panel) +- Full Project History +- Symbol Palette +- ARM Support + +Last but not least, Overleaf Pro is open-source, free to use and modify. You can self-host it and contribute to the development of Overleaf Pro. For more details, please check [Developer Documentation](https://overleaf-pro.ayaka.space/dev) page. + ## Community Edition [Overleaf](https://www.overleaf.com) is an open-source online real-time collaborative LaTeX editor. We run a hosted version at [www.overleaf.com](https://www.overleaf.com), but you can also run your own local version, and contribute to the development of Overleaf. diff --git a/doc/screenshot-pro.png b/doc/screenshot-pro.png new file mode 100644 index 0000000000000000000000000000000000000000..8ccb6a9f2eff0adda2ba360a5ab2155420cb0bee GIT binary patch literal 886429 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

Ld++E8{`gC)S9iJ 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

o>Wxt$@ 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

3iIz9 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Ξ}DV%jZUG6cj9=U={v5FF8jfo$@d0`(y3> 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

wG!A!~`XtjV0xk9J@1LNjH6+9w;* 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⪚>|L>tVuB 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

@89;w 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%0AMnnu9D5p-u}M(E{8W&rBaj0 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]Fm)mVw69)Fn71Xza*6)C{^U<`zzX}U!0R{5bJG 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

5b&|_lelC9J zn2A_c<&#Rkparz5`Uds+C=R@7jU#dW>F#YksWfaQ1K0r49 zT0A);XJ7>y){brrkyccY80nD1G@3xTRk0_iwtKkJ2eH3Iq+|a3St-NRH zvPb!2?cC?`S1e`DI$n5|Q1}srBh1pqe$mD!+hU%iu+8$*Ro_;G2b0`)4>ge2q-vC3)O)2||ZYRPnP zuh!>CF^e9Cr2WV`xOK6zkhH>rLrQQmp3)W)50TscVK1q!aKPr_p@-jEm*P5?pg*GP5HE z#4z)`tNQr4h7X}VrS>id8XD(}K&iG@_f{8g{@l%z)*Eq}G18wE=VI)aNep&A2}<3{ zV1X~@8?HT^lVBV-P0yeCh7(FR%}{&^`ZrjLo9mx=1#v911Ciz2LVONzc9QFK*NsQn zJd2u5pr6cBz?Mh^xwk(`Q&p#&HP>BdBjxl4pVSi0B@m%Nu5zQvCl$gR ze{*Ucm+UQF{f*SuRShL}1~2KuK>;l4XYI!I8JnvFF%j(qF*{hb=DU-)ms|ttHWrq` zE=0V^SYdt!ifb%J(gLS8F6lgH05CyvEP8`m6jZccTPjs7@1$gcwbs8^MjyQz{C(O^Ui;Rp0nu6c<85c9@W3@u zJn;_h={t1CqXY=`0HD;`Kr7TxHlJKPW2o#W)7AQ`S z5V!wwz1+zEEX;`8U0Z8-u*zyXWWInfH=H-Gxa!+*6;`jyE@#a7m7kM3GAHc1;vCZ$F?c`w!&T&kMeVAQ>vWm@o)?` zYH-Bpl(`uU^5n`V^++i`ec!p57mn-aItH=8VdJD}ztJ?m+y@1<+o4i*{d$t0@SgQU z^zA~Q4iGgFsU3F7&K>qyGrd7hEo)?Qc5SPAi}EhJ{nX_98$=}T(x2Xr@F3_cFU`n* z_Z_bC?KEpeB=3OjxZIj^mVCqze* z|I?+>EuhBOA}$YqfrpN;J;Y+-Hj&n_Uf<8lI}5DN)gh)7;fk=Pq2%#Yv7S$io!evWb3K=?A`_eNFqR{3$Kpj5 z0!>P2ghNHET;BhX3&)EN?7X+RWc#y*Z)w+E8*b+`DD-VE#2m*~c}?Er*~Z}vM?L*Z z?U37s{j>YaPRPl4I)=m6J9znR?wi-~19-oZ-iUU!Euu_uKovb~K)e>?QWcm5I5si$(bfUB1LS>O;p3N~zW1~R{nL(s9L4bYwE zdygLADGBrN;`^sYcMhGGs?g1x(q(^Uaf?oh$yVVqI6I$~%^wtJ*fPEO!}Tf-o+ewJ zCi@&W>+otWS1mY{yCv@XxW+K^hpQ=^G%x5~<@g!Wee08Wlyjo&q1-stawohmI(a3< z?+$rk=1cM;R@KZwcM2S~Z@rc={c+!P>uT~8L>4}C6Q4vBKl;t-k@_!V;rY46=JV8^ zjINo|dEol_w_uG}C{-_~>b}{Gi32tH;hU_N>p0(X#S`QI5WK)G)oT1UOg%0_Z7h;x zmK49QgNCB0&-LtpXEmL;diLxiWZ|1%C0QWnDNb*YRc6x{32AMU;@o|3`_dTs6@BYj zl1KO^sjpNY-%9J5chxzse}P%})BB7LIPP=Xe$U8jpHH(g*QUFsHSu*+-kkppaM+Xz z01nTFehQL*U5}EBeCc+Yq%?v*jiX)8!nn`NLMnYTq%FW)-BmJ)7n~q=`sOR>Kfh0v z5NH_%D7UMG-<}<+o87(pQk*-xY#x?L6K@VHrK}rriBzf=*i2xJU7iWG~jYFk@Udj0_~4 zX6OYRNJFKH@ei*WceYpTsFI!o1{(U~{?rq_vrvYD4`sW-^?=LQKP^v_)u zlDVeJxY9jjqgeHmS@sPc+pz3Z(iTp>3_)1uSNh{VZ1CQOeZ@ElF_VS#>(6xnB4=Uxpjmc>-hw$l!}o418WdGicXJdrFj=DGu8h*^l&c&>;uOB^R0 z_$o-A5jK&DZ>|{Md-Y~)2rqsI9-D&vR6@w*;hV&r?LoV$1UTQOx=RJ*vyRuyE%;Of zXqgeqUuad|JYrRR(Q>ur<^_gXSrKV1>gSzmbB`r68VTz+wei4R@TA?izD3c4ub5A{ zR~{acB{3(C23y;e_qI32egt`|Nd7ZjqiTd~de~Y;mIOp}O8@v3$?1jMNN%``ksh z(gNibjsF&`{-=}juP~Rou{k+Ud-c0j3RKLl#rA(4#nztnR^yv?n}Pnulp^nd7Dts| zy~`w77CU~X-dBaJMSMc|+y^-d>*Cp-!9#|&2yI}Gj?xeeXSh%Pl<2=tIQyY^#|a;G zhZJG2IYmT7m)F)Tzr4Nzg4FNhLy7?53~)47*VO@7P*uR`0=R}iTv{=H*0l)uatfO3 z#vPLEHGd(4zVxKT!C){@6^`-Nz$WlQK9<31tXOMrZ%@}7*JV?FKXG%iQRZ(Y`1iA9 z!X^+15=RkGFY`jSQMLS#ji(262{6&%2e|1Ci^(Gfy_6Qlp}gNM&xY_3m-g?ES{6sN zQ~q=E=C8E|PySCQxBk8%Sy}7c-xILI)qp;tHRt#ypyB!Bq~dSW^vAO}BK6}z|KL)x zS!i8()dt?|KpHPG8JYWf4NM<^fP*?p{B}U6RQ((N7*u)?p|6rMTDVh;+UYOfN-DSh zalAaZlSW9klQvl3a}d{gvelb#6=wJakzx`Cv91bo00BQpyU+mc%pS2L$Nkf`!QCRl z)}F!ylLdeVE(#cit}p~GaCgT@b^v5-9TQ&w51R#z<+}SY@9;1*WUOA;G*DpKB* z8xD9LhW&ctbAM$Ktbk8%$sqn2gWXT-6Faq^IiMaC$DV_=9O#NLCC; zwMDcg~#==E+K4UnC-I`^-BiG1#+p0SC;g*zVfy8C{n-3X$T9@hnf@ zWu#wJ`Xf+IiEL?p{e|XmEd)DjLa8WGgN+P8{B-6PvD;~+HFlqFr5s!^=PE~>#ntQ{ zz8nurp*R2C5XS93#J!GWcx$$dx&CL)6S)BBYi(?TqxN7tfSF6rTL+MN1?RUtSeaow zgW-!j>1C{11T<7h07Mc{qq?@izW_o$FDIj5qH>RYMgxJ}j8=1Abg9 z@fT-0%Jty>>B8Wq6-*Lyk1S|=<{CqAUh}I*o4G)_U>idDA3!-<7AVSetI}g)CJI+2 zj;D454s*+44hdg)$sf&|NF3q-MlmQ{1E`pTlaTTcTvTyH0M_vApLWY5Ea9!+`BYkg zjPnxEpFt`9{?Lp0*CEEjIoFLfVTn_&9P8P%MUVnLV{4O@*eVP-kO@{?YVqFoZ}Vqk zJX+;$b6=$ACu#=CwS{F3JpM(BIK}tFH`K8CI8x4o_JEAX=*C5t<@YIDqTbUT@XbT# zkNUQC8`R_trYHH_&ur6i0Kor!9ufU2tjG4lQ|C34gT>%O53BprU{(@nESA6C}$-B473F z>~}>J9<0%{4)pXWum~;D&bY{^%%IoYxwfVNMRdTw9Y>yNod%6Rj~3#Hz-R(amC0OB z2-Sf8>PVjP17~_@>M}qinm!LK_Kz*z)x$42!8Q;ZwJX_0!m6^Y<7dzVN!W`Bd9|E$ z5MDlqSkF5Owxw~jp=iNKaoeMv1L#wX{2~B=Wt`RO(W>!7kj}@E^tq*WT2yEjAhCVM zWr~NM?jG8tFTr=k5%RC?+H%3PYRI1Dn$I?$alo=wS?h|@G`6s9upE9$^wF@U((Mtz z8kclmogCjk_I6!nLEIo2Y;#G^p`v=~Sb+gttS9!j&Zrr1>}R(0Z!sQF{*r5mU<-Np zyjxi?qz18RX;7!xR|1r5+-AUxn*ezn!q&qh3J{lGNHGbz_H+Hg#_?p^jlJon3(jOa zXRH{UZENZ{0P|HyQ0OV9{;$mZA5VHJ|2*~upybae)i9~yZCqaMQYHfHK z5Np8eMibYDD5wFBlHRz02;{jtc?e)aI^#UTv21gXa<*x+5zqfBI=!zQghfxQY>Bsh zamFCa)h4MQ$|k?7DG%l-4>scZ#atWPwXyj9r*jpy%4Dw9$n|WNR^{uFEBEU2?Q$Dl zjUM$D*#O$@mK1=zNyYp#>llvWo#_5;5Sc;h?46`V^KE z?lVv8^x<%N(j8NBh={K1IM7A)-Lol?xbtr+3V;Qj{42)m;SmI688qr-uKR`;(Q5F4 zqq_18&jEGjvF>$ef*Z-zGSIy-)4fO*^s=I&qR$l|&FrX>wr%zbdjPBtG8Hrhl%Tj+oqm2dKBp2I7 z;m-5k8_gD9Pk|@&GpHM4SW$2ixZ1F&=Dy+3>zDefr*ahF^2y6%B(^*S4F{F{Q~sdM z{!LVR&Oa!@|HG$9ZeUY8NwsKT{2qwXayUvddE3%*8arQDW&V&&$EfBjfC(*b-VcM# z`mL&PpLQJtAN*kJ3Ah(&n+}zED9h;srsbq|raQ;!n9(q3+_IhRSwB}(qBrJ94ruJ% z!pY#+x`yfDy(!rRb8|pxF6sIl01oS6W5)4HaXq|EfHfe+0a~wmBl)}=sH{;4<_NV- z2P~D>g8&Mf(}&=uqvCr$^Q$IA?G5S?yj;ZtXYl0!$oHPkL}|wFe$m-*I4}Imd#;R% zj*8hq>@fkoxN9ON2}#o7qkj4m*jNDQNH9AF^BUP*(a|F#k2@o7pW0q+lST9E;DQu- zS2q?ha;E0*DTKZ<^Z;;?3YcS^!^vZbuV6)qr2tXd39>2ZWgB(|y;U-uvpB5GRT1<^ zcI7q+sq4|pTPenszzb;{Zfq*kD$zEN8dOwTRD!}QrAUKUZ%f`03vIDKpD}~#CqcUd zFlFF2nVd3?SZcbr(dpB#VIO`W|;`!`X z@ZEEmi^|GWgW62apFfY}^mtxU;k#eFz|4@0kAt&hTe@i7UD7m&P~DpuGm_4IBu_lnNRlzOu&WqfyZ(cz310A1hOpPXB2{wO!d%!m%JCdeP$(d6g&)4T=ylWn5HzMNQbTraJ1(h?pZ;{Rg)P^ zC#IPPqi!v+G4U}PY}pGl4z!3va{1^)rUc|^*$eiJ0r*YpbPE3m>TVyu_RsGx#kEPk zub~xC=BWBSm?@x$4p>+28&KdS+vGRDX&e+RwHa9d2z!7IMy(N*+i%CeuN0-b&hugG z)h25vceVXs5N3BdWpC5Qc<5ev+q>u-$FVK5(8Tyms{6HUUDC}HJAN5^LzPK9QEyZ; z#I-J7+(zD97tvHNE}itYm1+x6N#pxAMbBSBQBINrx{J^$cZKgf5i|;Z&oit6k%{SL z+_FFHtJx7az8~SAVw@& zGj7vE8QLV@3eFhi$uk_sx>Z$;mfwJhG2b<3G0qx0!mxIJPb(bU@LYV|RpK1+(&t)O zE*@bd>Oh0*#o&-mnQ{5ai6O$$COtg-{5f3logW&08(&~r1_tFfLn9Yl_67o{wc+&T z(@V0!;d7aA%6pyMF+R>$!-(GL1OBl0G7_*D^(PO99V=u+}@9C6$6GOYQ%lo(bAMPNK1(ZDY zP{VcJ#*3JEuQusjWnG zP0~f74ZAyof;KT0=U0nm2CyqS#p>iZj+fCl?c4ResBjaaBhL|c`5-G9IBO=3?URO> zY?V>Bv}sz%lW6!&Y_pUF7*|knfysnXv#W>pzwcknD*QOG&xJF|LoDOmhK@@v)qR&2 zf>tttB&eMp~{{p67WHyy3HRoYKOk# zD>Gb@<^gK2$9(A7ImfUVl!>3~sli0EXSm(!%9Sm`TVMGO1MYH^d|#=_DJm{5kf$^- z_+r;QN>LTgh$%eV4f`9SALQ!TZl$#^qDyMaj16knM?srBzvIq<1%v3jo7D3NJBLxM z_`b6vywxDyvTo87lCf`E9%x+#9Vb|InPL)M5HKUQF4?(C8f3L^|81FabxR_$B#>( zPMStWEvzb6CztV|>!Rq#Z*MA{>v(&nI9@CF@dZuYhGg+-Xs>Qx;UGT1JMuZS^A$6` z#JBg!d&Z<#9=lzQY-`ZvYB?&9(63cWV9UBNK|aFczNYc-t`CvS28+C1Vf&ynP`Ny+TxsGj}t`|8!O zT<_^)-L|97cVN-Ez2$$@TGX8$@0>fY&p@TsFOy&1TA_d%A+N| z^3uAb?#JgRh9pZc*XOY_jNf^=nhOqzsBPyC?jP+7I%!zT9n(Y~oDg?@|LmQ-^iqfV z?&VjHNK^8&z_wW|3q&F>*u$KM8>2ITtR(6?sSl(}=v@>)c;m^wbBuT7GOiQ|q6L@{ z8YA0w+R3Ef;3w0SDs|&+3bL*Abzku-FIlx!?{Ti6gY-rPKhfH?xw~R=MQCjDg!pFBQ zHhu~!|1A?ZM&aj3&LpJT4MNazu#&MZK{b;N zY@HppV{U6F-7}+RyQ=gjBCa!hX>Ru$vsrn@`i}yxHAjz9!|4;Nq6dR*322rhNwS zi-QQeQPEAVXrH%!YpFj)=Buxf&wmdDLn+`8-J3VTC}K|rBgrEq*NZ-U9G=_^>XO+K z&u`h}0efpS(bCE~{~j-sk*lgrmrZ;E1;5ik&np4h!9IT4z0dcY!xCN&Z1V)y0lT1* z#TV1{<2Dg~=+S0BQMF^YlcKtvQe~?rx>Uq!?ZWP3*|hHUAxdn}1Ff-|bYagtr^l5BD#F z?<9P^BO$?=2N_u3{*eDstl6PLm(TymGA0SWPz9Nc6=I+!p}TzFdgj!;!EobMZ7oFt z<${OE=l-Vsjg(25itB$V2Am~Ts;6hK%%{GIAER;>jY-(5zY1rii`oLexK zvN2$?7=jn-j^^>ut8=@9@o=Y<$@#GfR7QR>^Uljii3@{sVAVg^muGs*s;!A1$t^H%ar8qVb_JQxv!V=hOd#<`WZ=;@3V5qUdmeWBKJCGTZruE39 zU^1){8Fr)FZ!3gxse>@+tvut=%OG?lc8I3D;gS2|z-Zk@t5)diTa=8K=^Y0p-P|iD zqG3#Ar;lRA4tU|1BwEk?sqv$)I?m96<%9vrOK=BF7>EA;vVIYwX(_urP*H~9N_u!M zA-hq9T=?sLkHM_ErF(V86+l680Z@rZf=)BT$dfWwJG zaqeFBh*L4}?%^f|dgm?^W*5ScoqD-ED$2v1H!r_6_d(Ja|4&5M3!i9unU372CBKDYa1ni5;T2Jy`NgMh)whro#jY3y*<#R?SNFeBZ{qc3LEN`go z(OgZ6#z0AUsd1fRzfKtumuMC#i)-vB`P5k7Ud0ID*+1<{-PhFCF3H<*xu5ZIU{5uW zwEJws_XB75W+)M=Bxj07f+6U5wN8%87PvH{;A~)f+`_eCYUfx)=hd~p1=Pj7r{_#* znWqACV^2iWJN82i57y=S4i!$=TAoqfCXGi(^@6g4gF2FjXV?Q_wYa)(P!p;M?!*J&z$e@>KVF`}?6UTrEEL^LwJ!zo{E(8NCBWqL-Vv$ZDqX;CWR{ z>Jut>CpR%ifK3E2@>#F0>4C4^*{SsG5H4JuL{H^PVvfR(M#_UfD9)30kB%)tkD@a= z`(MT25h{It$rnb#@F52t99y7rEm-yeB~WsiYwTyc!>RT3Qv87bE7)Xy%3>Rf&N~Cj z?r3Q2>EedhJd5JRh>Phwu9>Yq5UX?{rzm!6>({Xb(C0ECQc_?cj*fJk&Dxe9vZ~RQ z9JdCQs9y6IY7i3Vco=%=I6S4QiboT~0y;Cg`M|_BPdQ+gn!H!5^+pz4eprFM>$&3- zZLj!v->0Rx#98%3esAwy&)9*6oO1mBx@11%>71J1T7(U1ykOnVrQ!493p-&oTbBk+ z9oP*;KSZ?mUX6e7N3!Iy3$YJiwmXNK>Jws-K8{AA*?t>W#J5L@x-owH?_sg`Dk$LZ z@|s1=33f6w*%1iKhfxpE{R(O$o;pT(24!vP+pgbS{3ox?g6Sln-nZYqQB(Z52xcki@F*A|MNljICxXTr?2nsNW2}T#t z;VF;+36pxCO8uDVxryIov++urFc3{C;>l*m@LDH0i=v1lRP#(ZFfkA~4(4xL@S88) zNJ`c!&i^Q_tn=|A8*wx}ui;{rXZj)25`k4xQn9nk9S#mHuvSQ5moi6+l(|IYX|lb; z#Ei?c{kJ{E_j(d`s(pK|!#m9@K0KX$_G*r}^lLQzHC1lXm(o1a;glQt90nC~R#%e1 zh%CZZqeiS{!3646IVBhy)C&bTROy$B1n%=;PE%$^oP&;xjNB1o(e(U}mY0i^)YQfr zY_h21bgKgw84fW6npahh$*$bHOdLjZ-gD0=EW5^W(FqtmoridYOVErmR^yf*ePgtm z>e@GffZCTeD|8Z&@sT|s1Cg(D9k>32j5#A;;c@+geF`w>+gySM=)ida1j0%_s&3K& zn8gpi9o$q78pJq5W_9Bp<6jnUbJYn80AcOdDILjS@HLz{$uU`}ZE7nw*gVR1YFYJf zT;JGS&A{&VZ>?=R)yd~RR=BooTafd*?6H9kaELD{4(HCP2cGm6Q~H$}wmg_-&7q*6 zNKBLa=%=(QY*8}A6n6Jc1!mROgAoYI#d*0J|CXsf!>GzL846lZyi!N?r~-IzE`3jb z&5%xOKo;;=CIhaEcYq+jjf?97O^CQ7l+Vi2rFm5mX)zsDL@BD(WjWZ2_Y~NLF0D=t^$!w<^Oiiu~nqNkv`457loBr~v^> z7|ESslu5m=fI&CevIw0Q3Hw?h0YLYdK2`wsEuPsbzi=f|#|T9rrGsi;ov9 ze%Ot_-jLklGX2GE*S;R+iys8f9I35&H5SDblYp4`ggf898~9E!1n$_n-zE_>zL{cVaX5J1@*geWNy&AS(Gu8H3*(~usQ@DK8gTdmWB9cw#(8x=jFcXkM z^4r_QUZk<W**QEpTVLYNH*o8b zF&#sXE{EnN2H^Pu&6LOt@-dOAUp5jenD$Z#gA2}VSj5F`_5Oi)cWbqgFEp8V6emD9 zM$MsjH*`GCU)EYbonnG&>}fwRFMe1HV5gKh6lK;7hHA{mj$GyjU;PY4!JXl`xR@PC z=dG^pZrgzmoxMiJ&Ixv_w70&#^(R@IQS-`B2{Y@t;Oejn>Fc{&?T!w*LVElAtDB(% z@TG_Q^mn1T@jM{JS*i40^eTQsPj(CQ3ge*IwWFd=Qig z(=$KX$FJ*txAVGq%gxKHfPnb+tE-{eTG~NE5*BhKDRAoq;EvB=4^2QMrvNTnm?L5& z*@QK?F6!sg)pB|7W0JkV(l3X}tI0^m*e(0HoB|jr&#*d`chs$67!^D5Wj3?NDlPqBHF;bDl58uDb({?aa-B@CZx^TXa zfx$t9O*CzsXUcs;5h!mMHemH$BUaSgc5Ufr#YfI{L;p z6_r#~K?U5NE}ilurV{84x){o1;e!A>`&BI?BN}4{K9^_1>IqC=-`ZSB;mheRWM;D; zeRcB^0UogQf@h%@3v1VE*`)I*hoE86LH&M0;t($oM$}Bo^y3@fPs9cMkC>ww_#a8+ zsDZsgU7{5r^Dt*}{)v`n^r)Mf%h$vRu+NZY@*j%J;`$Ns`mZlVU%x*phA%#=yLgi@ zvj5gbsHKff@dp>FuB(4v!DUjmBx%{ryX@*1bdT`&;yy}}hpXQ%v--hwVx#8VZ zE#cR8c6M4iGdF-;%g_JD_Wk|)f~CC?YlZj~TEim`l;7^^Z_hioaC!HiCV_QR z<`l^Yy!U#aUg$$#pWV2lfRS(SVP9__ADM75@VLQHGcw3omTm7e?&Vck)s0u1jcA{L z{s8Ev*L`<6j4K}n`>x#)-(PUwInGE3`|hqkC>ch2?dgUz7sUmF8t<70;F2n7E|(%^ z0$=%t`7}Wa`jJ^B)uV~8T&+v1l7Y*u=Xf&yw#i|lQU;A(BLlGyg%$`ExQTt6Rs0TX z>Z+YOp<6;=KxQ(p_tu@K%CP7yF4TAD;C$!*i@W!LiYkk?MYU~1izHD&L{KTRfQo=* zlw^tIBp{$f0RhPwOauV|izGScP?9sKB#}^LBuh>Lk~8(!LEE<9yZ4Rv{pKpbRJS&|!jle{4VEKE7~{$m4OBFPVB@ zyGuG$_<@gC^V@#j3~CH+1tjJ-2&i-v4h_Hs5*%Udj2>GxOfH8DJ!ec!%_JVGY-(ugYPl!|*fuj0 zYe-!m3Qfsrk+OCAI=O=w4l13%c5_{GN&w8iwQ~ZP{m~>hNk-nGHygM68;%hj9duL` z#`o!$_N}j_HQKH3Ke|lJ>%bn%%z_R4_?OlsmC8vD!OA5sqv8Q-y6QTnxf?V^=ehD2 zBSiOlCgzN+N}EJT#15NKTMYpVgv+#-9-Y%SS2B}B&{G)qc(-<d-Lo|LH{l`u)V7_?I^Ta9_8Xv(Uq}%m(ONSNr$$sENX0(D>W|X4kQUR zbmMB-4$jrHuL}p;$z;l7D)F$lsmkY=&uN5z3W)3F^^`W{d8g0^>)qRF7_#s6Y|Kh2UP6C*{H8d`90Jz>} zt#M;3{(cwmel*5Qk|^5m!dCAYH3}XlPly4~gZR3BG;gOpUtW@*;q^J%(z$9cvRGqS zR-cD&q1H>Q+~h1I zkEDIeHlA~E+G{TZOhkk&M07){f8X437+DEvJnyw^eQjSrt$R*Lp%>Mkj z@tCVhtl5`$=EimfMzHvblbd9noFeS+y)39X2)oqj$pm2$mGrFCPQaXyMiGKFWO8d{ zKHni@ago_V;vLZV1#hXQQJ+`uhY#|mFIe{VV5k)>zFu!|U zzslMbyH+~sC0SMshQlhY@0<#5pO$q{3)6I%V~w=mx=ctV8zZnyBzr%HTrJmBp~%x+ zEh`=@`e^3Y?aEBVX?wjS!*FxoxWbd}-Vlonh0~WRUi6mRRzjx6tsXBSSCmsY)t&U- z7@9RJA0${lt_xmn1Sco7W6;ynP1*NKv|roI8M+*E z8T)>b*LFTN(!q{eqYiMcv=VX5b*oRpmbM=KY%(`4cIoG`G!I`PzR3;qmtbg97{Bn! z;JW?D4T0|g3sVFk8Yv&d4h8zZMM8QHM-n4v;;5=ft25<*>86tl#Maj|+;@_j!qQYZ z=#8PHh5(A3bUaSqye)aH2YZqYXU3|~ng@I{Tj#oh=Sn{|L`r2?I`T7PA4TPt#YB#= zI|)L!bMa`y*z)G;?)H2~Q@2(u0`9m?Mv+qMK>Zx!db4`cSAVxQGcD6tR@x>hCzq+E zCGz=)2OB%{qMN%1GwaWYG>DZ9EStadTWdOw} z$*CraEwBeYr1*SWrZdEJYJT3C<~*8EvBC_7q;O0$QTEscBLIG%7Y=nd zV9OJsp*!uZq80aihpLIsHOpnE+-&L%B+3XXHW4Y*y(1^88Zd-~+$Fg^7Acqu2d(nw zi^kP#5brEi@jKI3r=iXBSJkTyDJnvN061%_pb?nZzcCHOR zylE<(+)QpW-GE4EP1T}uVsAF zcGRv+DlMIFap9U(WzohBy@bS+q$FiMJ&%BemQv>uBaw~LM$=rw#!th@-p|IQ0xi;) z@N@dqu5T_;g~KKeK$GF8n0N->GpE-UItqpgEDP7Z30#0QsD89AthBY}va)wZ*Mv~K zeYunof3vO*#HT%vXlT?c@7Hq+2Go#cWMzibjRv9g^z>7-T!s^5dc>aWGciHDxo{E~~|R3UveQK}aoo@$2SgT2&`=K^Fp z@T4h``I{CA^*>{AV9Mnu?*0}xsS@93Vrr@)rj(B`4(#oDJ~tV<2oD}}s~%l!?c~a? zp0i0$OX}hudwc)2X=i7rBH9i$WB}n9Zmh-+%IBVQc59$j5D5X6Se&$Xj=e)7Jjte{yk9b(Ci#(Av%7;c zrM{0poIEZbm;*Z(%If;8`v1x*wOvrrD3`>XBA-;Wu!yriRubAb{szYWjs-?gHCud@ zkS&te(u<9M-3qhic+js9?dV6l+5C6K&qXd+-*~$nc7~>^7O9yT4W!|VVgk~Kv_}>H zpXImZwc{e1Cn!t?b0A2+hwr=u@})V2h=Z}-uhd(-hF zeCq>HCB@+R*VD?R1W%8RKkEM?2YXi>hU>5#z_SbQE*y`myK*8^6CVob7Ap0Lu+V9u z8~g-LHu~--$;be3PPRT*n74_F%LE7x?=Ug$sZB5{eKrx&YB8SxR3-a`ko4jU8AA&S z0e+4it$8|=QQym}a&nGa+P;i*T$`P<6>6ylVD+7=5M<-B#@~8f%rfzhy%DsNN^73s zpOi!x7yF~`d(kGZ5JW=5{-chlyL)XBm3*Fx`Og6}0D-v+P$Bz$t*ezRF1`b}My&RWZKa>D5UBi*+5tQ|mkn?8Y zKi1^*e4B{%j9baOPFKy1yS*_zv$|vxx8d`ULM_`UQt*DkwSKTe5`~Oe+(%>`Vv~}N zPCP30L+6*&P*uXJmJcIsIxg$6jwnl`p_%E)$@H|6TK-c4jS>CKXjt8|igC*3hN?G`py={4+hh}6H)fp&4iz@9 zLnk@_dq4MLgii?M+)QM3VIDEz0O=D{4#CSQWBX3E4pFP<#P4lwv;!9_1Y+>v$taiV zZ%dxkkTENnc%2}ea=no>WpBOeL2ww|*7D&HZ3WVFsoKVQ&|qaXoR@bQMOBQ4yK;zKBjF`HpUHW8pGq5rQ@6>;of?0l@yg`7hQK%0N7Pv z@KdoiiR`d2HGCPia6Zle*+VkYg7+)BiH~Rb*1vTlecETj%lV6M<*JIJkNvYe1w4OX zH7C5h{S?I2mJiL(ay{;Hq@kAXHA^o^Qg+>H7*#9K&WGN0oaJOxnm_4r26V{)_4yl$ zl#6G7P_j-kmEN4KDmH<8uH_wkS&8wK*CXy_m@8Xu-T9X5!@6J4WVOuAJrQ=VrWWnO z$nX&6Epj-lXPZ#ibXszJ33hA4-tJ5QW6r3;#Q zot2YMYPYU3v!v%+Z%bQR{s}*W(6K7*zst=HTDJ7RHa#3%-|XbFE=|JbtOB1Ug3ng%Z|grCD3u9m#6roJo6*%QOf#8ImCFdPJjYcJU781Z{$U>t3-FFf$+?rw%F6nd z+2^b(k>nW@aT$I5&p)I!_w@e7c4xY<}lx(XbKao=RYAgW&&;C zyK(D1wqIkIS;BEg=eWXaefXW`FQS?1(SU1dVHEGHWdQ`$Ilt-gkOJBsq2aA!gAVID zKpW&m`qx(Ts+NjKH~hXM1P)~^{+s8vZ&ob;tmoM_o@SYUm3?*RPD53L2T_pGaxg76 zpaFoRNr@;$Rr^GGUz+r|kAIwHT|Xl*NUx+q!}d5n*zsQJ+Bcy~zEjkzgoJ4sS#lQg z7>isEB>=$d@T*$Il;PecK2(CDwnHwo>tz4ry)j3Bq)DDP7tN(1=|-~>XA7;5oO9S{ zWypsK8KH%(l?(3t%B;0UEcgrF!Hw{g;oq!jawH)pdyn&`B{L70GK$wNia6=|gz224yOj zw-s70S^9S)Nv@t5z~(=FrM6b3ZdxSIqZ&H#aOxm*Z$3BP4Nx1&`#wjv)${@{17#Lw zXeilw*OEGhHgQ^;*;3S+3~D3uuR)4vCWZs2iA=ob=M*3n8HR-R6q7Kk5>&k$}cV)qh|z9wLf<=&#@QCAFi?$y+Bk{<;qrDI`lg*#J?EOd(IxSQ42 z2iepvE9l+X>5vYXe=6aBhmIR=RFn-JM%B_}Gm@cs&~dL0h{be$(WY z+unB?m{Dj1>YHcQFPJx!s-WN8^}rF@E(nmkdGKxh=*r;H=$8w|7aX7lDIrupb?gWo zIyJR^rkkBx+Xtdg(N)^22B>?wM)3|e=YubC8!>%cTydS8O(y0)_2#W_R<kWs9@dHWm@sTEuH`Oa_7M~X)Apj_CzSF_frmST9{=6t&Bf6V`rE7`? z?^00}iW`ZL9&l*y4CB%(Lm9#VZ&l&8x9umR z{24FF=5DdcNa#>%&(B{4Mq~%(@zR$7oKa`kYtlJLk|81iyaz2B3r=cj2c?E@W$R9> zl0XLXgm*hduqZESfs4o6i33y3>rr9f+#M-22Gz-Z-Q7DnuVe(XY*p`OAd$D4aPL(J z>O3=BC#@@9=EiW50J8gbauh`Y^XP;K-ev8y^Y=xsC+Y_4A*<0Qt+cL=cc2^(J!^>I z>`WZA1N@g~q$lk1^X=-d3BVMvT$URj*PpF0>+hQNa;&*k20&yI9<(fe8>YO$2peHJ zpB+k~Tb3$*UT$`wbAz_Ru3JN{FUhvxhDk^Ah{cN&byheZ&9`V0SIty*o{Z`XY?uF( zQ+T6iR7pW0d1z-Eo0eg;XNyF=p_1(eFH0`+Wg{g`xx^u%9d4!W4!6Dx<#a&rp!@%E z(idq%XO(>WNL@_QCh7H)$l#;`n&8o= zhHbrdQ3L`v(oBjft;l%z;;6V2mzs2~9cRga!*^GFtn)T8@;T^G)yD0?=V4cYLFv}A ze$~vgtcXO{XGdw2lq4VCgAFP6#qpqk@Jx-;b%0XURPI|uAq@$?Z#oP*WxjfQ&uxL( zeTj~a{UZQ@l6~8I?hjvT#mY{3uE)yC z#`?zs?LqiL%7ZKLC+6u8yX$)(>|Th*F;os=pAKQ^wF02Wl2tac787c>w;frFULR@1*yxfq$93Yb>g_3tScU z%3QTfBT1US#d=U*;zRFum&A|(z48OG8 zq~yxm4cDL21l~orhIRImMJ{dcp=VFijAtP4w-x>4vA9E8l1vmytNYaS5WAL8C0@N` zDQ6jSbA$O{l*wR;0^V-M?fd0Y&!`dy715>m_URU&#b2t;V<0(UG`-Y0tlB`ZWEq6% zxAhW_JmF4!&Z&C6yH!^|VK%)`b7Pl!^03zd7KMB^zZ?XeuF9z&C;O{Smkr7=*Y6Jy29!)8*!A{t<`tRm!H$FN~!F zS?92&Wp!R05gA_I4N6_|imcpxlDWw;f)j$~GmT8V%PVIw2|u8bm)o#6AoRO>FHUA` zN*l7ntxf0pZZ5ZQ?(97Uu?21Zsewo3$yfC|t{^NG2WNAn`~36adHN@mpr~f#RbkcM zDIs+n>FIG-*hq@*PZ+7LqN{Vb8-f-aB+lav-Rr$Q0ox@abb1r?fO^hWV28Sfs}?be z(7too5VD1nr%DLI;PFJC#Fizcf0Np;JI>evt{K)VNQ`@f`KB2-RS3ZVDtJS4Qs zwXH~ej>|4)zHIeKVv<$Fy~p`#oYqS>2CVDIPrC++T3S^`WZZS$W#P6q(qf^!Av{z( zNi;q#cE(EB3J?Yjr#;oJQ8SkWY`;Uf*Ab!{BSnRJvqW=)WTEdp<_ism4h99OxQ9SD zxr1GZUHh(MTAFd5W%uBBi--6>c&I$c-nQ-@-=3U>Dvm0fJs+VhIgDKyz(-jEU_ zjkzEDGBWp6#_TSzLkJ?k@rC49JI)ByA zEi*|bv}K-C4Y1Gsy^AY!H!Iy_AX^f)bX0201r@koChIP-kWRp*SOdH1CBYX|b)DhZ zr`Ui;FEJO z3o18nJ}V}O{A%<#>MSSEE1_W6?N{=;EOSRY2PQ2TwiafN!*)Yy`n3Cv zJ*sC*Ha_M;&C;C`6IqRh4>&C1rKqZO-sN821$K#UE$7s%;*m>8`%>tn5`%GBn3G`n z_MW_wQul4vSD0M=yUOAYVE{nE%-3CI`J@1_6(uDlz((I}N-c7(aXQb~Aqhgs*z?@L zU2ec>o$nx%QH-I*UWWM$4a1m^I ziOGp6Deo#LnnP3Bhc*sJn$Miz=?e`lOs&U@^B0ytzYdpQAM4Z}B<--G6bLr%q zTnzu`rb3(T0)-+Bx;ycC z-MxE$e4(RC{vq+umqq@jBY%Nvl37&b>u27eoY9(=e=f1Bx_fz|z;S+v4B70F3FYx%vWO_3+pFISr&78GJw|CNV=G#mdX67 zp>;Z0y8XOXi88c7=R0epL6&3E^H>?0;CF!yla`hi1osT6HAvEEif^-)U_IV)4rC=r znBUl*1!@O%{(%=Lo=EA}=lJdrW{Cq!>ox{poAy;8+oiLW3Y(h?XgSU4daF37rLpmv znTq;AtEaTR`#lI15WyA^)nz#lm!vYG!#EtnV5SpNUMqU1AVyu%UVjFWySOb}mJ`#< zMEp^gibjkA$e#B#vVeJ^+ghxS6dy22u3kO=lK4+)q$40@77Orw76ppwxE( zRVKkWtLQd*psbwNBBy5d-pJ_ab-j^$i719t(46EZNp(S=g)O=2A$6~@wQZS0JlXDf zFH0Moy-wdBw=)+AtNb6{hG`z_-Fpeww`>k&2H-+h$ zVo*UrLG{B=7zG3d`svUBm{>RAwP@@%7TigXPgh_Eb*X95y@h7c{icQVGEtA`Z!rW0 zb2G?*#_DY;tZEXy-vo7TYmpg?X_=Ybhlm9!*;@QV-z05UT83QX=&hWZWs&ZJNkieT z8G%n4beeqeM7{O>-d3|fAq&&htJ;sv$O#sCLrJg|Zg#7z)wA!QG0?4pcTxtDzP@y1 z3KCT9Z~M_|zL}Xh2bBj60mBTektxS@XC>h2O~eX3M}9Be?4qVK!Qza%r^*oA^z@84 z`O58fyaKRPpx0O7GT9V%-NncLUbHogh;H}5;>>I56({}&u9HP_0)QSh@ zzvt9w2X%g=)6jYXiXBNI)$^@fMJexarwt(13h30G=nh1WHa1PwaGCYQVuE|>=u(j` zD|KQU2fU6$CBTD9Dhn7CLMC8kt>Fie$1 ztSC49)RXJLfh}gp+2qwOLIL*S5JA(xlpdn$8gK-P>*#0%C8yJ)ed5f@d1|u&BI?UT z?0i(xH9W-zzX5H+wsHHY>VXvtDZyxfWN3Rqf1ziPG^)8Eiw*_C2W>CC@43vCyukf; zyaat25HhOe+r%F~3SHg@Ai~oB)t6-NR|a++MA}QWur^~BQnIq-RK=|Ac=p+oKk}NN zpEic?r=rQBc%Pz>eyJA{Od!@=>TTJ6c?*a&q?*#Ov2-wv($>O_Ip=okB2*ltLpm6Q ziII?Z%RA(9yPxYO10uadp~)j{lTMx_yHp!z%LEF$E|bzrz4~{6Xw%(0k5a#3X zI4C1)cq0Er3lr}CbqB_Slq@()sv2NKb;ODMC|(SLF5{+6sX!UO`OZB;sup%_*u~4= z0LNTQXhUVdW_{gyR%3{ua=v7NVQZM3x}zP3Q!zIzhIIze{|PAyq23+Z7H?=o5esRO znoEa5GJEgl`5*O3n8adH{HecIu}-xfuTcRt>V75PSt3NSZ- z;KLcCRZ;Pz$8BpBSCM}4#qs?YDe3=qHo$tDwVRQaR>}zdjRwhM_ddVg8pXQC)RW1) zsnNdbdZHZgdqjsZPyv7d3wbFXX zMf}?0AZ{@JXn_27Ex*1LKKe6m{QAy6U$h+j(fI%8JO6xT_4J2m?4R%a^VRv7ACcjo z@BI4e|ATKQ01fES@F&mXvRUJ^eeaRJHaYv+y4vf}f$=*voBHhU89`! zJl*;wxb>byhG%VoPc5&u*!2Rv>s_QQ|0lotK>ZhnaNzHX&Eaj;2N7=#y8p5_`Cne& z@dCPE*EIUet^x{*mhZ`xX9`1^x41 zbiIrJjN8*F@gH|B z35oPfEVN>OElLAH$&y>`iwPH9HD6HBo3?lkOHyp}KY7|eSGb@0{RekuCHVKZ$Wv9@ zYgl?;<;v|Ndwbn^m42B5-B#heJ!VtNX}_dvNzNOaS0;`Lj1GS|4wg-h9# z!XFLgbTQ?0DF6upb~xib?zw)(o36~aU_nOIDWV4#r|L-4(ITU=9daLx|rxs`1!AJ7}sJXsE8Ph`b00tQ@ z+gP$Y4aO++X7SkxHuyDB)!E{nMX$Buh#?yPzIIflP>S%CNAvEe(k6P3s-)_dHz0+w zv{fX<`jY;v1OJ0y@IOUR2Zb_+7i7DA3U@5Zil>Vx+({QJ{^v3d+$Vs&|6f+f<@7uT z(-mmGQf|*_MFrLv1$Fi#Q!Hk(qmvs9D{fL_{XB&HE|Q%1Ji3|+&#hNqPt2!W z)QtQ;ip#A33ir2uhWnIM>-y1EXjvch>rM_+3;C}K_yowc*H3bD#|MCgTS{|>SeYQr z|JH{0W4n^f8$~$MKOX|Ge{dj(fwR!q*m;;=GaBII;^GEUY}U>HgU#uca@pT63HO)# zM^@KT)gMJ~NhU4(|04JKU#2DhNyhb9@}FzS{%G{c|3p@~-mI)*iiKa)Xq*0LLDkb9vVdzo!Tw|}SD=hs^R9&&%ukU@^cc9PTRa%jZh+*e9YKalf2{XxwFpq=p z(O77@(z?3d8QL5+`-s(JQ4aU`*ZU3l{32NoF)08P$MZ0Cp$bSBq1TrQZA9>H z0cBl@{cjp8sL1DjZ0j)^o5ehL(9*%E&d$<2i`64%-7lg6-c`%jk9XPd7MfwGbhr(2 zUxf=K{wUz?S`-hE3IXNdz=0=DKq>50>~;?!BOBqgd-4#lD9_W@tE)?P<@-PkqMM{R zbbtZGgUrs89+h1h>wEY3Y~bw9-|!HJp9xJ~y4KC8WXlX-x4RP7R@6J}{jm3|b z;3tXq`4fqHrziZ-XS^Su@h(2Se+g9l)P8BkvmYA_4O2fiH+sU`Wyi&SVATp>FT1b! z1$v`sQk|#w))Dd#j7+x)wsV#%Oyw2hy+U(u=yL)Q%CINd_@h|hZ-XK5(`cm^LH`$a zinnU~<~yMabed+eV+&U>HH52(gO9ZQ1dZu5>NMm?ek6={vfM9dzTW8Q;{G&ia-2QD z=fs8J&aQ4C)81iS&!~NU_9DUIThEReG(~3enU&rokFYGsVVtp&Pf0gx0Xp6>cC1Dv z`lz=g0*3v1#Qj8Re3=+n6o4WKxNSsegK430_4f}YOKr=mbB^;ZTGTtCprtp16>pLajXV0fXgWfQ!PbUdmrypM>k91_mBazaFj6Lgq+yGuc#QPfwD2q(O({u8<( z*W#LtvYA;qm8PfbTo8RcG_YT}YNYT*E!)js`B~1Cq_ZhO z52~0z?j0h}?{R$Jp8*CxCOsup{lE1LJum%0ac9f*Gqwn(+L%U{=PV}g1* z7uc_f4Jt4hXYy1PIPFJ(<(~{+`StZ3U zL;M-tUio&b*4fnTpsWD{l-6AKir9Taw#u~vgw-c0sFu~1a|aRgzkF%8T<35%qfQdT zZ|bLvmm7WQrTVYW5a%RR&WvByu!B)1y7p7nMsXW^D6}X1dGtdLIeW(z% z5?mTIMwPP#h;0BZ>(-C(3L9W7ItFsbPvV#c~9oNrA?dDZE5 z>GoY{`s}TQ)G2kh#C#BQ%jt2bTfC|~(n$@Qf~ry`9gTAuXke3pJODf3#j2JirCCIF z@u+)n_l}H|lDN1U_RFO9RZZAX9oJ|&;?@PbT(#6ur^3#JsqL+!P)8 zf}2*aQHIs;K7?^PTWnAi=}cx1BpPFu5|e>2ZS)gHt==pJkNO&_t}u5H%(=9w+9HK_})Xo9~#Vieimg8Mu`~6E77e;BBxSyD{&~a`o!X zq4G%^Fot+A@8xyRvm5->R;w$uWaCSD9;RoqYg&dv)4Q+#GOQqkehp5InTQEm6rY*$ zEo~fw0&w#hp|BEEEmkHNa?t_;*2FyWaxqw^X*FVYMrc7-&+* z3mHKBUg2ok?H_k5m2PwH{ReH(@3A759?(ZaEX;sUp~1UwpKk5JRV=JhPz|i?$s?am zB0@a^CaG!Jo)^)ArCmSu?p!o(8jQZGx_fuG$7dafw!HRZd1*~O1*jZW<}ry5_IrI2 z_f^i%@|*o+$)VenLbOu6o5Rn|v#_LhEZ}#zIg9#Bc7u(90P&J5+9xXDs-`}$c7bsV zzMb4act95kfHp*Er&$B^KCdavl)=hV0>2k1{+c2QTk*@)k{Hkrq=09r z4Cv{yuPuW|<+|&hN@yrpMRA6NmX>N{RHt`>c6VzO*rMR$Vmo9XKp$~U4YSf_Y-R`= zA&)wQFUU8v10(-f4+QO6Z}LC zcehqSq^l?=_oi49v(hKA$AtD8RG2`vv#poCTSp-1f=*fN5bs?z;T6~#!NqcFFIp%C z+JGr%*j1BW)Fh^X1fId?wmf_o*k~cI_L~J;Tf=WD!?2Ki@3EICgRmHh#j8uk67&gg zA@6b6+T0|4MeJFD#K$c^Kcf$QlDwyLlcOBPAU(fs8;dkO!4F7nr~=QuPgr-DGpLIc z9{dbqyNQlha;(iH4O}KYvD>a|M_D%?ZIb>KIL8DE;n)}9WDiKs17p5>SIAY?)nUxs zxxjw=uQ_#*BjjmXH!F(IYUo15L>!;`Seq}Pw~2wjh{k{u9=L|x2iqoN5Md!U52sGp zl+nb^=0y$RH&k5Pgz(GS$=)2d+bVXCu7(TkDS?WE8?N*5V1a_r_G*>G-uPjJZik4m zQWJ|_{q&TK#;@U5K$|~oDFI;?k*e)|pR5BG;kiY7L>`{^b#5K8jd--)KhoYgn{R+S z2#rjb`Y@f0s|?g(Wq_wr$+)+cr<%EYfSmDTa8r71gG~o*0jL75aX|-qoA|nG2;l7C zj=~-%#LljsYalImfuv=bo&83Z4ihh~^Gix4|5_mR&X6mWx!)xo9ywp>#y_H?qSD%B z!m|!9lwpN-#}~NAO-mp6AXNX+qXJdxtH5+j?l8e0z2VlFzTKaqLy+3 zN$q@WrE`|0AGnce;N2u0t=z`~RKb4^2r0p+X~_Ln6WKKrKkmKZn9?`U6Te&tDQqkU z`0b$8Dl8(o%m(zRpPP=DEKO_S%65vI7c^d*3hZI=X>n=2{cdd9z>Bb7&=J`A6fjo{ zt8ccSW0DbglF&v##IUeXY&tC05x($npQLZEAI_{hYS+QI_2`|uw_A`}0;zmJK(82) z%M;rPQbh>mjWpixz|qpV=&_z%54>dUEL-qT5g{oWt%{@Dd<+9FWw{;&3Y-7UH$!6S-7ZPJ zCGH3>;_rv>dTylk2RfmE1XYE)@NE>@+S(e(GR%ygPAO!Oqed%tfE{M{gbIMTWTYj7 zofiz@YjstzePzj;Z{I)!m&5`S6WE18oxQe3rI9`e`y7$OW7+RhxsV7pPb0L@lP5=l z{7KkVS&wfV0$&Yz3k!Kk$B3P05A14j@n}!Kc2$GMu8;~lrDdE~9P9%Uqacguu8Zyp z4z88}*5sQi_o+5}gV~aF_ExdU=FUyv0L#&Oqyec=snf%tYjtx6Q3Q*s%1(J(P2X5aa;bi$e$=|@^u8VN^iHl!cfwyfAYif>6@i!(B&&Spq=xyTJue=tM2r#6?p4vvVpT9b zd2U*^W-CMnkeUfr}^P0U&fcWn`j7-T%|U(9n6|5QyP6}16bpy zbzdX-3HaZ}hV}9~uZP=Cf%RI-qX(|Aj~R9LP9(6Q!vu74j+_y1<{AvH8g5DBJoj;X zbnKOmW8Q=AdP;18T4iN#Ez?CoX<+lU=`A;Ro(_pfK6F%4QAr~mmfP;mp4m(z4@VGK zccsm!aTbJ{mjOkz=tgp_57ik{@1y`8&CKqH>`kr;AGq8K;Whz9HSJthv7%PVFaafx zwkOJPn2%-(BtE9gWW6e?O6iNqKHuIfSHmwNl$hy7S0P}4SUKbSY>mJm|2l9afUcK$ zaCbT1VSpZXlAgz0QsLJ$ZTj9!I)SLhVJVfovqfGQ$o5l9-nhJ`d*K z(HUJ{O0&SaN@Bln^9+L_A{WZ;$$;XKbX^#{q6oif#e6(iKB}fF=lL_6Z=T=GGIGSF zua<+J`UKOd<4mWnsRfI$HZ)-$yxTPUD|6w+2Y+!t>dpyht*QK0l`d2~04%mML^Sa`ic7O!btN zm7&2CyR!1>m4upeS&sb@$?@w}xm`llwIejKkl8qdlR4kc`rDQNF;}{UWo|xr6M#RM zasQV$cO<3WpgOxa5rwLQ^@mGHCW&}{gPYM2sc3%9=HMPi$KHAhtOlrRg>dD}$yKSd z*pho%n{8lG05X@s9?Si|UHv`1rR%`rH(Gs-9mqJBRdK!F7BnyjpL7N$y%A`*#+J8N zJNryqz{*Z^GTOO>t@!I>4VQX*UcE-oc+K}V$w*9DhC*?woLKM;3K;XEKm-Rf(KRY4 zlCi*QtEsC4!PtfO|SH4}k%dvbEm8f&Y@i(=&Sd*b&5# z->|b6_t7MksUGnqD%qVd2CH)N=^aaHVj5x`V1~86XJeI&xgM>2dbm|XT$#$k#-kO| z#HWHtV)Uh=Ga7wXaLydxMI*m08X<=PAS{_4>>h{0sR?hrt3S7MbP@u-IFB=&xO@pUL8+V0;Wp#0#y#ekGL<)B)bxzA()b5VQ z5E2(!dn^s6%Qz;dK1;HB1YY; z1ia9F6>e&R=IrU9=FS^_YU~km!j|deW?9%p5CT$e^IIsfFPrpLNbUvy!AwZ_I_#R^ zeLpG&nF%{iEsye(Y~nikYSvq+?bbsBg+}urBEdDiY3jP)_--|IX$|Z#PrD~ifq?ewQx{&#W*^TlkNdLu z?#Eo@W>6=Oa;znF`)mChUy5FXiX=w-HC57C1qRWTLbbw&xiG&^A3w}#{n?H#+~sIV zU;QbpGUOo$QWIVUm&q@;6}oO153Ik? znnqw`I1NGxiitm-Jq02rY$Q5+q*IrG{=DG){S_D_tsq7<5VnK-DK`C$t*tY`y(|G% z&1!?0&{?PMd1sJ$D&BO-f&wpXWknIHc;>4|Xx`5KrPRrZSk?oO{_U)S)lj#Yf~j<{ z{k^xqTTA6&K*9|Mr4=AUNNBoz#VQ^wcJrpn{dD&=0j9;ncLtVf*clfo{z^~wIUj3@ z<7F+ouck@b>X((TH!ID$ZI#)9xnjR~*kGEta_bpe#n;Q=N|EoVfYrL01yuWl*Wm?* z%Uv3XT~*s@W90M-&SGb4Q7T+=eD6^;p159PBElpSTCyJ9lm%Ei03Q z_$E1+WSFt<$wp`OT!0kF62~u9xzp+##%mw(xS(oVN=YiSe}2NU^5foN((ORl#Zozv zr_{A7S*Z%4JPQhzXnyRAtD7}xBfwrh!60;IjlBgok55AG2Z%Mre30`F=9+A)bPRBB z)SNn|}-PyH?msVD+K+=qRcF1>Q5Cfh6q(z-@vJ(Q( ztC+pyXAO2$O=2`g8sVz-5+HA%t$bo$z4wX?@gQ>g665&=%FmIusv%Wa+9riDphB$~ z9&7s`_GZW)P|eZ6pw=A;^JpAays(b{Plg9gB~5CB7EO9T&Tm*5#TTm|BG@i;EC)YN ztgGNIX1|LA7-U+-2R-UbphuJHiV0p0**)s5Bww4)aREKcW!gHp>j7T6DX_fqOQT^P z8GV}~B{eBspGRz&X@AGe2Y#5M9_Zx+VFV$K;BDlD0O)*y3*xS5W?siBy*&Ou{jv;l zRaeK)VcYyFZ3`iubK6R?){w&_2S8SfDM|NYe&e-D?NwfAs_lEeUM-<6zrUv4mGSL{-HUDB! zzdczRoV2`9sR?>EnpOf}X{Rz|Cjne1$UGqJd<~Uv8PPf`3|b}w{malO*KV+s4VG)1l8;G_a6`X|u2|YnpV~J>JXy zp6l`V_fH-&!T`E&i7%5l5h3@lc>qcYLHV1N24}!`(PmU1h~!ZpdNWE&luOsY znMvQJ=IIBw1?8cyZAWRaph{}BH;8hm_9?ByM2EzW=^i%{RR_gOm&xNO9^2ZER|rSB zZ=kR@AQ*#qc!T}?m$d;$>#q;cMNexH_u%vKd%MeE4wYxJO&xSq!MJ0NPcZ`kb;|4S zDy1W@_VmBj{5brMg@L8LpQ^xRR3A(MKjRv}m%+XGoB$}KQ@|W2F<7_zuhH7K9#$!D z{}36t1fp;V0iWg;XF5U^eC=K2?zctwM3B%VKi^pkSVkExz0AIYHmx|r!aB*9nVu)* z-w4i&U_)=&IGgP!sG15&Sj5A?wv$eR)eGbQHs<-x#Fz!Z2nP`}nSsl+`)3eIoO*9r zOt}iu_XhBpQ}c~39I%+XT1l|D8Kk6`8kZWP{q1&P3 ziZ^1kMEhp)&soQe^CH9g^U>mbnH9U1T!cI&34q25_3kzYf_WmUu-&0zN#ebkqg%ta z3tfo&*WQvx^z^f6CkfjDmv}&r#djwRhLH3z)b&JMN>Rdn^};!MSm_`rh0`-oCPT#% z;5hihs3}h2oXV?%f!N=5ifp%)0RddqKYYe?o*F#Yk8MRf80zMFR~*+bKpi6 z1sL!GiF2UehYdDB<&67S=#@Ql+eNfwb$3r)18;K$Pzh4rXT$hAzAu<_gcZlB(~AOz zc|3fOE|W)W+8kEj-^bHmiZ@VH?gmMOCTKI?RUTimfN&*Zv%r(Ws&323&Y%t{>14_z zIdCn(EAlo5De~V$8Bw1M4h@YhqdNJiwD;M_$+-bnS#Yu#u&4^EyW7UjlHO7<*ThjN z6M9|R4NeFUximJ8xjz_?aVGt8@F$_yN1oqADg`+HCZFFu}MG+s= z7Vmp51EYFf`}X#_ojRoahMyD6Nliemq@1Nn)B39y0%wj1{^%QC$VdILyWOJ#NvwWT zsDP5tRy5Z5i+`Nw(RXA4Clz6Vr)5~AQ7H0r%d=Qo3ydh-^i*1et8x*uR&!ToE+yHoVf8CVpLPW!xGN5{&k45m} zVE;?Dmaj$~6^A@fXeiQo=XcXgh66_Ak6#y6fH($r4&bbl9E%cIQw8@~5Z16EdjYLS zcxh{uT7U)!DD-8bFMGuAUOHg1zu!1P>oglq4XX#Js)MPn!q>>k5yB~}^`)~tm+G}m z_Bdo**lKQ++?jQ;`uyb$CD+QAzc8>gl))=&<3=*PTK~g8I2@G0P!bY_gkWtC44kuK zpw?y4gjlFdiy0V00Zke$(hWA<$l*>M*T{BYO*XKkBM0sv$I&o1PhTf~g90!)&5%hJ zx&D>Bi5sKU*GmS#itZ_D8eDG~SvhO?QP1I)tVK4}7^xASyLNlJj`3PYFx=XwLJv%j zXxGB=RJ~<-9w19-4s|q2_Bty~#m&1D*=4lai-TS+$-f4Z`sZMx9VW~DR;R-V!*00v zz{v()(sY)w2FQt2AeE#;BN|!Tg8Col3|&T3av0f_>a;lX57M81+ye+Zx~^PHsk^g& zbnz1c7n2bij4m5TURBk2hodsCHI69q`fLRHQ6^~k!#P|WwlpD#ZxmU{8^lNNMS9iQ z;nvc8`q1Pg`gE;IGIs43Ss=_RSTK_IZTx(<8#cx!kzV91Ed4V2*2-BB5B26ahk!7x z)>qKxVL(Xz6lC7@6a79fKUFd&OYi@d|xhh^Zt{aFLHJKiaVs|$bAD7O(;ot-MHd@o=bs3gPlCD(KQR$ z8NoXoMR*q6cZmr8{9}oW6OH+1<1sSID`+z^wQsmQuxXqHPVsamUPF-1G`;0|=KR+b z0)e--1%Z(|O!2NMxjI3W$3X#+sialzqIn>tHjA~ z!@&2vxb|AQ|7-8>eAoHT;o{OM=B?lRD$(9MBM_&dcmynVRpVy?))aX2^MJApnu`z=OXUT3fd0 z)SG4B@(wp=R196X)Ze~GZ+Q)RCIW@u z_@DxdsQksfg-L2qV*&!|wGQ^%qFb0axH4a}8X6=;H+(C~U!duCza;*M)!@6+A%@Vj z_wSuqI4AT@`aEH6?M=ujxoK~|0Nx$$f4gMkbnf(bx1ZFop=3bC@aE?k&yD`}>P=In zVssN}%75!Q;HzbHk|g&izqK8_%>@yW=I&SY`*-j7VQHpx-L14qDWHt!P-qZzq1g~B zyY%_DZEBKbvYY;JmFZ05iN=|k992Y4zeVZZ;3|){oQ?On&fEYcP-uS>Z2yv&MxpXWtYwkM)Is@m#IFqv8`zs^sj0O-_2atBc?3kSiYww^SuAWS zn7+(YsT2y>=%l^E=r;dV2HNI`E?@Im#fy$C%^A}^3`&FiC&*A<*Mn)WPs;UsW-(<8F;unbQAt(aAdr;SlxpEk0nUY$f2Gy!@bn|CYs+U@z5INAaiZ7t*FaTw`a(J;` zkWMHGFkoOn&&Sn*U(Qi%vm5WG|CfmbT;hPgL^JaA4^*=K*&i_n2KsBo?-4p_`oqL? zK~PNP${(UP%uq)`5|W((7AX_|*w&t8OUz@y*--QF0Fvj$(FeoOPpKx7MhSvPp3!^X z3^-=R>}_>hO(SL1dzkT);te>10Hpyq2|v*L6l(c=2S+T=XFNO&Aq|L=CWeIRP|XKK znjY-o;1*Y4G(A7-6oJ%1Kmt(+3LS_Z_ogT)a+g15ZVexO3kvl=ez2k)ahow^`w0+y zw0nK&d(VJ#zyD(*}&(&fB#;oCL}WiWL}=y#DD8qjsyvu zV?EM5EgE0iPxGCW6_?! zO!vWNZ^5DPiT4=HuznC+Sfsb7Io^oJv!;L!bCkOeHQ#(qvI&iTGqh7w)O1t+jEYho zpEH8UT-8>|AU1GEEJQL}XCY!&9%$zfrj3(iuos zPWAYjWp8I>%t;sz`|W8ry{0kNA|J*UP!?nHh*B9eO`dg8*1cq8IOf+ls26%zC^xN3 z7oq@Tg7|Y`cQxFln{6U??>I%D6oC*jC?Z;&0G*r4XK_WG#V9l9BRWXmw_OZs>)5~GmSXaO%H{}1oTYZcGD)KFr$o*?p+kE zS)MsGylPQH%XFnZ(tsIYq%dlzR=l?y7P69N$m z(PCxI4Ut1;fQ{qN@a{`c*pt;#>N^Igq-RsxMRYGuC-`#x_a(yc@ z0}aQ90#B{$HY5*Vos4MQwKw$){@0B6LD?S$H-$$8WTBVDnaohkim2g|ec4~3oDSma zFvfs}k?-~sU#M_&1;Vf{7z|)?BLb{Iuz9O=-Y7IwzQMO8PN%B!pWpLoK_f+#BBf{KO{_Ovn6~rLp zBqUZ9d+hrZ?SQA!qy7FaUddX+>Lp2+l!f7BhXx4n&ixs}r2$ z`GCZ8c#-F|=D^Y?WuEH6#kW4Op@=RrEFs4rAjv7||KLm?)!6EJHRJQJ#%Ep_^V>6N zTYN14VIx)lr<(f}yRZ-SkNR^-2ufoh{EmT|bU3a8pv*%vPHd>{yZBgmY9E6tvCecx z2)7;=Ts%n2WoM+%|L_`QU>Q+?>=#T8$UfgVq-qYDqBptK=PqUIdGy|)MkAOKC$f9l z>gUr?i-E=-ztzMosPpCmRsk9240Cp93u(BI#mqdAmU<~^2ax5bOI!iT6n8lcZNZ`a z5LGH)TMyi`hLqFGmR+u7V7X|${9&{a3Ika9AGZ9_dUl^XjK4u!8dEHUVrkbf3q~#JVDez+*f#GaM{(! zu~}rl=E)}4!uup9sd|q^Z=IR>`8wQOYO-T59Z6KICgpCOhp$iBSr;nej6IMmNkjKBZpN{b; z=}+~GaDOa7E9WfrY}Rp#mP;!n(Yl;`%>!RAka;Q?TCV+sLg?x3D%Rn~Iy7bbDw?cu zSDS=o=sb?yyYrb;IR0KBXN|2wN>vW0JFjPK`HEFwUI6vchDGmvQ!JfR5bQNbHb*H< z6@2eOALsxeTx&w6U|s+WT{(Q{2#WudBzbUQb-vTHPrYtfJ7rj5mYv1%5Shu66&Ud| z{HOMk+?R`?z%dbdny@0wyD$EOU!ZJF^*o^E8mU<7F@_q#Yp=79iMM!E8RW@XSje6G z!?efyg!^n|8^H1EOgqcZ=p7DL1t;xJp0}ly#q8a?G@8w>*CN6z0Zf2~C z12(ts;TAr5H@9iBitajhx^{l6kVURh&rM2^?JL$4GYL=WJWg2_&-LJt%-!Y5_o2qP zc5YFkVa%yayf$hs-OU5Px;WM|Fr73Zt}))pU!i7R-Ny5`^N(5Cy*VE<#-qc%MGQ^q z8TXZySr|wojkZRM#o*;!HRtep-fM@&^!9k6%FN!sWXCCr=13V|djT?_^^)mxP*pk8QeALMpjJd_r5(&@gr zS|)S#I6)GeaqDB2kjc5nKOTP+TP4%i6LHUE*-(-`v<>Zz71-tm-_^yb!>heZz0!JS zALu?<_8rY^OLjE!h-1)mXP+0d8*SKnOx)l#`ohP1e_V4X;FfxEAFVq|bnx!eB$xi+ zLe<`Cq(6yJ1KCkBGIAWfKEm-Q4rz=I24gx$0{UXRXr)uchV5+g$s1n@p`e10+>aT3ik?BBaZGjgqyv zl*34JKeoz*GhVU+nTV(83z~s*q(>fjMOEl@n8r+6R(~aU%YXPI?TBM2ryt}fhN6ZHYsV! z`Tk-E^`ct{;?tNi!c+v)yMo?O^QjR+_`ra^p@!P1zhgdUO%og=m-c+T_?lh85gx6S zmLIJ4^%Ia`SfI~HNl%3Kk(!TNd&UH(wLLSFq*`dxNXCNfc7JynoGE}nm(9`B)AJeq zXt>>1sv8adBIR2KO5PNj8A?D;oH#kH<1>FE21?B8DEN)@teK8;=+wv?b#~Y-s0>-XnIET80?M&@T z>tt&DV$J!pXK&hMU((F6NZiIRmdz2YWop8Zx7C3( z=L_e$&k!c0_c3mt=%pHaZG69@*NCs};dS&HKQbzb zc~Ij~9jcBn4x>b9DyW+oz7UeyJcACI;E-The#e+~{YBAq&D?9cnJ`FDaSpGQ@G(xm z^7E&6u110&CaK2ac3GAOKa(N8W>5h7qo?r_?L5tV{44L3?Z#h77n17>{o6C$JBo48 z7oQK2k&$6TNuLnVr3zq4Br$M-@U}0lghi?7)E63|v3C?(oHn9nWP;Zxgwtr|89W=H zA3(Z-?Qf4-cIK(-dFEc-TBEcvAr3lG$enAtT4PNlOVy~TGL`-z3KbPWZTD`zNwe@2 zd)|pGP7r95)4}C!h<|!CdJAAA6c_Yos?JE94%A}iLef_)S_M~s_z7{jShN>O5p**x zb=VRUj|n*4Yu{LJY^C_#sHF%VI^HZmK9%2RP82WXlnpt&uYJ#s_u)fVYi+0dm&lg& zkVtsb9M>Gd{uRtN+)3 zgh=BL8f*L>YfdBk!|zFZOiyu(U2euog0tJ5+v%RWozP0Qt)-M|Mu2&Exg^mH9zF;A zN84-hGS~6X<~*wP%wcu04s8d>i0G==(m=#4LHqllL$Mu2m4Wzr4-M5Ms_7e@L>oBw zJrH49VV$~fFa`BUcNGkoE=F1hzdf3Xv&QLyc6C9Ux3ctvx(<5SJrgJ>%3w{$YdqrO z&oU209#j>!#rL{z@B$Ga8Iyo!$HrCAGN<81SA+KM^@~(Kj?}EpGm9?9O|5qXl84rq z+f=eIT`C!#rCwa2*xNxR5Y;j!GbevFjylxn_>3e+QIfw}kyjPn z4CAY>=Ys+v)}}feNKcSZ5*H|RH7$jT);;1wdn??}vV;16HawtPt*#wLZ$a zRjC95I$h0)HtBwQfJ^*)`!QiN{IP+xa3bN1@=~|+lUB?2gsNx{4V}wP_8UEd93U&U z()7GBki5_lie4Dk;?;stFJ_AwU>RZ;!_neCC6Of$)?clW4bsxjJSQiC}p}UkH z6U~5v=H+v(E3E6k$;3Z%5B{WhvY@^%aFy`(qgbWO50-ipSL{7*)UitzudRyLXP@sG zG4u6r$*e8zTKLizO}q12e*PKSh?q2P@{8^aZ$)i0YRjI?TP@w5l3!6abxm7sc3o-_ z-}dNg*~lX=y+>YbpqU$8uSfsK_c!&#;I@(AHli}%STDZ*MpRX`4^B-h6DDC&ZHr|#JzF1lrRJAU z`x$C<7M$V9o3JfzNjLZQ7g?P?OSylJO$a5ZSJXVt#?qS2wsS9y+8TDOi2%U%8`Ut$udTnie zZka(a;Rjv0^8iC#gGP}KHdV2V?k-TE0WRzGYvMvgDr#Olt{A+VC1d7?WRnvi|~0&d@;h)g;$Z5#t0kb z410~A`@L#3WKcvV{Gl&&e$AFEXsS_S@0_PVWAbMlZ3>n|hesLd@`=<{u18I@kc=SuF<(I}%l1GCqj3Mu% ztdJHyf|4)*7E4Hv@T0|{y-ktMeMB-#NJ`%OZ$dPd26d%7?^7GUP5}HC2ak1f?k{{t zlT+J{A#wXtfV{X&?RCUdfgiKC{j~>*8K_DlaaK#XS~oh1j8@ z_M=#lu^>wCP=+U7e7rY3EteBjJ<%%V*zK0TYmrDiah-$Mk)Bp!yo-Dr0$o!@(PYyA ziDa(gu0y+bL^d}nKvoijM?0DnyBaY-=+Uewep8xR{DVLtQXMn;agj1y-o>Ziesbhu z=j}vLjbtqo?{4y}k6hpQa?xYrA(Kt}GDUYcfSMAB8Kt+Ex^2pu&Meo>Fx>%d)+ww@ zJS@G3VMfig^>33>D(D!KsaT4%LbWeKk);A39cvGI@mSZ^^CgSE)Bvphe!@z{P5ZsS z(ClroL8T0T(~3bn zMf1j7$gJbxE6FjhfgfX68lF-Zx8pyA?>o& zRymCj!!($GI`+JReKcq=Ak|TQ_7>p|Ip4mEmNL|6tfF+R)Tuw@ICt~Y?08lbV2b*< zv{M}=mQ_|(KJ53&%L9PAz%BOZhj|b{_I}^V5f~G{n3e%?EgMuDDin=OYg(D0nFW&> z0nV=io>_QydM5m$k-=zO?5$Qtu=Jgoxf|u=K(3(vBy-PH$+IVxvB4Fwyo(4>DOaNp zfVdLsrW(Z%k`Xc$t-)6xfPQPcIL~KuYix?1J)Xy^wkrkP8|2v+E}hq{@Y&b$N%C__ z-!+W`?p5Ou7WeFY7QWPT+8uW98h8jR9?LyTvUzCrN2#exyNpkG zOy7lpTWkd@fvIN}YgWivHA6}c(YnH<31y%hd%57Lp~#|Y-b%#tiZ>;3X@MyCq3HdY z%snNe%MWPVJ`7gf_*S0>VXps652?_CDRow}DSYgYge%5lUM&>YTtkgm>6824Es5@* z=GdPF;0**ZwM2&BA9JuYoQD=xRdjT?GTS(!+tO0UFQ}@!+V>W}vHV;5>T1>Wq6qIH z`oTLEa__sD10d$t*Vq3sQ#54b`eV`Qhi&nYZ7~RQ!LMPsw_Gy_ts8_V?W=gVR613> zqi$|5t;&OuqjC`fwHjt2Day&h;1JnlL(ZK#b*-bLqwW+6<}4_N?t9|pU7+TAvVfQQ zDR{!?e6?bzjGs$A-v<^FG9iQ@*r%-FeDPiE)U$7aUU0Z@LZN!#Ng*3@=@v8zu@baf z;HGA{F(LKE-oC{HN!2!B=&44?;lm7O{HoHE>e5p9gr=O!NH`cv3Qfk^z2p`p$&KVa zzlx8erucGWv-Q$iGuq+w>N9__d9J(XiO@4-J@sovN4K66ACQ-`(lJ&W~-L(AM4 ze^2pMo98HL$Q*6@GxEOiiwBtrJT^Eu)ciqRNP{hOGA)7P^Y_p59XmE>FJ8IV;hq~rNQ2J5e(>j==l}4i zWdB4&ZfKlUnHsz|zLOu?pJuh4uL_QRtQc7`hwP;8vX?^>#2>rn>CV=Dt}L8Tz--x1 z1C_2;>o0q_l9SJJ2ynLwPz8Q~k5{JV#~L>CCGOhRzTX3kd*=F&!Mf-zTf85kZd_AY z5=+;`ol+55gGj+(?Oc~A%6H*Y^`tF`tXX%<-PU^gwX0Z51Swo5C$e=R60U#!c-^|X zc@@02AKAS;v_M7%)xYH1cFZg3qP#MQ+cs@q>Pf<{_3I**$M@BXJ+IozF4FZY>*~fb z@jG@LcD%mpvBysDRX-vQavd!MuuRN9q%eXM9rB>*cycw~Rhl zd#}p@^CdK=2)Q`R6M+>S93S~Q`;cNOQhNm5`BbdKZ1%Cs@9>toI$ys+-B4yXS3T6^ ztnf<#CFFG~`Z{aksk z2L_ZViyu5kJGG{o`33uqyL7v?S=()pSQ@)F$aitndkw>r>cj_G7sh&;SB`8sajfKM zM-J!V!=a;o9diIZy)bpC&tG8JBAd(c>n(K)icrHEZ4F){x^B6>m0#L=ZKIQVm!!+q zR`&teVZ33_gO+4Rx)IsN&yfsL#{gnmK}DK-%)NyRbb(2n9js7Y@8sZ7D&%IYI|X;( z;-SMFJf6lT#d>&7LkFT+#FH;sxR~1_vx~d7CV=d|;*m$sCM$oY3{V^td}@Z2+eS-y z4@YN_+(9dl53&tgTutSHfSORE!h$R1dU|SA6^4bIh zo`TF-*r|K;CXYfL5}5be<|_#Gzq>iIC99^h{uwZo7upo-#Dgo{r?CP#HpQb=b9Yly!Aws0Nsl9<@R=00_OCDQAz)H&NHCMfZ}|bvDzKe;uj`&reIA zB{Z234}7cS^XD&J!ypk!Utsg!`U=;0 z$C>7pgIh+k1b$ekS-h0q4&*JaHa&%_@;hpJ3M7+EQ`H0HVF$%u=(V{;^8caB=mpj<75~WW7ixvvfsbh}50F{M3nt9!b zr7%@Z*SSnwRb9P?xKKT^keXT|Lm=p49j6Ss{uUi*xKv81+gJI?>Cka{j>4)lP@a4H z_NcR{6|e(}#h4)pE7s;N?tx#cu%uJXcCf=?N#`prj*DfwTHcV&d;^KMO$aNhIY}NJ z5^gx&l2V6ZHT{ZVL*P;l4h862nEB~J2oGP6{TV!@o6moVbs2S(XhW_PGA|j*JGKjx z&A3WWWIFf1{ajt%zd6(N-(KE)n#J;SUH;R16I4Ha<3GJe{%L&w>8(FJ{`2M#>KS_nIW-yjn6!!7{Hv2 zs@wh7Cv4r6zhMSmi$=nmx^E}91&$IZN#i;gBHvkBE$`g`!x{jcxvB;l8Svx(x* z+wK4>KieIhrZ&%uM>Pd-~e}u_>+oqJB78x!epE zSM6jB&Z@Lq=q#%G>(@KZ&c&YtSV$+X(@%Wi31VINBIig8=j`M+v!z!TG^Kk+Y7a0RALK+~lH?39+vbD+X0-mV+sL%xjsIrQnqRY4JltICzaPWT zXSXZtj{MW>$ZPi)?6=aWs;Y)B5KhRKji`q^O{9#An7qu{^-`(T>kjhpEVFBBQtuo` z?W&nS^dcj9{^4x0qJkrm%x&o;#iq0-PHf&QF;VaKn6#IlQFQEEI!<%U`5iZI^=#S7 zBCZpIlYeyeBp*98)@7#zke5m(#v}Mle#DlL%lkmlOtj1Oe;W1}`c&;i4PK+sd}&gP z>4WA&eI&E88bfyED7?=4E_-=bSIbal>OGrJNk=8L^}1CZ`I0381-8tx6@OZxSytpd zWkbV6^j_poe*X~;D|&L4*r*{gUnf;}VDr6W42@f9pdCG4>X+H{W+TcfE#RoQiYH}` z#J7Km zsNup?VtadggOi2D`y7|0CN_qsW!&iZJl&#TMwq=05R3)X*hVb_akvt-OkI&1gl6ATMzWR&%kdLn3`%E0~Vwc4rUourr z61;G}Lxk=>Y&GW6fx`{=G(w`>j7o;x=F(Zuv$1I?u2FapW}RhkQe>_0gITtcxhZnK z(PYVO_qM5RVl(q-;n^ZyXp!4?nM0bM$-chM0CVqUF~~O{-^5vyQ~L`*wbUTS+7xO>5oSa4e& z0}=y?$fv`MrX|Sm=MA0q#NYGwU$+!_`fSXH9L}=kXhD_Rch8}OH@Z>6D+z#(;oEa#}`_3UgtXkUZ3Dn+-#?V;bXcjuIH6 zT5YOMK-9{Ls_>?56;rmRsnyAKki@F*a_+X$v9C;o=IR?(_xZ0QaL3mQ{inrvl2w1( zu_NnQcSUAr*-%w1u6e-x9*6{fv4TR=6Z}T7_}iIqn1nfYLJdR&b5-i6V`|13!%D?RWZx64-$-6(bM!H@fAY>K?&cw3xJTx~3*d)9|=%OyR3h35MI*h%I zKkFSr%=iVL|J#@R@%6v-71EPRORu-d70aW`SJbRRp(i*SNejJ{R%4A2Bai89tFk#= z=pI5dT-|zYL}OvRqe4g(GvBi$G5S$9Gq9f2c1QX|(nyqx+@3u%b*5YeXYjW%EoXRp zAWPlibuq0+P~>)hZ|IzhJIsfK`cG&*$&pqP(=~*t8Uz}|d+?X&EAL0!)*Jsh(Ftrp zLX4A5d`s=hwn~w?c2{9li)Fg+*!IY!e*0GZwymjXv$3~YcRpm?UbZnU~?rXqnr z0PxYQa~ZT6lN3bFt1q#S{8T}$&(%vwZDceKRNnoPmcZ=UtiXA=of5DyCZ@B3u z-LJNz&GV^Fl^Gg=L0pN(32D+sN$6^EXq}DmlpWb?3}r_A+6wlSH}rJ_zR4vT@8HR+ zsqagKKN&fMoQ(-z-Uph=|nx`6#V^j z2zTInR}>*r^$(2-0hu`Wlq)*pNOO2rvEif(eW3kDr74<$N%QD&5q zhI6r-ZuF)X+OPJ^RR+M0lbjDEE?h`cElO_DutLwLIsbD&8oKyvh>Pq-;OW!bj%n&6 z$dp>rlm2}eyFM|;(Z_Rj&>yNxfe&2$1n4Yf)%-S%oAj!xt`#oq>Z^pyzs1deJ&`RU z{}nDa6bP6SlD_AbGPy=R**xGD`U6{OtOB&4D1%7=xD#Nb>dwE?T&~cc{89r0kzKz9 z!lWkIh(mR^0by@uJ-y=_h-?;%S^YfeoTa)fj#idC;Z!57SlhICz4Ryl9DVOm$8T;C z`KR+!61%--0P}cbywAW(kMLDXdCIdv!=pCH3oa+t->C`dZWfEYPP4_F;ue6xSvtV` z-1)3CkY%5?i7!(2oNHDTx?^KwQ!w*+;!C~y{cEwT=XrC}2J|Bq5e`mFey}>9Sj;~1 zk^hbC>qEg`15WM`V~#I0`ZINAKk&K0B^xq%CxuDG!K7+Ugui74*&q}@U|&z2(tWav z_BAUYInp(7y+Vn1MzH9RDIA%$$8m{Cm=p=s*H@ak4rNfkXEkm3W2?-q=Z>2-l#d^Y zG*h8*Lm#ubDzg3SPM_$ye1bU2`Tyx@d&uUF{OcdDx=-&`@UWO)Cp=+)Nh7vlRwugR zCNGlB1G`z+YlpQe8!I{M!@2C{;m&WYYf?N_0uh?m!!#ON$(m>X8<}$!*YA-Y_6~TT zm&bWE#Y&82Fy)byd{EAvjBGN4|I&GkJ-JZhjbh4!pIpagcgMoQ~{FF-d9}6py&EqS!AUnjwdq=WLt|c^gY} z2z4Q1!!QXi=k0W6nyF!^Q`Sp-f{i7u_t7&#E2YgT%Uq4y93NA;}6<^i5l+E3t ztcE&roCkU>3bnexLxTCPCFpQ~Vfd<+^oQV7w6#y8grR3Pbj4h6As5)bHmJ*< zQmYKQcxof_H!XW}RNMMQRlzUo96lV3Nr2Cdeyw7@qejyGFOlnIE>sSuaaj+D%c*R* zTb2M<>p&_Jz6cK#HQS9RP|uGax8{JT8PcU^pVLxPgK+i{y6%IPSmCj4Og7!7tD|q~ zB?sfBUp08@MPwYP@bNbL{XG5sjQl{DIxs;|&AN=zX$J$jRSQ;U52xAH^DsB`S4F07 zt)Nqb>>B_3D}R4PribhWbBKW< zS&uScta)*XSI6x`@#Wei&uZv{4p7$-9v4TCspFT!1_lNq|6>HTm^NlgHTm8+V9Mo3 zY@hjLK;PKV$VMV{orpASzGK^Qxn`B<_qrwDOVRVQa~n;aEcj-`<%zl46_)){j`?lp z{&;kes|K^LLL=aAc6PS#)Z2Kz$xP3d(he5$xlXo!WmWJnT#)=go=jx1@4h5`UO=FA z`!i`%{QlYFo*2o^!jMsD0arKn}9MNq?@BYXmcZAXSxC8%Q zTf(O6K|@Ki$e`HBW4X9Dd?wJSbR%V5WKgn;q}S(;zrmJhC?oe=T}l7?jmg16d&IAL z-D>OZyQKf1yG|)Bi!-ekU6W&=foRd5yhq@qG7EV^hwrm?odT^si}nU#(qBL;FMs`^ zR8`wzZChOTWgYI~>vYQ8&1}s>7}M|qACSj;*%|Ok!YqGYRIspX28$XpSmi-9+n*-1=WG|7*T6)X>D+>XC2n89vaBN;YX4V;8PT&p0!mmLcZqyO1m$ z)iCwAK#RmBsGYRufwWM~{l+`13-jnqghPNGy2(G}s;S(EZt!}-w-93f@gOtd&T76y zEv1Br3Ctjq$~6Ea14!Bfla$m+$!q=0iHV6OKeDa~FC;u5q)8`P>KYmbCyA{`wr2Dh zq>&UKP=Hn6JW))|w}E2`Dnu9Ri%wBI$_l(qNb1Tvwrx$39*_N))ls{~`MJz7Jltm=#iTH-&3yKw%Z(ssh_)ZwX-s4viA+M*iE0=}+LnS{KO0(; zI4Lp<8lS2vD({{9xSEn8(~pTxpR6pLle*4SrbnLbcwY=cw&|PXJsq5p$yI!Lo#}zZ zGmGX!sSBC~Zuz<0W{^uRH=YR&V_ctp<=>FG+X8Qlnp)_F_hZ3JUZZ^V)Qi86c{}s1V zK#1OYb)5IQMw!c(Av3ZrpH$vbS^*vKa5@1lAz;xNr=jP`0hHqp+jE!JBLw%^Phw&N zD|Ve1<5D#=9D3!!bQUBxvz}CqCkzI(JheGPTrh9M46PFTqFb9-)KlJ5T5S6qz5TZ(it6&Q(!S;Y2~JSlDjOM8|0=Y<29}$mkkck&d!% zKfT=OJ5!W@##((^|9rF_bk$oYg!<0IAd)iI1(TUa??X(89!Mw@m{E*>@ac0AHc_pA zpVd2xiN=SlqN_0i-%j1mJ>j-Y@#sRsLENwKZgn>P%R$&3;!scD>&;X2KP;Q{MXwLc zpBozD)nx0<(KsEX5x2g!Qm2$F7kQ;o0|S~7Lm*3Xj*F`nAjshWi8DBQdHu?ysVrtH z+%^pD&w8GnT^c@gOv0lSy<7fvL{Pm>0&KWb4^7f<`4f0A2_!tR#THp0n$V{%NW2RG zqS%WP`<|uBKB-DJml=X%p3|6b1Ih!m2TO)lYxv&{e;iqC2qfq8fRmUHm5y%mFU7`c z;wLzJ+`H_36`yzeC4rIK^a^1sFLJwqiQRu${-{Vba-cH$}TN_Fiap`b|fyA#|A=73-S5R(t3w!Ve}hM8(qwh_c!1l$RRrOZ*uLv1^PT?3yRI~Z_P}CRMBO&V*{c56s*3!MzJRcah!ID zjz6NYEXbix1fISp1G*@0opjsrRby=6opkB~;)@$b* zm95WYj-|fe>unS1QJpQk5!qa^h<<-&A&nct(S=gd!uatG>YZ3X5`&oB_^j+%(voW& zz-|zB16A}laFegibUoXl0biLo!XJL5x3#kbsR>+7FrOkF{fgqE#yR}2LF5nB{Q{96 zro2Kb6F+|fCnp_^&Yk@n-~RS4bc>xunJYhi`Z8z(dZVE8^<~JGO7cYaFTLZJ!jEVc zN75M^8rp?y{@+{1rstL=kPTsLKyH+8a%RM`f1i)S(R3WC=sq4Q2thC|IwBLNVjStB zJ<5;_KwMav)QGqZTDY^lTGbq|D>Z6e7@Ur|fJF{rzXyOh;hLI%IHPLi*wrmh)AaoQ zlNOx1qZSu5+w$^)jKsk3TatpKLgJoOy|S2LdAlD$Ihbb@UG3q;b&hvA{vhV^jGPk^ ziq%y-<}zP9o`RTaI`M~v{#PunkGfZL94l`YrHwQV7hd=jZ@Dmhw90Og6yxUhOJ|PJ7*E5RBUSKR@836LlYLCWJNf|^kQc=%wi&t} zmfl>E{V$aR0LskWWqsv|S@}AGNX)>^erza@HPk?OxlzvR{Hj57ynjVbo0rw=;r9td z0X~Ml6CqK_dCCJYJ+>2B(?e`j4kN0eHR-@rNjO8-=W1gP_}nP>e*4L8oqG{}1whs1 zb6mgP#gxnXb!3UyTtD)KnBP}?qCXHAF%cO!xqyv6()^cbkH*JUJPVno_~xB&>QBCl zrC~kG`p(!$(72dj2RNqdq6}PxNme?S?Iwd6AaMPl77eUh0MMnm^ieNW4%!gcz9y$h zFBOml8^V4f+CLXWpF{z`!F{b#ooa3FJU}`CccFx_o82Ql{(2@JtGs{L7-LES_4**- z6r%zG9#nwL7w2XiiyhLz?G1{+^#~+qaF3bF+{*IAPegS%9o1T|)9K8ymo^a+5V(m# zEw&B*LCJDLqSsir^0K}qe^Ix`XQQ1l+8IftKG+Q)0cr8988tQyt=hGAZ(n8nWhgyz zYQudtAp$XPW`M1=QNa_0V5^{|-KIMb}ASFWF4PVop# zFW`alD#>FyZ12(`@ZTW{5@UC}>P7Oz@qNi$T7|@Bo{>>xE|06{97B&YiDf<+FPbsy zTis9!v^UC3zvp<8h$q~m8@cP#(+^x0(wFjpmlPZ{MYCP9YkGx}I;$pBQyT&_w?sq3 zSVLG$cNLqrci+~7D3h|}$EO7p-V<4J)dg}ipjigUrqx1-Iy^QI^r6kI-(jj*{(dZ1)Q>wKq-khP8QT! zegi%41xlPD5;Ryhod*b^ox(Maj)F6KiV{nyR^h8&%+T|8S*Q(Ly+0GsS!`Zd>H);a zgO(D00NR4cXYG*}Fw;#QC}fCJ2Fzg|9(Bp!h-ZU4-I`Ri+a+lr;ukE$EKGDL4{-8p zo&0W$&khE#DWKmRI?bwBMD73>)G~kj0S1ONUInqb#oV-Q=75jC^^8;>{bzrb(3g1)InWVEj;`CCWfz z?TuP_0bPAs?8TeV+(Az2IWCUo2a09y^fvl8_%_IukT@V`eeHX82`S_FLQCI9!Y1qp zzjC3ns?uAR0mvPQ=T+PoRCF2G@W>RgDwnD7p$#(KwJ{%wM;Ge4nkP*aZ`31KMtiMq zS5p%Pn`p!~fk`;20!>>b%+0)yOWBVoxdfaeot9;VcWq~m zB`$rl`uq2J)@1kzYGKEO7AgY@H;>@5_(er6bE-fSodD_9y^SXp`7{v%=E@2g>E5mR zwgk10LnE|Y(1E&Tp9MAKd<7^r*+DKQv*q}LrQTOa)cxI~~S z{HE^89SGw)$NSt0Z$ZGBONcCAb1AnK7`Y(EB?aKM4-QpMdHz@&^?XBLR11*iCAaPc z;9sL89w#jb5g~Xmpn6WaX@~(|8X$;or^+cVl*LfTcL;PoJ7?BbY=*Qk`b5!)zNujw zEZ$CKl>yGe@Rk+>tu0iVX9XQ`4nmKcK=&X8@&wEL;ahUIZsRAuuY0D0m4WKgXSIK8 zc&7XPw5{|VZ{MV0nv}G-z;*$11pXFysTE9)kJI0$wx;G2E&219fk1!|+j9^St!PUX z03};CV#*7O`?&A6{GbkQyu9bd43Jj#_PBQv7fd0f>nySKL63W+cfF3cKW-aoxWyhg zdpfgka`_Byduq8abkevi;7MOeOC94hm*kZpZ;`oWu~IL|#|;)?L_t{9YN?l+;w~PI zELYGQut1x`Fg%^;`qiYfF9)yKlX_?U!tbl!(TxQ#ta6vb4<9oGGx|zhFAfY?SNHZn z0N77O2v;uVGw$Aj6l=z%xldY)*Fc>2Q0+i$t92)5bf0yaJ+U(p^@v@*apR=x)hDb# z>`yP;Y=-^4>>6BtR+xkXK|cP9EHHw-a$79QTZKO|64bejjK6Y($_myUWK-`! z`Ti9nzo^QRQ@1dn>^$ucNLn?ytXA6VHT?h1cwn1-eV$&a1VjahdIq2t)uhRcA};R`(zIGlM`RjLdANEe%wbpL?Io)~sIhsk zhdX6io=6|e?dUUE=qw{YN1(bt9_MPY{Q;_%x}n++3xMu$ojklD@ z$J2?ofow+Sa2y5Uf1*F5fCQdRkRaP;*a}$Z6OQocBqAI_;FynK-BUq3!E(@~7=qkd zy{vY%<9y#^T*!yH8UY~!heHedC7gFEQyXNAFBo zcGkNas==xS|JF=55&H?|!ro9d4BqP}W5Hj+H{?Lr$p2n-*qqo?*?Hc&Nle?f+iaZ85Wd(_qD_uH$pyR?n z7tix!i3%@$1R(F&FqRtdyzTLH&0Zev#M14WH3dx0ojSKo(wKs7Vh)Rd}mVTH`1Vn90N9mthP_i<}CeIEqFH5M#rTpiZGe{iOq+gG)Ar_)g4 z;eunDRzs=z)ir&IQ(-#%7NaLeKsTfTT&KFWh1|P8Lkvh>j+-2Zquy{H)R8Y9^w2@i zm66@L7yKm5K7359E8Nns1Hn53p*5syl9qrBCFx^i0R(TS0K??SyBAdEK%p(@1Qr@l zDqNtQ+<`796fmtoAg7!h`7n>`+tzgBwv6k*>$1$(72~z6Nsom*7`$Dl8P1{W$*Bgu z7kg%^CqnM0S$0JkYgxTW*P64~IIELWGBV9ti>kYyQe^*W@)h*%EPo?t3sP)ImP^q@d6 zMn}xGohL{8U(vyqn0O(BH507+=NAQjt2jsE>ChU(2%klI2vz3l#8si@85>?dg78UT z;6*EvfC0T{ERq*t`&LMdG}uB(EizHy{@a^nuU}Q~b$xg={PUoVdCT+If=&?gP}S&| zrC7pE31e{E%>WpproU|~4Pf#Z(jeHcgSM+9NEE24sKo7+CN(R)u{>q@+mUaHu|Mz= zf_%s5Pm2hQTzOH0Nc0s}uth#XpQ-oyAvXdXIBB9HB$I`(HE91?)-Xg1fg-aRY0B(HoX4I8EKmdNuP5gc>h~GHg=5_OGmE1&1 zHlPv`SvfL>6$bKw-4D2jLIP_FP+%xCf)W4~6Yc)~pi>gx^!*wol1JH4H6N@~JKXQt zGP3EOGc4iB?}}7Fo9Z>|D`tKRJi`e`VtDL_?c^@ApWZK|&ybNSNvn+;nCxvtSd6Xr z=|A(WzI7UP(m}86ELokMlVs2Zk`f#eLa+PNB*1_vhI1g>EJSnQ^v}p3zjp}-6{zd( zE=zfYhSd@Wd3Cv$RcbXoC6XbA9cEnl$wha?@e+9!N4;GZMy(>AY)5}tZWJE*_Qo*$ zgTzcGtR_#A4hYw5q=y8(jk&g+xDoa5(J9@ZUb5c-clfwDoyj!WJ$1H|WW%kC1Q<#rhpa}=NYH;9>#)Cl7e5veDsBNRD zY~n$H_%piRN0H|#U-cIlvFaNskAgBBa4BJgA@8OH6hzaTgu9ZdYHI$md3woyI+OC3 zFZmWoZEb2@xyg663Wqw(YO}?7^dL~{G6QLy6i`nnueK18 zPPiKmlFxgi&Y^v;mjHSgY&Qz5P}~)R`Dp&6Jm1iF&yV+KWL$@SuKZB052$0r%I8s_ zc_dvgTeeqIm*Y)>g0(9O_Jg4yEe_xm9!l>Ad6I7yBy$5rur(PJ2iqGUVuf^ z6qsnE$N*(nq`6*s)oJUUx58j>Q}Kaqb)wh!V}R2r|Htn0ui4h=SKt`)_Q0Vu?TrqW zJJ%~KpMvnPsMY8G$K~SGb7ZIksaFexrToDjj1$y`FK!3edTlR*g#5tifyf91*f{~4 zWDdyszb!e4X9bTGdMsLN-dnoq#9r(20aSCN#F4Mxz_HJS>j}42+Np+0N>ac$@XOMj$M!3#-?- zYw|d|FU?al(QWa<$z!E|0KPP!H(Zk5{ANc$c-r;G0@4eJ|&J^gTOyV<4=%+_yyF-)5C6WOcQ-IR&mgeg&oh<~@(C zpekg=$ndmpC@99DiZgWo00KzzW!=RN#Pt@s(w95)9(yjT z+F%ulF-lA&E7hzS=B(lz2w%yAxc&YD$cH1A?9GA@Sb_1VXFQAdHg0z?8I}Wlbmi`3 zPzDQpvSN3gVrw=I-GTe~p|RiCP62R9W|F+$R$I7G_X7G3c_ALGr6_V6_yuHF2$v=R z;ohGpH<_Qp2=YSF+1ECmkVh_reoexBtK|u3uWs(URcl4dJ2#mY#vfMt0=vVYu45>7{6*QEFSMj zs0m`h1}5-f*itmfZfUYt7FbPWW`HuxL8pXYg8)n8`gENm>*E zzRQ=99ooBJ)^~}Gq@Mj1Iz+k?Y407_Cqc?>aZtPVo;nolsj+v79Kg)oq5|PEm90_7 zcg1@z#EmJP!~z2D1DsXW4MZ-d5_y9Ug2dmJM)uaH&;#pnm(OVF>t}XYbkGE30T7^} z$M=DGY)zKd`ufZNY<4H2$ZhoVPm1tI47vS$LV1M&+K-Y@(F?Xkebf1aFUzL;4K=bu zLeDkrvG(YmHg~*W1bvEPQv_yN6j)pon!@bQufz;ab$0_SdOfU*3k zu+)9Q#ij%88d@3$Dn?k&U<@&Wojkys46vPUU;{KoriI}Q?0vyjJ`o#d<~gD^^>T!a z7XzgkB!Ya;Bgt#<)UfD+MTKG3!GJfw5CFUzIZ8zwLL9ots4GU1aH-pdm!q^(alopd zV^vqd@wt+8aHB3Lve%7_$s*@Pg3{A~5JITgTj^O6HO$#4y)-D{8+yYI$1lA%&ZJ*q ztC{Tr*52yHKOE)RsNE%9=K$p*==GJj&wvcM+AB5n@;v1PP|79B?l=MNoRcMHS5@3& zzDl>09d41R`}fDsr%(P*Gv#*>!kGw*1r%z3jdtL1LsXrc+}eBTNYfK;jwsE_<|thR z{Hn#rK`j&C`6v0bfsdf$MLP&3%*XdCOV_wMs#%4T$&dLEI*5((vP=Fz;nwHdr3N4u z_FYV#SjxMlxK^N|2k888lW*qq7?Tvu9ByPM+5H1Tv0%J+lI54c*Peil`vPuckN6uP zu_1tg2Gp1dnm%d`LaHJ3A`i*H6e1MQx=}KS#F1w)U<&eran6s`0`QY1iv++7;OB|r z0EVR%kob{d7KcrV$|R~)47+6%dl23?bnrR-wpvsaZZaE`fmRR(KB8 zuk06=VtBV~h)wOglk3O~iSJZgtnl=u1?XI{wnJ=Y_Y=*9+MmL-!)LSf%71*7nd&Pn z61(3NUY3D9Ge8Cq%JIJ3H~71B9qY?_1J5(30P*giwPlhplZX{)B(P^?r%CQy?0gqF z$q~XT`B`Uuhq&vtDZ1tXxzg#I@+Vu->frU)*5UF-@uBAneRkbpU^gzqua?6z6mT_> z3@Aj9yw%AzB6x7XUajvF%o{wSF9GNvj_CYj<|#5MmfYH4kz>5=lma~MbJec%m!#LS zjAxC*4(^g06y!bxOp}Qrx?3Z;WUnO44pzWvrd@X-538n;JR&{iAZ(X>>Wxbd4-e3s zVOzBqN^4SXX^B!PG+%YkwyoZL0zTaWHpL)!rw7blHb}c~|7EU|Bb9)_1eirG%lQ0& zcQI&C!;(L`knQKlCcnai9TE5@#|2=)WE>JTLyxT1Iw<+Fz#LlD3<}D_&e590iHq&3p*bBb1^_-zhuDNnFF>eG_u4;jxz#4JteUhe9;+< zHjI_(6X2N_c+o+2>ZSniALzRz=`)sZPF}vOjrsMrd(O^fUNE@jz|0n+IxbnYi({-J zfwQ!@zw&7Y;7Hib@DpbUuG;!KFPK;X{BjvJa|MX$HG#CA@a2vGKs3eJs2NJS(#@^_ z{s$NlU@gK9yBZ)HX;`4=EV#Lc(g4&)8F=w^Kw9*#7cbhZkc0Orrii`024BnN1#UyaahMrKyuB`wR!$SERe;6-uU?6@JtX#pqnMJcUj4#XR@u=YR0SgDC7?>?OUK4k_D$vR zdPwCxP~Vvv=#)Vh0t#l;@M)GaW_rhgzWoO68GmaaEU2E@T!}D1@O7J=j6En z)qIfuwzV#mifm_+OL-60KJ1R&BSShpmNP_c%94%TLIIZS41_P-X&NTHL2$+^HO~UV zKxz9s4(3#2pb{XtIaEg@4S0L6dRfoTXy4b40(2h^C6J^L=Yj4ez$hF|bVw9FS`<>!{wLlXK!X756@3^?M^8BboGkc4 z3sJ{rDhHZ;6H*0*z&vc@GAGYiTUuEv7`$wpSyTVNpgRf;q;YPcbz;~8;K_A=zOPJv zop@OD`#jlF=wsqPv~SDETcuPhbspEj^MgZyS~}Vb8Mqg-Ar+%E0e3jSoE3-=u&sC% z74-m`lb0KggOH@j#E=RL*iDpdCBKk*9@hhYoUbu==w=D0 zYfbs2tz%C)c{YaR^SCVWcY@5Oa(#RI9DqWxM5OKjsB>P7ar}kddP}`%fHcsrn%pMX&3qbKZn#c$s(9qR8u;9pTHfyJwrU-3;G#}W_!WBb*SAIRMK zd5;xMgD2KCVhCjq{imN9{u=6kexD6C;7W4YwBxiIZ=g1o0|{CjNE{+b+EXG39|9um z2i*w$G6}aWo-DAOfSP_vd}=sL>I`#`=bQc|bJ&+29L6TgWpq)lj8JdjD2wcS4~*5{ zgF1%@u}<TFwUJ#34FUR4&>{0FhTgK$}!<*diteK0Ra8*7^E4lxhzFLUME)M zgM7zcZD6-HC%fy_Fjcyhm2H5D9HbEzg8e2rAF>oCoVko^AJ5?3Xk{W{i!UP*v06(6 z>k-#?rS{k>!1fCyK(lxNlEHdQS!C)Z8Pv2Oi$o!o+$F&~feR3c+A#tlQ;-8@P;+ie z$X%B6ssscD`~=tvz@h@XJh~l+>z|^HPkYs|T$E?thKj zTB2F&^S>zk_1kwp;phF&EUHvX|CZ6JFFT7Xz6o)IEUiD2rk||XGL-}J&*Qw;P_o-Y zD_cP_yTs$vOd_S2nxiOJO4`#Z>nO6)n7={=;8!ak0Ky8sGOb$kcIXX64)I&>O?qH? zr1xeu1*i<%cFiz#a)&hhz{?^>@48yTEJ$@-TU(o4b&HJd`#}(Lq`Mgnoa1aQ8t4P| z#{A04drTtJ55s}Wh0x+@Hy5!r^5jW7bB@T%wxZ$3WF@NH1Sr1fG^GyzS2U5 z4lva9i>wn54!$@Iudd7f#j!!euk4199SCG7G1#1kgPJLTY%-W>kZMfYzd~62Fz4lY zHKn-Np>C~-BtO`1rGU9ow>zyu{!vRuXZfnF#zDaeRZ<6pY@GvzR8Q+@6@*MC{xiCy zN(=nAU>5)qMgSYQ6n$!vxgjv2-D7@0cVkG|&Kg*5)UZUQC*XOT7I>QXlgrnO!d7-H zU`Zn+E#SF+E3>_T#XvN8e2aMYVyVsKeyJXjGo6r*Sq?VFZ?4Nk-aZ}T%;jEaZ z5Qc&ejX)kGJg{?RDYt~ci~kn|pUv=}3O?a2*WmxK=%^>R#)o-RiAdRHi#QYxUPvi_Z_9r_=JupGOVmi91 z=_hL ziBQP|^M5Mwzc*(o2d0j}?frRf4y6fLbaX`z<(E^u-Pw^OyfY@IK4r3 zb^{NG&?`AvC9;Ez89pz*`xQw_0YSx796Jbs)5 z$r?eB-w!_bYc3LkdaN#U$1wV``1hZ=h~yUOe8MO0UciYw(gwoKxp=#Xxvv0t^av+IxLSav$pl4)v zYXzB?chjP(rMS4b2L*>)?D)iDlB>y_o%DS5&YhD(c+}-+h-KqO*^Pzx@&~pbnwZ4=1 zck+SH`P9^i8LD2{?`k1!KO3jHv$N^C)!JI(UpSzKnQw8+QXolj2J zZ;Cvrvs=S9|D(0_**671#AAVPAn}E3r-=(iicX7Nir-eY&=afveI=GHf|r*EF6#d+ z`rvcE-F_ymY5Dz;QqdQ>zx<}Y4I1jS{{L2XS9 zYs_Ygl?Bf5!M9f}syA|ZKy458@INV)976%<*Py4JS~z2};iLmh>Wg<4nDdr5sw=K+L0&jZ7>b))-h-uuhj(k(ELBtQwtUsKnk$}4#S5$?=JMc-80<;h zM`tI$Na2igP}3T|xR}5-cqFn*nXqS}vz}i~&1^fH)z+qB_^RQQ#7u%C5X;=k$jodN zQUy;KFrk5+p#pv#%3nElg4~$KBfnj^*m+F}*cPIO@UkSYMLUo_6`tM>aUe{rMWu?{ z)!oqqBJy$!f>C59-j2{Gc}D>)3o0;xcW^2J!$e(XQ*_vg*b5Xm&PGR%+u;>=AyOkI z5`?irP_=Tzo|IU#&;p9(=w6r=mWopF6ABHc_Z!TyrHV9SVYh{Kpz6fEEu2+WVkWep z>VfN!eb92{#Cb!F+{ z;mVMB5d;ughWC^y2Z9JYhf<9zU3PA6>+Qem_$8v7Fd@*zdy+GWAC6AfY5(!Xt-?Wu zFP%@v9~Fxxmm# z%fy7>Hxwk7>-Y*ZA9CR!wGK!b3C?Y{1^_A!GGzd!9O~)|szPuo8CIKd0~y;tFOhQQ ztV1S)ly;kY@$g6x50*;i=xRD|_p;CkQkD2l-1lr`NN5gDXikzSc_SJ3LNB^LNz#~C zry!aGI2Nr4an9lC09%~svG#kYuF!H%gu0eIs69pg51@aF-~cgiedCTq0d(iQmW7k8&)p=l6y9f07K$h;1AMXGb{;$%n#5RT5*=9(xn+keE!x<0XVpL}C-Nb~^M zT&D>eSu85a9Z;oF7{t+u$S+d-UL{cB`hRy$mE?>qP;))O{MUcWS%6xHRM@huZ4LIj zqoH&IF_Kkp&RT+q5-=`bvv|4bXN!3BoFQ(N%>nKQJUcoeAzhJWw~msAkv> zOlrfElZz|B+K+M*N7iTpkcGcBjf|8k`3S(0>iz3nhu^Qo^++pW+`A2agep>Z*e5wz z#AO=r>stOCS`t@cc_*^Fe4J{I#PI?()PONOE#9^ULJSH4Ui=X-O+Hb2VqlO^ zP(S{poiuMcRbZSsL_m|#H_im$S>oqc3)gz`Bp0$=t4RKgYQ=CqI0kzRniGj*((kCe zoferCedQll9GbE@Sy|21BfObSZD%>_FL~77PE^ieXT`(lgg0n?sR;Mlx`ZkQGk9>u z8Qa^>DnDBoxAhekT_j);nU>S1S;-`8B8_bCPK;5$@Is%Yu~A2y^Mdn1hVBCRwKgaW z1DvXT>d3f1Oia1vO9WmhgRt&|(9|ws(j{W|$kHR9{Mv3$5-rZM@Ux6OBj8Itb`0W( zfvyaPA6?kt2+Wlh(elju=6;puQfuc!F@>eu85sHz+Q*962O;#C$^sIjdgXfc&!g1D zoQwJE)+ouSq}Eonf~on`6q&4K=rKht@x7--AG~L&OfAO9sUCcA`oHnzz_QVDND>2e ziK!R_gU3Fu7d!-;P$8ArOnI*Hqlq-d6wic7i8H-N2xC4Kb~|U9UX!S3K?g1bBt(UP z=JKW34X_^Y-UADAC4`i)SqN@io`9Tg!^5hf3d=M$x79I9S&;j4!KOmaJXo0A#1 z+NE+<_FU-~W;7;+)}gnVKfYi_zZGoq3zGq^R3Yb9^+eO~^n`?~Q86*l{q0pus)**( zO2v0E2if4Nc@VBh4feHlS8Kef`aIy`oN1T-UYSN{yNKmbBCENL+jb>{T!1XzdfrC# z#+{OQ4p5|N%62%@c|p{AarOfs`JQXH;r$nIWQ_|QdS*)!ZAs=a7Z^TCn9{kA(*GA& z+pnR2Ny(a%!Xq|E(le`WqH`+@AfO^MV4lfRn(2ji%*2?V0wE;@kZ8k&>d5jj2k`>1 z;Q~HaSm_C2N2u&B#V*r*cvv38r09Prh;i?QT;oBWVa44UV}~dgx=XnL$W*u2hXxf^FesJyipg9M zlp67Ht_Ciy6)&s)!?Y|~@i@o8=!Qwr{)J99CTzKO6shi3$_^mvU=pXR;GKkrpfT6sEeW{I* z$m_ukbY5X{asWkh;Db^VYaBUt2Chn6G7=QH}iA=?TncKRRB7z2aj zoR_>wV>6meof>;ZI#B;R+>9p}4>o4+M4RhXLtD);;!pf3g)Uvbyb#W7*V%231_9UX z3S;=)aHo;`y1Au!DrAj6LO?3Nr)Lx8c=0gG^C7K@s|9!*6M$N5`SY(94DFqq(t0dm zga4l!ET4i=-j^y=@zY8SCl77mrR@*;e3Q;qJx5bSG2D1E?!d88P5d^4gT!*t5 zNPC~i`bMu!29HG&i*?!c@{>PrJHXU9w5GD$Kx}2?5lTPwU#Kn?f2z;>hD_D-FLz#3 z?7wS6>o@N&+!J{HY4qhhz3_~>yXTx`cfA10XL4)jQsD`pOkUfmZIBD>G*H%Q_w1t- z?tv&SsV1arxPjrsm;HUcI?kh>j_t@oyY{4P->rGXWBAs|nN>QhkitZ!Rp4s|P-M;| zP7wN;;dSb{%pt%RTz=-`hhB;{;l6~S{lzt#+T}f4ufI%>q2iK9VlrgO0m_z=8X`qp ze78&VgF8oaDxr3!q^rNX$fbXkQF)B9^mncvT7Wbe#6oLT^T3=qax zatV^Z3T6$1f@hWrHrxtJl_vBKu?5f0__C*@E;sJDXMgCZsXAk6$qoc~b4?I+-tF8{xua?|rbatJ`{_PGI4`+bi$#=*{ z!D!w1s}>hWs>nUI?OI@dAmy&n7iuuo7K&!GrTC1p=JC?E6^bS_2%vMlSDrmpu&i_L z(}k3H=Q&nn1(uGBdmcT`k4@mQeSxn}YgjkZBz!;fK-K3pN0mWl`ZK^d0lhfpQ1!aw zvX^bOL8=dB#UOK>XDAPCdMun2?s4F+xcB9>kkmGLtSf0|?e~Z) zz8&)kwEXW*{r?HK1!@+3yU?v6nv%NdKCF06LsEySlH9Q;Pc+Q<{yB)ht*k3Oxb-bn zq%&1yGF4j~JQWweX>6?{c=}_YJ@H5WpUwthM(a+?ZF28j=T6o(hcCz23|F zQjF(}Ee|t%4iC^dAaun+L-bPWvSRO9>uhf$Cd@N>u+O~3$snk}Mz#5h((|Do8#-JC zd)dQ#Y4`O?jce7i;>>!VoSXvJA${}Dv9yRjS{Og&R5d5*OQzfnImy;Td8dbxtA`(= z(=Nq(O<9LKxS@Cx=0qv_F#3eBX|(mI>xyTup`F6rpZYb+*rwME))bdOrBvY#?Tfi% z4yPy>uim8sV`9o7Kql_R4`IRAY&3yITi#Hdu4|P`owIED^%IN|;y)jDQ{$gjqFTH3 z<|Pc6Aj3A_2gZdR2b_gxr@(AH(?coLgDE*J+H+E%=O(CP0WAy?5{hgYqq0A0+D`}K z3Kur}pt8%<7Pl_ltTrg548UHDYsZ=`M#wH>>SxwG$voE8+5RX;k` z$tB(&DI)$RD_4~>8K`vMbEI8YVcR~_2lb<$rxd6(D2OYnO!mhdMOb_^9mAx{wB`IZFLcvVY4l4PNpjNmGu2*G0+xUe zc=Xw5vlCHUY`t(4e#TR_FCln_{^-M>e9s14>p5$lo!?7*x+g`St-;h?xMdPo#_E?! z#jk7gL;gpa6=frXwZhf;`s6!rQu!JgKn;-pt(_=^9{v)*B?fh-xU>oOMjU#@)%apz3O%MU&NAk_Qlki)>rc9D^Qv2#3W>zs`_n4pfg+KA%1F_47%G3uo@p-f9i7 zbINyp&+E4mNl`CIZ_1evPcbu{@MX;JtQh6qHd}OZ1F&ply4ox`+>=~fSLzTt{C)b` z(EMCtCuI0ee(Xxn+;T2K3!x*uh_A6GDc-*J+R?$mnsM~O*2FqiV+4j@VZ`phb*f!1o@L|=L5`XQyjGNzNxEyt31H*Gkt~ssKmbAwi)vg{V z8*gf1s;uD?`acI&hU$uRqLUA0*>QRYt52t7lPMj!*S(0<%Xq7}k1?n19)9)tIjY6P z&E+ULeJ^$&`=!stJog5r(d>y^+YVNBFi1vf3U%|6&}qwCCoRR?Pm;^_ib;!jKMaNb z93+tW%FAa@^O7M*<*MgDw}#0Psb*DET#UN<4hd7=`;e4+{DTYDc{)?44lfsvyn1FKX>Ny_rv=BMr{ym?K*diW>Wh~}NM zAL|zfqR-g^>i5Hx=4VvSfYH*2*Fe^&M^ajJ${l-?Iu{}D6BzWrwCnJ@W7PV;eoSRe zPgM@NQZZ>1f=~Qk}X>|0sgPbiXb}aP%AZ$i5PV z_?K%`m<(T*>W!zc-VLSSeFB|e+{0D;^a{HM zhKwm}`7>StwlZgj-dDiwSh|l|#O;Uk*0bW2vvb6c9JGGPOQ$V0eobf~ZBPiL69T){ z8ILovIQ%bth&&;bO?T78`F$Y2o!FQ>V_|A3_mPX}7?pmtud7!rI{i}1 zyPuuIL^aSEAk`T9*~++y9JK#OcMHn->710YjJqDc(z;0@oZjl85Y6|KhNW1c_WmT) zMnv|~$JF@cNWv5IfrtnHM|UoO?!0i5jrz;`tew+K(Wk86M3)_zy*?2o+-~x+xBNJ& z^1NhGc6uX9dR$=rIN0D~zIrvX#m~jn)p=)aO0X*E76jIAffdAWum&V_37t&Qy#r zOBg!u3K;iiPY8j>C4nVghNHRcXPKi%@gttqtj8Hk9~|=+gzKdQ3ZfEFG#ztC4KH=6 z8zN->!`}g>_bf1Vr#p8)qWGpW{$+>a43=8w>=_S#wN9-~q; zso%%r5*)h`NUx%{2#z}9=3t!4b&ut$nbwhkc*Co`}bhpD$o zu-!Sqs+qa0tW_lBHsmS zzZj_AVufePjZ)<}vyr3jo!b`9;XQ>IegEMD-cRHjruL}qzs+k9WDC2Du$UEPup&b=` zyV`yIMeN@rMQ(D^*);P(@J{eaFaifkEYOD^exI($>aA5%Q&a7-6lXhJ{qLVo@L+{)r;fl$-b>5N z^W$INnQzMXwS1$W+Zg);o$V|KoUL zJ+W$8yI{u2A09SLl!Y772^igcw_$Lui2kK;cvM+<`oc>7c@Q8~ms<7T+}zaCj)ML0 zW1VdZVKV=d$N!H5f**YV2R4Lhw?!THM{aIuMMai!41d&pO2fK?`s76a4Gq5Fwl`+e!dQ63z@rB5XntOp#;i>`kR`^D zB!*Fl9k0wRSw}sKW{cLfbBWTPI$(mrh-+(S#EaU^Z=pzaGTUPms#%&!;f`v3cy{L> zcO7PyeL3ca1_;fU!Kt~}jpCUv<9-^N+%_I7Ru-OG*MGLcnFndPD*DQXI0-4K9y7r% zz_TOtLG0$*MMryHieSME=yb5}F1<4uQT^(>yqt@7S0KiHp#j9){r>u^l92L_#T-07Is!{N7zta$AHDw{FKB$>+siZ@ zO6B;?28Q6(b$fY1y!h6ey!?&jvaJmqe2=frbLm0%zm2_5esjZ6(T&~F{kns>d1nSq zDhqn%C*LeT_$c=wo$X`Exq8Rs- z-Os7t^CR&p6}zN&ZP&gmTcQx6pP&%h?}d|$F{drwCqO3?BA|@SLpyTqFK^5w@Wa=X zh=cHT0q40Q#dr7rI@UkGdr293u6Pq0T}h8u_OaS64_!+0^H)zXfaf~6ESv+X!jRHX zc9(H7eeS@febY|4=^O^chUF~i0n`v-D!h@O_A-p&*13NoA^(jjYrUW(`FfXY}<2J@Z=jZAT zu%+i*ihPiZ3n{M*Ovgos?C)@47mFZS@m$q=`Pk!p149dasMDbc-gC`^HyKW6?4W3;-puu6^D4N#wR>qRgKoq^_4i61g$#cvFXx1s2cMn!ee&wc{s3wy zST&yhZPcKcPT0D=Fx|3>B3}6lKQdn6Vy#Q*;37!Am2SNpTAc25to1VHtJ!Gv!jlB$ z?rs!?jrf$L*GJa}ChBL?o^wL<7@%f1z}jyX{2@O$uPiq&Du29u(=bdn_LWs9q0Jde zOCilkY?> zoe>m&`hH01+)duvT5Nz51$C6+2if;RPx)^ZJ%X5}EXswK{tFV1QHk8Bb*c+WiLyb)gMqu@}6gEw3OYWGCy)Bx9=F2;< zdZ<$U1BnQp7klBiT@>g_ttco4wnD7n`6ba?16C`eaaWkbcx{RkL!Y=XLrdwxB$b+U zz7wlKCiHjbulhDNb_yb43A78|bi}MT45njblX@Wl97yGhbm>?$QVCY%!!GN7Ti;ulG zC@5}a1zIkRE?8gan4B)*l1O}?Jb64LJP_!cf_fS%C&JL1oUmYI=l?7FrQO`rPhU?B~(ub zMPtj7r#9n+4WEb84gOFvuTP%s<1&u%DyxaDCDjvN%A#)s!U((ZmNZj;XjH+?+M}t@ zN2zwV?)VPCc22dH<6E?s6xq_+I^wR{@(ykVzVnYQUNu^+zwF$7N6V=ABf2kbPnu)J zQ9_enGV#Ws@@A3?-Fd5~8OVYxMRuO-NM2MP&1BwAUYFC2_VeijD!DVxm6^8$%NMoi zPfav8`Y(SG3h4L{d^`O2WaFI-|!juld9I?~209LSAx$-VM>#RCeYQ zzLVugd=M0&(7WD*QrpQWCtx?nZ|&}HU+fM)_*%bfzUN%hXRS3*5F9a?FzuW+u%S^h zcXOj*)PI$NcK5=SPD}>Hg(hLGyatqm_F3;`&D38&<@k)NsMe zCpUUnrDAdoY!f#35XuqyhOsY2Fdv1AvWGA)m={%DEW%$Iq%Vl~1ad?yDq8_qe$1%) z0-wN#`aowah0XOHBCgJ`?xho@eVIm_t4cpk z9m=eBUZ|=>pqkq}kTDB=#9v)mBfWd6#*N5GU7vXK| zOU=$UxW25f&LLGMiP)Z3-5*v$=P)~c*}1{8x-G_8HSTFU8ycdcB#rh1Um;+4>FXIk zc%X{M75aBpUXp=sD#2u;=Vijq&LA|J%S`7M`hVcQC5wg#7neUN({2g9q0P?Qf>PJi zM8v8KC#nb~s`OlCd8EpWaaAkuwt2`w{1%p)4qvsac+JMCbY=m^d6{4ednmXnb{-w} zZgF$`y-_)ild3HSEifI^V`I#P_kaFJ_8<#t398-pFbnPdo4}aGy31e%(!MCQR^Unu zLjW;@x6?e%*8MsMWCE%BveK24$@sad7`*bwL2pjDS)%5hL~GKrA@fKTV)vPGdtS7` z%^9ZU&0H_ijgH4?>L}(%${!19c#NGO2;I7v_usZwQcE77U`6#5npVF%NKuA1jr{rt zY~VhppK$Ytf4Qo}oyyw#(KoZ;txsD7wz!pz?amGpDN)VogB6CPko?insBqZz-|M7r zcR-{D&u-Bbr`wKHusqt>9WyhdTpn=R!V$|ulZzyjR{bCkc#g9J{N{AblEYqpyXI#rF23*eMg0a^A9(f)LV3&y`f}KomjI_ z#SO`NInyRcd3|p|t30ve{1##_!A1;qF{Z1X#x^W3F;yg}`&Y$myTHwrj0KZjg6CJd zvR+;{|I#lSB$W|ly>D%*i$^Qbxn*|)1BbozRMx8;dSA~C`6c!%!H#EP{I&N@{eC*W zxrgEPr7+a*Yuk)6_i6;K<{Ai3tM*^s3ZG+tT7#Es@J+vq=u=2l**sB{f_Xg|pj9Bfp{cZ&=Z3=YL-70#EeOv5qq(9;+s}{3mhehqw1@2c1jnvxM z^#pkie|L1neG|5?M$jeixvq*c?_gpJzpcTFSIerQm=R%T2}o&{8>=`!5C5HmFA}TX zZtNFf>H4bD+S19by(O=_4fEhnQ0C*vNjHq$^5#M*!;a-ltH@gE#?>LaD(K*jzepC} z1sCh&Q4|ZhFKZFHD`E3iaB9J#&t+E+^D173lc>Vy1!HV2wTVJMzR84rUiAZEXqz<3 zm!-UrJV-fBS9iS(*;|y)&ubXA@sJm?vK!wPGgl{LU6>)*Ub>KQ6K;9)BBIH3AVK{R zw%gpfP6;gI$w7wL zZ2OS77X?l2J(aQPRq#q)T{%vZAT+$zR74Z-za|W`SL|2 zweIrUC;coGMCH9<&cNl}4VU5Is3M&x0!6owV|(W5;=cKzof41n-<3V)bGXR62^+hx zeb@8TcY2-ql$J`SmjumvD)Fd|FB!3ws^ic$xvfyho`>+Fk+W%RaS+jw)N&&Rm2==e z$0A;ExiZKj*+hmz&4b3C(dgS->?ei%eX0F==4L4OUUjR)fG9Q}bM9Sj(Ehhced8ko~>KHDzgC%i;suh30Okm%$yP-#z;G zdr8|md;YMC_3mAzqi24c6Ta@%mn&}X!ME;p4=eA0Y^M+-lHWdrVHJ8>J)Jun7 zR>M+S1hu*tY)?VL{BYWDXwHCvooL{x%e^<&6(Df4x{`KKy7pNL|mpz5LyhN%8v6myRFu%$v!+M@IicZ+H%HEd?YJEQCCEIYW#y(oIvQ1vk zOgnLH+s^fK>UpZjt>51ve}6aW;*Vcb@?G4YES55ss`8%HN;r=Ha%+GkXQ?*5z-z!b zhTkrw{Uhr_fIB=5M~W1ERYEi7w^%!jhOo`u0Uqd9vc=a*+`Bi7HoyP9-$AWU$NIAZ zgWz>9U(8kxV~Er8zI#Y{xtU^=Sw7sUUtHKhuqjZWN$bg(d951Sl+?4w89BsBOGLA$ zp1O~|iaBBH&Flq3BBsPsq}6#0ny&|G|}Iz(2T;^oEH%_ zajMr3@Vt?H$h+zLY_BW(VD?3?zM(NnJF{PwTNrIZni-Qvv752X;-Ka+b>|r3OPF=_ z?KfG^WSP$ePMOV2-IGY}>tIwZ!Jn`h`z5W~QDnc-Cgb4~=7skJ$Ga7}*^G@Vqr4yHc6$c>=rDZN_HM*AcHSj*8SOr5PxXf)OKfz5>&9l~QBh?F z=Yq94wWCOa_R_9#Wycv4UXpvWYU` zY^h8~O??7i-8T&ZUJvT`WARSb)>(~nS|xK@gtjmf!DGW~c!ApM=LDzd_iFhi)xOmJ zh&2wMwD|1y71ejzGFx8m_Zu+OsCfHKSsqj%a0i|CGOc`*^Jbn#v5(#yVv5wkUV$1c(- zo9#5{GpctKIsdWcl9H?Ed_^MmM;44k1`^x5*W)}0PW#6hUzDBSq7kl=UOmp}^yE0> zXR#sdG3sBMtCUU%`L9O`=c>4&v?PT~Vr^kRe5YNvGOYN-TdvP+O&weA^_q>n@Zlz)q_a^^|+bnSHGxC>0 z;TJm!RQa%CdNc6p)2AgWCA$t1C39)K#=>5T=TBbFTEyx{<61B^nZzh_vxz&m2IvGs zR;f8z8+Y$h)ge^_aPApN zqdy2f9DK0596Zo!f#4m_IkxTB(EWw*cyv`Yb>A3VUTZ5nQ^FXO9mNIa(I~HA4lSG9NMh7fc)^#H1C~rbW%ZUNK5u3V^Jk9KoET_e_VBeO~ z#P8+n1I4DpyZP7^+k$uj+0+kL2zGkDAM?ej_OR zA-CG)y4ZjqM`-Vw?xcljRHohY6klM4Ekr`q$BKTuesnHe{qv8ql+h=1D?P6g34{*O zES#c2@3ml)8Y0g0c~m*(k5+e&>S3>~MkfzP-A9a}<~34jZYYTz``wc)!hZZws|%l>mBJmqw|th-Y))u^Sg4=UU0m&V~|Iw>tb zf@tSDZAwF20jmv@y~M3~nTdCl6he`$iPkMUDXQ~p(T4EtDl-I4!otKVldLkMb%U}W zi$Cgmtmt)>taW!7&O=|6TB9c;Xyj{tY-w_NRDDvGO%^)T`MJ^K^4ggsV6oet!yRkc z@BH{kAz8gCAzkV?<6G0~@J74z@tu(U`bed~(XXV0#`cV9jrF;Egbg{>I}v4SQPeB> zhJ5Tfza-xkEsH>yz6z`c)4$)Hp768DSRR>$3A(2RhC_G854tuboI34ho=@S|dpq6P zLR}3S1S_DDO5D?;U3QJhl7YC|VXor#$mrj(t1K^{a!sIjK4GHft97K~TYDXCk_Wmb zVpwny>M{k*tZwCx3M`n~QW_*Wy7nzEa;rXkT&uo;_&) zSTZNA+?_FRaAtYRtq5CK2YDyq(IdleJu|TcOKevADsDp2JiM}a0QFM;&LPRTbIl_2 vNm(7cB;IO$P==nJ>GhQ+(tayFf<$w`1uw*uMc~LjJEi+-_X^~nz5agy%WJ6X literal 0 HcmV?d00001 diff --git a/services/github-sync/README.md b/services/github-sync/README.md index e39d6b6d65..4f67510e31 100644 --- a/services/github-sync/README.md +++ b/services/github-sync/README.md @@ -1,3 +1,36 @@ # GitHub Sync Service -Overleaf Github Sync Service, @Ayaka-notes. \ No newline at end of file +Overleaf Github Sync Service, @Ayaka-notes. + +## Service Overview +This service is only responsible for 2 things: +- export existing Overleaf projects to GitHub repositories +- export existing overleaf changes and merge changes from GitHub repositories to Overleaf projects + +## How we do sync bewtween Overleaf and GitHub +We use `sync point` to track the last synced commit in GitHub and the last synced version in Overleaf, which is stored in the mongodb. A `sync point` means a version in overleaf and a commit in github, they are totally the same content. + +When we do sync, we will first check the last overleaf version and current overleaf version, if they are different, we will export the changes from overleaf to github, **as a branch**, we call it `overleaf branch` in the later. + +Then we will try to merge this branch to the default branch. However, in GitHub, there are 2 kinds of merge: +- fast forward merge: if there is no new commit in the default branch, we can directly merge the branch to the default branch, and update the sync point. +- normal merge: if there are new commits in the default branch, we need to create a merge commit to merge the branch to the default branch, and update the sync point. + +Now we have the new commits in the default branch (called newSha in the code), we will try to merge the new commits to overleaf. + +Since GitHub stored all the files in the repository, we can get the changed files between the last synced commit and the new commit, we only return changes files with URLs, then web service will download the changed files and update the overleaf project. + +## What if there are conflicts? +If there are conflicts, we will not merge the branch to the default branch, and we will return error to the web service, then web service will get sync status and show the conflict to the user, and ask the user to resolve the conflict in GitHub. + +If user merge that conflict branch to the default branch, then we will update the sync point and merge the changes to overleaf. + +> How we detect if a branch is merged to the default branch? +> +> We will use GitHub API to diff the default branch and the `overleaf branch`, if the default falls behind the branch, it means the branch is not merged, if the default branch is ahead of the branch, it means the branch is merged. +> +> In a corner case, if the overleaf branch is merged but deleted, we will use the latest commit in the default branch as the new sync point, and merge the changes to overleaf. + + +## Copyright +Copyright (C) 2026 Ayaka-notes. \ No newline at end of file From dd03d8f24d635766b13fc3c5c1a025576e179076 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Mon, 2 Mar 2026 16:07:34 +0000 Subject: [PATCH 16/25] fix: refactor GitHub sync module imports to use dynamic loading --- services/web/modules/github-sync/index.mjs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/web/modules/github-sync/index.mjs b/services/web/modules/github-sync/index.mjs index dc3b32a40c..80a728ecb3 100644 --- a/services/web/modules/github-sync/index.mjs +++ b/services/web/modules/github-sync/index.mjs @@ -1,13 +1,16 @@ -import GitHubSyncRouter from './app/src/GitHubSyncRouter.mjs' import Modules from '../../app/src/infrastructure/Modules.mjs' import logger from '@overleaf/logger' -import GitHubSyncHandler from './app/src/GitHubSyncHandler.mjs' /** @import { WebModule } from "../../types/web-module" */ let GitHubSyncModule = {} if (process.env.GITHUB_SYNC_ENABLED === 'true') { logger.debug({}, 'Enabling GitHub Sync module') + const [{ default: GitHubSyncRouter }, { default: GitHubSyncHandler }] = + await Promise.all([ + import('./app/src/GitHubSyncRouter.mjs'), + import('./app/src/GitHubSyncHandler.mjs'), + ]) // Notes, this is only triggered in hard delete, no soft delete. // Hard delete have some time delay, usually 30 or more days after soft delete. From edd28de02f50bd3afa2e32c8278c65082a83deef Mon Sep 17 00:00:00 2001 From: Musicminion Date: Mon, 2 Mar 2026 16:12:57 +0000 Subject: [PATCH 17/25] fix: add fetchJson import for GitHub sync in handler --- services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index c5d8c65428..0fe677c1e2 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -6,6 +6,7 @@ import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import SecretsHelper from './SecretsHelper.mjs' import GitHubSyncUpdater from './GitHubSyncUpdater.mjs' +import { fetchJson } from '@overleaf/fetch-utils' /** * Get user's GitHub sync status From 17c0e856662a04311d9fe4774a3c6a24812c63df Mon Sep 17 00:00:00 2001 From: Musicminion Date: Mon, 2 Mar 2026 16:46:59 +0000 Subject: [PATCH 18/25] github-sync: remove dev router --- .../app/js/GitHubSyncController.js | 29 ------------------- services/github-sync/app/js/server.js | 5 ---- 2 files changed, 34 deletions(-) diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js index 1310a1c5ec..359eb5fdb1 100644 --- a/services/github-sync/app/js/GitHubSyncController.js +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -280,36 +280,7 @@ async function mergeToGitHubAndPushback(req, res, next) { res.status(200).json({ message: 'Merge to GitHub and push back process completed' }) } -// p 699dd39a8a419bfc8f417400 -// u 699d40291c632958125dbdab -async function dev(req, res, next) { - // const { Project_id: projectId } = req.params - // const { user_id: userId } = req.params - // // const projectStatus = await GithubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) - // // const userCredentials = await GithubSyncHandler.promises.getUserGitHubCredentials(userId) - - // const repoName = `test-repo-${Date.now()}` - - // const createTest = await GithubSyncHandler.promises.createRepositoryOnGitHub( - // userId, - // repoName, - // 'This is a test repository created by GitHub Sync Service', - // true, - // 'ayaka-notes' - // ) - - // const repoFullName = createTest.full_name - // const defaultBranch = createTest.default_branch - - // await GithubSyncHandler.promises.initializeRepositoryForProject(projectId, userId, repoFullName, defaultBranch) - - // res.json({ projectId, userId, repoFullName }) -} - - - export default { exportProjectToGithub: expressify(exportProjectToGithub), mergeToGitHubAndPushback: expressify(mergeToGitHubAndPushback), - dev: expressify(dev) } \ No newline at end of file diff --git a/services/github-sync/app/js/server.js b/services/github-sync/app/js/server.js index 2f94ca5071..179a0c8282 100644 --- a/services/github-sync/app/js/server.js +++ b/services/github-sync/app/js/server.js @@ -25,10 +25,5 @@ export function createServer() { GitHubSyncController.mergeToGitHubAndPushback, ) - app.get('/project/:Project_id/user/:user_id/dev', - projectConcurrencyMiddleware, - GitHubSyncController.dev, - ) - return { app, server: app } } \ No newline at end of file From 4511f944d2fe332739c9730ed5795ba2c13efc6b Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 3 Mar 2026 15:17:02 +0000 Subject: [PATCH 19/25] ci: add `github-sync` to dev image --- .github/workflows/build_dev_image.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_dev_image.yml b/.github/workflows/build_dev_image.yml index 38b25a6acf..90ac4073c6 100644 --- a/.github/workflows/build_dev_image.yml +++ b/.github/workflows/build_dev_image.yml @@ -36,7 +36,8 @@ jobs: docstore, contacts, chat, - clsi + clsi, + github-sync ] platform: [linux/amd64, linux/arm64] include: @@ -97,7 +98,8 @@ jobs: docstore, contacts, chat, - clsi + clsi, + github-sync ] steps: From 0886af21c04ee89a094032915c994e829f2cddc3 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 3 Mar 2026 15:58:55 +0000 Subject: [PATCH 20/25] fix: improve error handling in GitHub sync and optimize token storage --- .../github-sync/app/js/GitHubSyncController.js | 5 +++-- .../github-sync/app/js/GitHubSyncHandler.js | 7 ++++++- .../github-sync/app/src/GitHubSyncHandler.mjs | 18 ++++++++++++------ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/services/github-sync/app/js/GitHubSyncController.js b/services/github-sync/app/js/GitHubSyncController.js index 359eb5fdb1..19a98e8c6e 100644 --- a/services/github-sync/app/js/GitHubSyncController.js +++ b/services/github-sync/app/js/GitHubSyncController.js @@ -275,9 +275,10 @@ async function mergeToGitHubAndPushback(req, res, next) { return res.status(200).json({ message: 'Already up to date, no changes to sync' }) } } catch (err) { - res.status(500).json({ error: err.message }) + return res.status(500).json({ error: err.message }) } - res.status(200).json({ message: 'Merge to GitHub and push back process completed' }) + // Never reach here, but just in case + return res.status(200).json({ message: 'Merge to GitHub and push back process completed' }) } export default { diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index f48bc89a75..cff473565e 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -677,7 +677,12 @@ async function diffBranchsOnGitHub( if (!response.ok) { const errorData = await response.json().catch(() => ({})) logger.error('Failed to diff branches on GitHub', { repoFullName, baseBranch, compareBranch, error: errorData }) - return [] + + // treat 404 as no diff. + if (errorData.status === '404') { + return [] + } + throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) } const compareData = await response.json() return compareData.files || [] diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 0fe677c1e2..61a0be97c6 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -112,13 +112,19 @@ async function exchangeCodeForToken(code) { // Save the GitHub access token for a user, encrypted in the database async function saveGitHubAccessTokenForUser(userId, accessToken) { const tokenEncrypted = await SecretsHelper.encryptAccessToken(accessToken) - - let gitHubSyncUserCredentials = new GitHubSyncUserCredentials() - gitHubSyncUserCredentials.userId = userId - gitHubSyncUserCredentials.auth_token_encrypted = tokenEncrypted - // save tp database - await gitHubSyncUserCredentials.save() + await GitHubSyncUserCredentials.findOneAndUpdate( + { userId }, + { + $set: { auth_token_encrypted: tokenEncrypted }, + $setOnInsert: { userId }, + }, + { + upsert: true, + new: true, + setDefaultsOnInsert: true, + } + ) } // Save githubSyncProjectStates for a project From bc23e17936e0c19774fd7acdc0f160491bcc7411 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 3 Mar 2026 16:27:04 +0000 Subject: [PATCH 21/25] fix: filter non-blob items in generateRespURL and update token validity check in getUserGitHubStatus --- services/github-sync/app/js/GitHubSyncHandler.js | 1 + services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index cff473565e..73d09e440a 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -767,6 +767,7 @@ function generateRespURL(diff, tree, repoFullName, newSha) { const resp = [] const BaseURL = `${GITHUB_API_BASE}/repos/${repoFullName}/contents/` for (const item of tree) { + if (item.type !== 'blob') continue let obj = { name: item.path, } diff --git a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs index 61a0be97c6..b70cead5b0 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncHandler.mjs @@ -20,7 +20,7 @@ async function getUserGitHubStatus(userId) { // test if the token is still valid by making an API call to GitHub const token = await SecretsHelper.decryptAccessToken(credentials.auth_token_encrypted) try { - await GitHubApiClient.listRepos(token, { per_page: 1 }) + await GitHubApiClient.listRepos(token, 1, 1) // just list 1 repo to check token validity } catch (err) { logger.warn({ userId, err }, 'GitHub token invalid, treating as not connected') return { available: true, enabled: false } From b0c869ef67ffb097755f3853fbc14583b9b92d32 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Tue, 3 Mar 2026 16:51:09 +0000 Subject: [PATCH 22/25] fix: enhance validation for GitHub sync state and improve error handling --- .../app/src/GitHubSyncController.mjs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs index eca5b8864f..e20f3dfeae 100644 --- a/services/web/modules/github-sync/app/src/GitHubSyncController.mjs +++ b/services/web/modules/github-sync/app/src/GitHubSyncController.mjs @@ -246,7 +246,7 @@ async function getUnmergedCommits(req, res){ const { Project_id: projectId } = req.params const projectStatus = await GitHubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) - if (!projectStatus) { + if (!projectStatus?.enabled) { return res.status(400).json({ error: 'Project is not linked to a GitHub repository' }) } @@ -254,8 +254,12 @@ async function getUnmergedCommits(req, res){ const lastSyncSha = projectStatus.last_sync_sha const repo = projectStatus.repo const defaultBranch = projectStatus.default_branch - const crentials = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(ownerId) - if (!crentials) { + + if (!ownerId || !repo || !defaultBranch) { + return res.status(400).json({ error: 'Project GitHub sync state is invalid' }) + } + const credentials = await GitHubSyncHandler.promises.getGitHubAccessTokenForUser(ownerId) + if (!credentials) { return res.status(400).json({ error: 'GitHub credentials not found for project owner' }) } @@ -286,10 +290,13 @@ async function mergeFromGitHub(req, res){ } const projectStatus = await GitHubSyncHandler.promises.getProjectGitHubSyncStatus(projectId) - if (!projectStatus) { + if (!projectStatus?.enabled) { return res.status(400).json({ error: 'Project is not linked to a GitHub repository' }) } - const ownerId = projectStatus.ownerId + const { ownerId, repo, default_branch: defaultBranch } = projectStatus + if (!ownerId || !repo || !defaultBranch) { + return res.status(400).json({ error: 'Project GitHub sync state is invalid' }) + } try { const result = await GitHubSyncHandler.promises.syncProjectToGitHub( From 34f00137a32de3f0d9790c88482b5105aab96e38 Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 7 Mar 2026 15:10:36 +0000 Subject: [PATCH 23/25] fix: update OLModal properties to disable initialFocus --- .../frontend/js/components/github-integration-card.tsx | 2 +- .../github-sync/frontend/js/components/github-sync-button.tsx | 2 +- .../github-sync/frontend/js/components/github-sync-widget.tsx | 3 ++- .../js/components/import-from-github-modal-wrapper.tsx | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx index 567d60e102..6584c4271f 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-integration-card.tsx @@ -697,7 +697,7 @@ function GitHubSyncModal({ }, [show]) return ( - + {t('github_sync')} diff --git a/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx b/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx index a7f592b15d..de6c46dd3a 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-sync-button.tsx @@ -224,7 +224,7 @@ export default function GitHubSyncButton() { {t('github_sync', { defaultValue: 'GitHub' })} - setShowModal(false)} size="lg"> + setShowModal(false)} size="lg" backdrop="static" initialFocus={false}> {t('github_sync_title', { defaultValue: 'GitHub Sync' })} diff --git a/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx b/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx index 1883c2264e..19b32b47bf 100644 --- a/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx +++ b/services/web/modules/github-sync/frontend/js/components/github-sync-widget.tsx @@ -115,9 +115,10 @@ export default function GitHubSyncWidget() { {/* Disconnect Confirmation Modal */} - setShowDisconnectModal(false)} + backdrop="static" initialFocus={false} enforceFocus={false} > diff --git a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx index d3c4c7e965..0064fca9a6 100644 --- a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx +++ b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx @@ -160,7 +160,7 @@ export default function ImportFromGitHubModal({ onHide }: ImportFromGitHubModalP // backdrop="static" can prevent the modal from being closed by // clicking outside of it return ( - + {t('import_from_github')} From be50d34cb17b750a2705cffb41ef7cfa633cfb8a Mon Sep 17 00:00:00 2001 From: Musicminion Date: Sat, 7 Mar 2026 15:32:25 +0000 Subject: [PATCH 24/25] fix: enhance error handling for GitHub branch diffing by checking response status --- services/github-sync/app/js/GitHubSyncHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/github-sync/app/js/GitHubSyncHandler.js b/services/github-sync/app/js/GitHubSyncHandler.js index 73d09e440a..6c56b42d91 100644 --- a/services/github-sync/app/js/GitHubSyncHandler.js +++ b/services/github-sync/app/js/GitHubSyncHandler.js @@ -679,7 +679,7 @@ async function diffBranchsOnGitHub( logger.error('Failed to diff branches on GitHub', { repoFullName, baseBranch, compareBranch, error: errorData }) // treat 404 as no diff. - if (errorData.status === '404') { + if (errorData.status === '404' || response.status === 404) { return [] } throw new Error(`GitHub API error: ${errorData.message || response.statusText}`) From 8745430bb5247bbbe18ca3281cd6a91d645328de Mon Sep 17 00:00:00 2001 From: zhangziqian Date: Sun, 8 Mar 2026 14:02:03 +0800 Subject: [PATCH 25/25] Add Star History section to README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f05c571ff6..cad1d86b54 100644 --- a/README.md +++ b/README.md @@ -97,3 +97,7 @@ Please see the [CONTRIBUTING](CONTRIBUTING.md) file for information on contribut The code in this repository is released under the GNU AFFERO GENERAL PUBLIC LICENSE, version 3. A copy can be found in the [`LICENSE`](LICENSE) file. Copyright (c) Overleaf, 2014-2025. + +## Star History + +[![Star History Chart](https://api.star-history.com/image?repos=ayaka-notes/overleaf-pro&type=timeline&legend=top-left)](https://www.star-history.com/?repos=ayaka-notes%2Foverleaf-pro&type=timeline&legend=top-left)