* Ensure track changes is enabled for reviewers when switching roles
* update track_changes.${userId} if track_changes is an object
GitOrigin-RevId: 3e803f4d475dbb67ff85b30095307ea58a07b2bc
* Allow providers to be overridden in ReactContextRoot
* Use ReactContextRoot in EditorProviders
* Use ReactContextRoot in ScopeDecorator
GitOrigin-RevId: bb6dab91f3fca843d7563ed812c4ea6f56fb28bb
* make the global seat picker wider to avoid the English label wrapping
* make the plans table take up most of the page
* fixes borders on plans table
GitOrigin-RevId: facd30a860cf270ffbe80052e6fe449201fb9aaa
* Hide the "DS nav" survey for users on the default variant
* Create and use `SurveyWidgetDsNav`
* Add link to SurveyWidgetDsNav button
* Revert SurveyNotification changes in the DS Nav mobile view
* Hide DS nav survey via JS rather than CSS
* Remove survey card in DS nav project dashboard mobile view in the short term
* Change sr-only to visually-hidden
* Fix typo
---------
Co-authored-by: Tim Down <158919+timdown@users.noreply.github.com>
GitOrigin-RevId: 6ff91637bcc8ad29c383627c7218f644a7b19d75
* hide discounts
* show updated large groups upsell
* show group member picker
* expand educational discounts to all group plans
* add spacing above group plan prices
* change contact modal trigger to contact sales link
* add dropdown treatment to group tab improvement default treatment
GitOrigin-RevId: 690763361672e248c21198741d8870569411c8c1
* Use Phosphor icon for navigation close
* Add carets from Phosphor
* Remove CaretUp when expanded (not in design)
* Revert "Remove CaretUp when expanded (not in design)"
This reverts commit 242f295ea18a73aae0e2cf5d2cf0dc1e610dbef9.
* Fixup: Hide the default caret in the desktop view too
* Fixup format after merge
GitOrigin-RevId: 6781028dd50922a017ef2b76fe91c4ff611dd77c
* Replace "scroll-shadow" by "scroll-borders" in the sidebar
* Set invisible borders to prevent "jumps"
GitOrigin-RevId: b73ec532f28627d1c55dd64cbfabec8a2efb08b2
* Reapply "[web] Update navigation events (navbar menu, new project) (#22473)"
This reverts commit 134809f73c57d3f019e8158243e1fc74f9f6540a.
* Set the analytics event on the links, not the small contained span (pug)
* Fixup `menu-click` events in pug files: use `trackingKey`, correct event name, ...
* Add `location` prop in NavDropdownMenuItems and ContactUsItem, because they're used in the sidebar too
GitOrigin-RevId: 0bb95f69182268c34929f51121f2d5a2b19c4692
[web] CMS - Add support for rendering `Layout | Tab Group` as a linkable list instead of tabs
GitOrigin-RevId: f86e78abd10029085ee8cdf4ffc7dd6e0ffd5300
Always apply overall dark theme with IEEE-branded editor and tear down ieee-stylesheet feature flag, second attempt
GitOrigin-RevId: 311d125a77a46ee3f34769064005b6edea7ce013
* Use icons from `@phosphor-icons/react`
https://phosphoricons.com/
* Add the phosphor Plus icon to the tag list
* Add SignOut icon
* Use Phosphor icon for tags
* Fix icon color when active
* Add offset to dropdown menus so they're positioned like in Figma
---------
Co-authored-by: Tim Down <158919+timdown@users.noreply.github.com>
GitOrigin-RevId: 039e98063d775d0348d227202d5ecd6a0bfb7b65
[web] BS5 login page - Add sufficient spacing to prevent cookie banner from covering the bottom text on mobile
GitOrigin-RevId: e5024cf124387b2670211cee8d28ef5e6b4fc85f
[web] Set all link inside notification to use the default blue color for all website-redesigned non-application page
GitOrigin-RevId: d5e598f7b02ff132d9686a010ff55541346f7d2e
* Footer tweaks (add border, main-content 100vh)
* Update color to be the same as the sidebar `<hr>`
* Move the border to the larger div so it also separates with the navbar
* Update border color to be the same as the background
* Fixup lint
* Fixup main content padding on mobile view
See https://github.com/overleaf/internal/pull/22186#discussion_r1876087478
* Change the border color to neutral-20
* Use `--border-divider` which is the same color as --neutral-20 (`#e7e9ee`)
* Replace `@media (width >= 768px)` by `@include media-breakpoint-up(md)`
* Replace `min-height: 100dvh` by `min-height: 100%`
GitOrigin-RevId: 426869e9b96a1ee8245c487bb80ff01856521a34
* Control if nav items are shown with CSS instead of JS
* Fix navbar style for mobile view
* Update navbar toggle icon to close
* Hide "Projects" nav item from the navbar
* Add separator above the Help menuitem in the mobile navbar
* Adjust sidebar padding: 24px from the logo
GitOrigin-RevId: ba587645f56febc0da798269bd6aa8c2e1639c27
Revert "Always apply overall dark theme with IEEE-branded editor and tear down ieee-stylesheet feature flag"
GitOrigin-RevId: 223b4816b02ba96212ea7e779e16770cd4f16949
Always apply overall dark theme with IEEE-branded editor and tear down ieee-stylesheet feature flag
GitOrigin-RevId: 80d10a911f3a188867db9b825f3ae8413f555b64
* Remove padding around the footer
* Use CSS container queries instead of media queries on the full window
Container queries are supported by 92.76% of web users, which can be an issue.
https://caniuse.com/css-container-queries
Though we do use them in other places
* Use `@supports` to check if `@container` can be used and use mixins
* Add the max sidebar width the fallback media query
* Update the footer responsiveness so we don't affect the default variant
GitOrigin-RevId: bed3e4244f1a97fd84740dcf87fb27c760be91ad
* Add sidebar icons and menus (Help, Account)
* Place the account dropdown menu above the tooltip
* Hide tooltip when dropdown menu is shown
* Fixup tooltip position
* Add Digital Science link
* Add aria-labels on the dropdown toggles
* Update sidebar items spacings
- Add space between notification and DS icons
- Balance margin/padding in the scrollable part
* Revert changing the side of .dev-tool-bar-open-button
* Remove `!important` in link color
* Add Help tooltip
* Revert dropdown-menu z-index change
* Move `AccountMenuItems` to its own file
* Revert "Remove `!important` in link color"
This reverts commit b2de83f815d05cd1e224604d4ca355986ba76b99.
GitOrigin-RevId: 286266ea5348384f2592f748d3ae32c452558988
* Move some SCSS to project-list-default.scss
* Update project-list-ds-nav.tsx to match design and simplify the SCSS
* Fix survey-notification style: light on the sidebar, dark on the main content
* Replace `withHr` by `useSplitTestContext` hook
* Override the `navbar-btn-padding-h` override.
* Fixup main content padding
Co-authored-by: Tim Down <tim.down@overleaf.com>
* Add padding-top to the logo
* Fixup merges
Add changes from https://github.com/overleaf/internal/pull/22272
---------
Co-authored-by: Tim Down <tim.down@overleaf.com>
GitOrigin-RevId: 8dbc449afbf70388bcf3185413b35234acaad349
* PoC DS nav project page shell
* Rename files: use `ds-nav` as a suffix
(really just moving code without changes)
* Update NavBar to the new design
* Small updates to project-list-ds-nav.tsx so it gets its basic shape
* Nest `.survey-notification` and `.project-list-sidebar-survey-wrapper` in the default classes to avoid interferences
* Create `SidebarDsNav`
* Add props to sidebar components so they work in both versions
* Update the SCSS code for the sidebar redesign
* Update subheader to "Organize Tags"
* Mute add affiliation font
* Remove `<aside className="project-list-sidebar-react">` and add sidebar max/min widths
* Fixup buttons padding
* Fix tests: add SplitTestProvider
* Fixup sidebar scroll div: add `flex: 1 1 auto`
* Make "Uncategorized" italic
* Update logo to SVG
* Optimize the svg
https://jakearchibald.github.io/svgomg/
9.12k → 4.92k 53.91%
---------
Co-authored-by: Tim Down <158919+timdown@users.noreply.github.com>
GitOrigin-RevId: 3d08b4b80291d9465fae87ffdf0c6a9f6deda554
* Support for adding reviewer role
* added collaboratorsGetter tests
* emit toggle-track-changes when reviewer is added
* Add reviewer in change privilege level handler
GitOrigin-RevId: 88ec39f2b760b5d1ca6dc3a363df31c087268972
* Support for adding reviewer role
* added collaboratorsGetter tests
* emit toggle-track-changes when reviewer is added
* List projects where user is added as reviewer
GitOrigin-RevId: 8ec9e59e4c0b65167705b0a56be3e309ef6af3e7
* Support for adding reviewer role
* added collaboratorsGetter tests
* emit toggle-track-changes when reviewer is added
* Add reviewer in change privilege level handler
GitOrigin-RevId: 6a03d2355b3fb7d7b755ed1d3ab1a080126cd2dc
* Support for adding reviewer role
* show reviewer in track changes user list
* added "review" in assertClientCanViewProject
* test if reviewer can read project
* added collaboratorsGetter tests
* eit toggle-track-changes when track changes changes
* [real-time] ensure tc is enabled when reviewer role is used
* use assertClientCanReviewProjectAndDoc, refactor _assertClientCanApplyUpdate
GitOrigin-RevId: 158bd1ff0d4b4977da950134f8ad8b3740855290
* Support for adding reviewer role
* added collaboratorsGetter tests
* emit toggle-track-changes when reviewer is added
GitOrigin-RevId: 5b831102d561f5dbc4b23ab9f6dc63e3a87ea103
* Avoid obscuring text with "Add comment" tooltip when selecting entire line
* tooltip position change on direction of selection
GitOrigin-RevId: d8cd301091104dae2422e34e14f90afd4c0927c4
* Support for adding reviewer role
* show reviewer in track changes user list
* added "review" in assertClientCanViewProject
* test if reviewer can read project
* added collaboratorsGetter tests
* eit toggle-track-changes when track changes changes
* Support for changing privilege to reviewers for invited users (#22159)
* Add reviewer in change privilege level handler
* added reviewer translation
* added acceptance tests
* fix tests
* Set track changes state permissions for reviewer role (#22167)
* Add reviewer in change privilege level handler
* added reviewer translation
* added acceptance tests
* fix tests
* Set track changes state permissions for reviewer role
* added authorization helper tests
* added ensureUserCanReviewProjectContent middleware
* allow changing track changes only with write permissions
* removed canUserReviewProjectContent
* List projects where user is added as a reviewer (#22249)
* List projects where user is added as reviewer
* list projects in /user/projects
* fix tests
GitOrigin-RevId: 54064a7f961fe06f188ab449cd469cdaaf01b20a
* Remove bad prop "divider" in DropdownDivider
* Reduce line height in log-entry-content-raw
Per https://digital-science.slack.com/archives/C05JM5NTHUP/p1732704056729519
* Decrease `pre` line-height to `--line-height-01` (body-xs)
GitOrigin-RevId: 584ba587d1fc3b8964b96722a6e72efc9fea1059
[web] Change `Credit card` text to `Card payment` to follow the default variant of the checkout page
GitOrigin-RevId: c425cb49bc227e7834ee13c5b4155b6fda530e1f
* Add a default 30s timeout for `delayShutdownMs`
`settings.delayShutdownMs` doesn't seem to be defined anywhere
Logs typically often this pair of entries:
```
INFO 2024-11-21T15:51:42.115Z [resource.labels.containerName: filestore] received interrupt, cleaning up
INFO 2024-11-21T15:51:42.120Z [resource.labels.containerName: filestore] shutdown timed out, exiting
```
This indicates that there is no delay between the interrupt signal and the shutdown. The 100ms delay also doesn't happen. We believe that the `server.close` callback is called after `server.closeAllConnections()`, and the `server closed` log is usually lost because of the process exiting immediately.
See: https://cloudlogging.app.goo.gl/WJQ6mc3gWwotVQya7
* Add timeout before exiting
* Replace `delayShutdownMs` by `gracefulShutdownDelayInMs`.
Looks like the error came from a wrong merge in https://github.com/overleaf/internal/pull/18756
We don't want a default 30s timeout for the shutdown, per https://github.com/overleaf/internal/pull/16888
GitOrigin-RevId: c1bdc8986f78a6e18e8b8b1fe60b33aa6ffef909
* Hide `PdfLogEntryContent` when there is no content
* Fixup in search "count": `--ol-blue-gray-4` doesn't exist in SCSS
* Update `AiErrorAssistant` with a `shouldRender` export, allowing to hide the element from the caller
* Revert "Update `AiErrorAssistant` with a `shouldRender` export, allowing to hide the element from the caller"
This reverts commit 01812fa2b108b94c99d250c9a39e4f3c41b36781.
* Hide .log-entry-content when empty, using CSS
Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>
---------
Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>
GitOrigin-RevId: c5096b362600058535bd645cf11dad255e941fb9
* Remove `BootstrapVersionSwitcher`
* Remove `bsVersion`
* Remove `bootstrap-5-project-dashboard` from code
* Fix frontend test
* Fixup classname `"me-auto"`
Co-authored-by: Tim Down <tim.down@overleaf.com>
* Rename `handleClickBS5` to `handleClick`
Co-authored-by: Tim Down <tim.down@overleaf.com>
* Remove `bs3Props` from `project-list/components`
* Remove translation: `joining`
* Set `isBootstrap5()` to true in test, and update
---------
Co-authored-by: Tim Down <tim.down@overleaf.com>
GitOrigin-RevId: 94005bc8636c9235253758b8ac18a732ee1dbd77
* Fixed "Add comment" tooltip if cursor is out of viewport
* account for cm-line padding when calulation tooltip pos
GitOrigin-RevId: f4b69a3bf83dd15c0304bfd6b37f3be8b07cd727
* Update TPR promotions to BS5
* Remove unused class names
* Add responsive visibility in BS5
* Fix `OLFormControl` as `OLFormSelect`
With this update, it fixes the Select when importing from Mendeley or Zotero, in BS3 and BS5
* Use spacing variables in SCSS
GitOrigin-RevId: 8dd0e52a1674114bb3dc38fc4e3958a9c17ad5ac
* Update manage template modal to BS5
* Update `ManageTemplateButton` to BS5
* Update `OLFormControl` prop types so it has its `as` props
* Update `LeftMenuButton` to BS5
* Fixup linting
* Update `ManageTemplateModalBody` style:
* Bold label
* Correct rows in BS3
* Set spinner color to `text-muted` instead of blue
* `npm run format:fix`
GitOrigin-RevId: c5311e4786b2859a8b7cf567d19cd3d7614dd3db
* Add Story for `PdfCompileButton`
* Set the CompileButton height so it's similar to BS3
* Add the CompileButton animations
* Remove `sm` from CompileButton: makes font size bigger
* Use MaterialIcon in compile-button dropdown-toggle
* Use MaterialIcon in LayoutDropdown
* Fix stripe alignment on Recompile button
* Set padding around dropdown caret
Per Alexandru's instructions
* Prevent border from disappearing on hover
* Set the padding of the compile button even on both sides
Before: left 12px, right 16px;
After: left 16px, right 16px;
* Change px values to spacing var
* Add some button classes for BS5 only
* Don't render the hidden "Compiling…" in BS5, it changes the button width
* Prevent `loading="[object Object]"` in the DOM
Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
---------
Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
GitOrigin-RevId: 34f1eed03e63f3459243a37c878612a623f321f8
* Promisify clear_sessions_set_must_reconfirm.mjs
* Add test on PasswordResetTests.mjs
* Add `must-reset-password-unset` audit log
* Add `must-reset-password-set` audit log
* Add test ClearSessionsSetMustReconfirmTests.mjs
* Fixup bad copy-paste in test: `must-reset-password-set` -> `must-reset-password-unset`
* Check `must_reconfirm` before calling `removeReconfirmFlag`
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
* Fix unit test
* Use `promiseMapWithLimit`
* Add `{ script: true }` to AuditLog. Also use `undefined` instead of `null` for consistency
---------
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 522026c82196d263c196503d899b8c57b05b31dd
* Add showGenericConfirmModal in ModalsContext
* Add confirm modal on accept/reject selected changes
* plural in translations
* change tooltip to include selected changes
* add _plural to all translated languages
* lowercase title/tooltip
* count replacements as single change
* use new translation key
GitOrigin-RevId: afadbe1eeb2a290688b96f2b5388485f40c958d0
* Move group SSO enabled check up
So that we have this available when managed users is enabled. This will be useful in the following commit.
* Notify support when subscription deletion skipped
* Fix rebase conflicts
---------
Co-authored-by: mserranom <mserranom@gmail.com>
GitOrigin-RevId: 8a4abe0742ab6a1c6b15bb17b5cc4863a11010b2
* Sync package-lock
I get this change when running `make install && bin/npm i`
* Add `featureUsage` to LoggedOutUser keys
We might want to change this to something like this:
```
export type NullifyProperties<T> = {
[P in keyof T]: undefined
}
export type LoggedOutUser = {
id: null
} & NullifyProperties<Omit<User, 'id'>>
```
* Revert "Sync package-lock"
This reverts commit 982466eba3f8d72a388d248b66658be0350b2d09.
* Remove `canceledSubscription` types for now
This is breaking the build at the moment. We can work on creating a `Request` that matches our usages of it
GitOrigin-RevId: bb21baba6a074c2169af786a9e56b33beddddd2f
* Add `unicorn/prefer-node-protocol`
* Fix `unicorn/prefer-node-protocol` ESLint errors
* Run `npm run format:fix`
* Add sandboxed-module sourceTransformers in mocha setups
Fix `no such file or directory, open 'node:fs'` in `sandboxed-module`
* Remove `node:` in the SandboxedModule requires
* Fix new linting errors with `node:`
GitOrigin-RevId: 68f6e31e2191fcff4cb8058dd0a6914c14f59926
[web] Add `device` and `screen-breakpoint` segmentation to all gallery-related page view events
GitOrigin-RevId: 36cfb5c5d183645782efe8c66c09f476d5474253
* Split `SpellingSuggestions` into a BS3 and BS5 version
* Migrate `B5SpellingSuggestions` to BS5
* Add `.dropdown-menu.dropdown-menu-unpositioned` styles
This makes the dropdown position itself without overflows
* Make spelling tooltip background transparent
* Migrate Cog icon to BS5
* Use `PolymorphicComponent`
Co-authored-by: Ilkin Ismailov <ilkin.ismailov@overleaf.com>
* Fix formatting
---------
Co-authored-by: Ilkin Ismailov <ilkin.ismailov@overleaf.com>
GitOrigin-RevId: aaa6c589637971031d13ac099f935fe2052e6989
[web] Add missing `countryCode` in new-design plans page and all variants of the interstitial payment page
GitOrigin-RevId: e3a410e89a6745d042f9747a01960618eb622733
Proposal: Add promise interface for attaching module hooks and switch methods to be "Promise-first"
GitOrigin-RevId: 6740c18b75ebca79c24aa8b9867c8127b381b695
* [storybook] Rerender when switching BS version
* Move comment to related code (bsStyle)
* Wrap the Layout MenuItem "subdued" text, using flex-column
* Create a Story for `LayoutDropdownButton`
* Center `.layout-dropdown .dropdown-item` vertically
* Remove unused classname `layout-dropdown-list`
* [storybook] Allow `detachable` to be passed as a prop
* Migrate `DetachDisabled` to BS5
* [storybook] Set actions for `^handle.*`, rename story
GitOrigin-RevId: 18509d259fad02a8aeb52132f1919e216b092b7e
* Update ide-react-detached.pug for BS5
* Place the Recompile button tooltip to the bottom when in Detached layout
GitOrigin-RevId: 02dd23d38314e40585a435095b05231c8edd6849
* adding flex-wrap to avoid overlapping of the buttons
* renaming classes to avoid modifying col-md-12 properties
GitOrigin-RevId: d000bd3c0b5be15f526ccbd1699cfe5679c0ddec
[web] Adjust the styling of the navigation filter on devices with a small screen width on gallery page
GitOrigin-RevId: a404293a030aa60f2261ad2219bc7e55d885f042
[web] Standardize `.badge` styling and HTML structure for both gallery-search and blog post page
GitOrigin-RevId: edfaceb61900897178654a920995e5c857fe7107
* Scroll selection anchor into view when adding new comment
* check if cursor is near viewport edge
* Show "add comment" tooltip below cursor if near viewport top
GitOrigin-RevId: 0dc2234bc03b1d88a3719ba01a4a865f218b9bfa
* Return focus to parent entry element after message is edited
* Revert "Return focus to parent entry element after message is edited"
This reverts commit 96234a666e7e7c17b99a23a8a92ea030efe6083f.
* Manually force blur on submitting an edited message
* Show review panel entry header when editing comment (#21397)
* Show review panel entry header when editing comment
* edit comment spacing
* hide comment options when editing
---------
Co-authored-by: Domagoj Kriskovic <dom.kriskovic@overleaf.com>
GitOrigin-RevId: 66a8d1ed772cf91ea0f086bd08cdabaeb7456956
* Disable drop-shadow on review panel entry when collapsed
* use existing .review-panel-mini class
GitOrigin-RevId: 18428f37a7d048b8a63c5eaf6bf232f4cc5009b5
* Scroll selection anchor into view when adding new comment
* check if cursor is near viewport edge
GitOrigin-RevId: 57d4195f7ce1513a56249365b45b3959b4ea813f
* Adding max width for gallery-summary
* changin card background color
* removing row from within the card
* matching the padding of gray card with figma design
* removing row and spaced row to avoid extra padding and adding doc-rows-container
* adding grid for templates and removing some old styling
* adding .recent-templates-container to add the padding and margins
* deleting a comment and adding img border radius for the thumbnail
* adding margin-bottom on recent-templates-container
* adding .gallery-tagged-title-container to match the figma padding and then a fix was needed for the width of the filters
* renaming gallery-tagged-title-container to gallery-tagged-container-spacing and re-using it for Related tags container
* making recent heading as heading-xl to match figma
* adding badge styling and its container styling via .gallery-tagged-template-tags-container
* making two classes out of this class .gallery-tagged-container-spacing to add the styling for the h2 heading
* adding margin-bottom to match figma style
* making class generic and using it at multiple places
* removing some extra code
* removing grid styling because after rebase the layout was fixed with col classes
* adding rows back
* adding h2 instead of h3 and making them heading-xl
* adapting some changes after merge conflicts
* removing duplicate classname after rebase
GitOrigin-RevId: d02a0b1e2784fd96d2af2326700829879dacc464
* adding .gallery at top level
* adding styling for heading and buttons
* removing padding under cta-links
* removing find more templates text
* adding field title styling
* adding .details-container for spacing between the content
* adding a colon after field-title
* moving tags styling into badge.scss file to make it more generic to use
* moving section tag one level below to use it as a flex containe for adding gap property
* adding field-description class
* fixing the image width
* adding some padding between the content
* renaming a file to a more descriptive name
* adding .gallery-abstract class in the scss file
* adding colons in pug file
* adding previous-page-link and its container class
* moving paddings to larger screens only and adding a top margin for mobile screens]
* adding some spacing above tags on mobile view when heading and tags are vertically aligned
* adding styling to the badge and removing extra padding from h1 to match figma
* lint:fix
* swapping position of top-pick and official badges
* adding path and itemPlural
* removing unused top margin
GitOrigin-RevId: a5c9b731b69ecfe2b752015c410e10a0fec2c704
* Revert "Add isUsingNewReviewPanel flag for writefull (#21111)"
This reverts commit 3491e93ca70fa1db0c751872e233dfebdbe81423.
* add usingNewReviewPanel in store
* fix lint error
GitOrigin-RevId: 56d90a428a2cc45708b8b483dc60a62aae233a85
* [storybook] Rerender story when switching BS3/BS5
* [storybook] Add SCSS loader to storybook
* [storybook] Add some AI error assistant stories
* Rename ai-error-assistant.less to .scss
* Update less variables to sass
* Remove duplicated selector
* Replace react-bootstrap components by `OL...`
* Update Checkboxes after BS5 update
* Add IDs so clicking on labels work
* Add BS5 class name in SCSS
Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio
* Rename ID `answer-not-detailed` -> `answer-not-best-fix`
* Pass name and value to BS3Radio/BS3Checkbox
* [storybook] Add delay before AI suggestion (shows the animation)
* Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed
Without this, clicks on second form are updating the first form!
Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/
* [storybook] Update `LabsAiPromoBanner`
* Use CSS variables instead of hardcoded values
* Make radio input flex
* Replace `blue-10` by `bg-info-03`
* Fix `SuggestFixButton`
* Fix `AiErrorAssistantCopyCode`
* Fix button loading in BS5
* Use OLBadge
* Fix Button variants
* Update `suggestFixAction`
* Migrate Tooltip and Button to BS5 in LabsExperimentWidget
* Update BS3/BS5 button classname in AiErrorAssistantCopyCode
Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
* [storybook] Allow to choose props of `LabsExperimentWidget`
* Fixup `OLTooltip`: Display the tooltip on disabled button in BS5
* Update Tooltips to BS5
---------
Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
* [web] Migrate Logs components JSX to Bootstrap 5
* [web] Migrate logs.less to logs.scss
* [web] Remove unused class names
* [storybook] Define default Bootstrap version in Storybook
This prevents some warning in the console
* [storybook] Update pdf-preview.stories.jsx
* [storybook] Add pdf-log-entry.stories.tsx
* [storybook] Force re-renders when switching BS version
* [web] Keep files dropdown menu in bounds
* [web] Make files dropdown items not bold in BS5
* [web] Revert unrelated change
* [web] Fixup PreviewLogsPaneMaxEntries
* [web] Add style for log-entry-content-link
* [web] Replace log-entry by OLNotification in `PdfCodeCheckFailedNotice`
* [web] Use `BootstrapVersionSwitcher` instead of `isBootstrap5`
* [web] Rename `DropdownBS3` to `BS3Dropdown`
* [web] Reuse variables for `toolbar-height` and `toolbar-small-height`
* [web] Set `id` on `DropdownToggle` not `Dropdown`
* [web] Set `log-entry-btn-expand-collapse` in BS3 only
* [web] Remove `block: true` from StartFreeTrialButton in BS3
* [web] Remove unnecessary CSS in `.log-entry-header-link`
* [web] Use semantic color names
* Migrate the downloadable pdf file list to Bootstrap 5
* Remove nested BootstrapVersionSwitcher, fix "key" prop
* Update roles to: `<li role="menuitem">` `<a role="link">`
* Update `log-entry-header-link`: variant ghost and fix colors
---------
Co-authored-by: Rebeka <o.dekany@gmail.com>
GitOrigin-RevId: 89848970ab5d8a8c135335386caf24363f69a34c
They are duplicated by:
* services/web/frontend/js/features/ide-react/components/history.tsx
* services/web/frontend/js/features/ide-react/components/history-root.tsx
GitOrigin-RevId: c3f13ea9016530182ae623b06e91a9fdb2be7a87
[web] Make sure gallery (tagged and non-tagged) page only have a single `.container` on each page
GitOrigin-RevId: df5272082a7f74dcc4051560692eaf715b49dc37
* Reapply "Remove spell check languages that are only available on the server (#21056)"
This reverts commit a2273a5ff2eeb5660ae992c41e67b7b936dc4e26.
GitOrigin-RevId: 2dfdf87acdf17db894e921fe754c1520df6f01c1
* [web] Set Subscription pages to have `layout-react`
* [web] import `header-footer-react` in Subscription pages (!!)
* [web] Add `ol-user` meta tag to the subscription pages (!!)
⚠️ invite_logged_out.pug should be updated instead of setting the user as `{}`
* [web] Fix unit test
* [web] Update User types to handle a logged out user, add `LOGGED_OUT_USER` const
* [web] Add type `User` to `getSessionUser`
* [web] Remove `LOGGED_OUT_USER` const
* [web] Just pass `{ id: null }` as the user
* [web] Remove comment in pugs, it breaks things
* [web] Don't pass the full user to the frontend!!!
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
---------
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 1768f1f13de924a18be43c1a08614000500dcbec
[web] Add border-radius to every image inside .blog-content (blog post page) and `.blog-content-preview` (blog list page)
GitOrigin-RevId: 6f805513504b1e4468862018e6f62070a8adcfe0
* copying the styling from about.less into about.scss
* adding closest spacing available in BS5
GitOrigin-RevId: c4470ab1972762a025a42d581a6dee3c28ba7e2d
@@ -14,6 +14,8 @@ When submitting an issue please describe the issue as clearly as possible, inclu
reproduce the bug, which situations it appears in, what you expected to happen, and what actually happens.
If you can include a screenshot for front end issues that is very helpful.
**Note**: If you are using [www.overleaf.com](www.overleaf.com) and have a problem, or if you would like to request a new feature, please contact the Support team at support@overleaf.com. Raise an issue here only to report bugs in the Community Edition release of Overleaf.
Pull Requests
-------------
@@ -34,7 +36,7 @@ Please see [our security policy](https://github.com/overleaf/overleaf/security/p
Contributor License Agreement
-----------------------------
Before we can accept any contributions of code, we need you to agree to our
Before we can accept any contributions of code, we need you to agree to our
<img src="doc/screenshot.png" alt="A screenshot of a project being edited in Overleaf Community Edition">
<img src="doc/screenshot.png" alt="A screenshot of a project being edited in Overleaf Extended Community Edition">
<p align="center">
Figure 1: A screenshot of a project being edited in Overleaf Community Edition.
Figure 1: A screenshot of a project being edited in Overleaf Extended Community Edition.
</p>
## 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.
[Overleaf](https://www.overleaf.com) is an open-source online real-time collaborative LaTeX editor. Overleaf runs 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.
## Extended Community Edition
The present "extended" version of Overleaf CE includes:
- Sandboxed Compiles with TeX Live image selection
- LDAP authentication
- SAML authentication
- OpenID Connect authentication
- Real-time track changes and comments
- Autocomplete of reference keys
- Symbol Palette
## Enterprise
If you want help installing and maintaining Overleaf in your lab or workplace, we offer an officially supported version called [Overleaf Server Pro](https://www.overleaf.com/for/enterprises). It also includes more features for security (SSO with LDAP or SAML), administration and collaboration (e.g. tracked changes). [Find out more!](https://www.overleaf.com/for/enterprises)
## Keeping up to date
Sign up to the [mailing list](https://mailchi.mp/overleaf.com/community-edition-and-server-pro) to get updates on Overleaf releases and development.
If you want help installing and maintaining Overleaf in your lab or workplace, Overleaf offers an officially supported version called [Overleaf Server Pro](https://www.overleaf.com/for/enterprises).
## Installation
We have detailed installation instructions in the [Overleaf Toolkit](https://github.com/overleaf/toolkit/).
Detailed installation instructions can be found in the [Overleaf Toolkit](https://github.com/overleaf/toolkit/).
To run a custom image, add a file named docker-compose.override.yml with the following or similar content into the `overleaf-toolkit/config directory`:
## Upgrading
```yml
---
version:'2.2'
services:
sharelatex:
image:sharelatex/sharelatex:ext-ce
volumes:
- ../config/certs:/overleaf/certs
```
Here, the attached volume provides convenient access for the container to the certificates needed for SAML or LDAP authentication.
If you are upgrading from a previous version of Overleaf, please see the [Release Notes section on the Wiki](https://github.com/overleaf/overleaf/wiki#release-notes) for all of the versions between your current version and the version you are upgrading to.
If you want to build a Docker image of the extended CE based on the upstream v5.3.1 codebase, you can check out the corresponding tag by running:
```
git checkout v5.3.1-ext-v1
```
After building the image, switch to the latest state of the repository and check the `server-ce/hotfix` directory. If a subdirectory matching your version (e.g., `5.3.1`) exists, build a patched image.
Alternatively, you can download a prebuilt image from Docker Hub:
```
docker pull overleafcep/sharelatex:5.3.1-ext-v1
```
Make sure to update the image name in overleaf-toolkit/config/docker-compose.override.yml accordingly.
## Sandboxed Compiles
To enable sandboxed compiles (also known as "Sibling containers"), set the following configuration options in `overleaf-toolkit/config/overleaf.rc`:
```
SERVER_PRO=true
SIBLING_CONTAINERS_ENABLED=true
```
The following environment variables are used to specify which TeX Live images to use for sandboxed compiles:
-`ALL_TEX_LIVE_DOCKER_IMAGES`**(required)**
* A comma-separated list of TeX Live images to use. These images will be downloaded or updated.
To skip downloading the images, set `SIBLING_CONTAINERS_PULL=false` in `config/overleaf.rc`.
-`ALL_TEX_LIVE_DOCKER_IMAGE_NAMES`
* A comma-separated list of friendly names for the images. If omitted, the version name will be used (e.g., `latest-full`).
-`TEX_LIVE_DOCKER_IMAGE`**(required)**
* The default TeX Live image that will be used for compiling new projects. The environment variable `ALL_TEX_LIVE_DOCKER_IMAGES` must include this image.
Users can select the image for their project in the project menu.
Here is an example where the default TeX Live image is `latest-full` from Docker Hub, but the `TL2023-historic` image can be used for older projects:
The following authentication methods are supported: local authentication, LDAP authentication, SAML authentication,
and OpenID Connect (OIDC) authentication. Local authentication is always active. The environment variable `EXTERNAL_AUTH`
specifies which external authentication methods are activated. The value of this variable is a list. If the list includes `ldap`, `saml`, or `oidc`,
then LDAP authentication, SAML authentication, and OIDC authentication will be activated, respectively.
For example: `EXTERNAL_AUTH=ldap saml oidc`
This configuration activates all available authentication methods, although this is rarely necessary.
<details>
<summary><h3>Local Authentication</h3></summary>
Password of local users stored in the MongoDB database. An admin user can create a new local user. For details, visit the
[wiki of Overleaf project](https://github.com/overleaf/overleaf/wiki/Creating-and-managing-users).
It is possible to enforce password restrictions on local users:
*`OVERLEAF_PASSWORD_VALIDATION_MIN_LENGTH`: The minimum length required
*`OVERLEAF_PASSWORD_VALIDATION_MAX_LENGTH`: The maximum length allowed
*`OVERLEAF_PASSWORD_VALIDATION_PATTERN`: is used to validate password strength
-`abc123`– password requires 3 letters and 3 numbers and be at least 6 characters long
-`aA`– password requires lower and uppercase letters and be at least 2 characters long
-`ab$3`– it must contain letters, digits and symbols and be at least 4 characters long
- There are 4 groups of characters: letters, UPPERcase letters, digits, symbols. Anything that is neither a letter nor a digit is considered to be a symbol.
</details>
<details>
<summary><h3>LDAP Authentication</h3></summary>
Internally, Overleaf LDAP uses the [passport-ldapauth](https://github.com/vesse/passport-ldapauth) library. Most of these configuration options are passed through to the `server` config object which is used to configure `passport-ldapauth`. If you are having issues configuring LDAP, it is worth reading the README for `passport-ldapauth` to understand the configuration it expects.
When using Local and LDAP authentication methods, a user enters a `username` and `password` in the login form. If LDAP authentication is enabled, it is attempted first:
1. An LDAP user is searched for in the LDAP directory using the filter defined by `OVERLEAF_LDAP_SEARCH_FILTER` and authenticated.
2. If authentication is successful, the Overleaf users database is checked for a user with the primary email address that matches the email address of the authenticated LDAP user:
- If a matching user is found, the `hashedPassword` field for this user is deleted (if it exists). This ensures that the user can only log in via LDAP authentication in the future.
- If no matching user is found, a new Overleaf user is created using the email, first name, and last name retrieved from the LDAP server.
3. If LDAP authentication fails or is unsuccessful, local authentication is attempted.
#### Environment Variables
-`OVERLEAF_LDAP_URL`**(required)**
* URL of the LDAP server.
- Example: `ldaps://ldap.example.com:636` (LDAP over SSL)
- Example: `ldap://ldap.example.com:389` (unencrypted or STARTTLS, if configured).
-`OVERLEAF_LDAP_EMAIL_ATT`
* The email attribute returned by the LDAP server, default `mail`. Each LDAP user must have at least one email address.
If multiple addresses are provided, only the first one will be used.
-`OVERLEAF_LDAP_FIRST_NAME_ATT`
* The property name holding the first name of the user which is used in the application, usually `givenName`.
-`OVERLEAF_LDAP_LAST_NAME_ATT`
* The property name holding the family name of the user which is used in the application, usually `sn`.
-`OVERLEAF_LDAP_NAME_ATT`
* The property name holding the full name of the user, usually `cn`. If either of the two previous variables is not defined,
the first and/or last name of the user is extracted from this variable. Otherwise, it is not used.
-`OVERLEAF_LDAP_PLACEHOLDER`
* The placeholder for the login form, defaults to `Username`.
-`OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
* If set to `true`, updates the LDAP user `first_name` and `last_name` field on login, and turn off the user details form on the `/user/settings`
page for LDAP users. Otherwise, details will be fetched only on first login.
-`OVERLEAF_LDAP_BIND_DN`
* The distinguished name of the LDAP user that should be used for the LDAP connection
(this user should be able to search/list accounts on the LDAP server),
e.g., `cn=ldap_reader,dc=example,dc=com`. If not defined, anonymous binding is used.
-`OVERLEAF_LDAP_BIND_CREDENTIALS`
* Password for `OVERLEAF_LDAP_BIND_DN`.
-`OVERLEAF_LDAP_BIND_PROPERTY`
* Property of the user to bind against the client, defaults to `dn`.
-`OVERLEAF_LDAP_SEARCH_BASE`**(required)**
* The base DN from which to search for users. E.g., `ou=people,dc=example,dc=com`.
-`OVERLEAF_LDAP_SEARCH_FILTER`
* LDAP search filter with which to find a user. Use the literal '{{username}}' to have the given username be interpolated in for the LDAP search.
- Example: `(|(uid={{username}})(mail={{username}}))` (user can login with email or with login name).
* The scope of the search can be `base`, `one`, or `sub` (default).
-`OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
* JSON array of attributes to fetch from the LDAP server, e.g., `["uid", "mail", "givenName", "sn"]`.
By default, all attributes are fetched.
-`OVERLEAF_LDAP_STARTTLS`
* If `true`, LDAP over TLS is used.
-`OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
* Path to the file containing the CA certificate used to verify the LDAP server's SSL/TLS certificate. If there are multiple certificates, then
it can be a JSON array of paths to the certificates. The files must be accessible to the docker container.
- Example (one certificate): `/overleaf/certs/ldap_ca_cert.pem`
- Example (multiple certificates): `["/overleaf/certs/ldap_ca_cert1.pem", "/overleaf/certs/ldap_ca_cert2.pem"]`
-`OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
* If `true`, the server certificate is verified against the list of supplied CAs.
-`OVERLEAF_LDAP_CACHE`
* If `true`, then up to 100 credentials at a time will be cached for 5 minutes.
-`OVERLEAF_LDAP_TIMEOUT`
* How long the client should let operations live for before timing out, ms (Default: Infinity).
-`OVERLEAF_LDAP_CONNECT_TIMEOUT`
* How long the client should wait before timing out on TCP connections, ms (Default: OS default).
-`OVERLEAF_LDAP_IS_ADMIN_ATT` and `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
* When both environment variables are set, the login process updates `user.isAdmin = true` if the LDAP profile contains the attribute specified by
`OVERLEAF_LDAP_IS_ADMIN_ATT` and its value either matches `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` or is an array containing `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`,
otherwise `user.isAdmin` is set to `false`. If either of these variables is not set, then the admin status is only set to `true` during admin user
creation in Launchpad.
The following five variables are used to configure how user contacts are retrieved from the LDAP server.
-`OVERLEAF_LDAP_CONTACTS_FILTER`
* The filter used to search for users in the LDAP server to be loaded into contacts. The placeholder '{{userProperty}}' within the filter is replaced with the value of
the property specified by `OVERLEAF_LDAP_CONTACTS_PROPERTY` from the LDAP user initiating the search. If not defined, no users are retrieved from the LDAP server into contacts.
-`OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
* Specifies the base DN from which to start searching for the contacts. Defaults to `OVERLEAF_LDAP_SEARCH_BASE`.
-`OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
* The scope of the search can be `base`, `one`, or `sub` (default).
-`OVERLEAF_LDAP_CONTACTS_PROPERTY`
* Specifies the property of the user object that will replace the '{{userProperty}}' placeholder in the `OVERLEAF_LDAP_CONTACTS_FILTER`.
-`OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
* Specifies the value of the `OVERLEAF_LDAP_CONTACTS_PROPERTY` if the search is initiated by a non-LDAP user. If this variable is not defined, the resulting filter
will match nothing. The value `*` can be used as a wildcard.
The above example results in loading into the contacts of the current LDAP user all LDAP users who have the same UNIX `gid`. Non-LDAP users will have all LDAP users with UNIX `gid=1000` in their contacts.
where `someuser` is the uid of an existing user, will always produce a non-empty search result.
As a result, **every user will be granted admin rights**, not just `someuser`, as one might expect.
</details>
</details>
</details>
<details>
<summary><h3>SAML Authentication</h3></summary>
Internally, Overleaf SAML module uses the [passport-saml](https://github.com/node-saml/passport-saml) library, most of the following
configuration options are passed through to `passport-saml`. If you are having issues configuring SAML, it is worth reading the README
for `passport-saml` to get a feel for the configuration it expects.
When using the SAML authentication method, a user is redirected to the Identity Provider (IdP) authentication site.
If the IdP successfully authenticates the user, the Overleaf users database is checked for a record containing a `samlIdentifiers` field structured as follows:
```
samlIdentifiers: [
{
externalUserId: "...",
providerId: "1",
userIdAttribute: "..."
}
]
```
The `externalUserId` must match the value of the property specified by `userIdAttribute` in the user profile returned by the IdP server.
If no matching record is found, the database is searched for a user with the primary email address matching the email in the IdP user profile:
- If such a user is found, the `hashedPassword` field is deleted to disable local authentication, and the `samlIdentifiers` field is added.
- If no matching user is found, a new user is created with the email address and `samlIdentifiers` from the IdP profile.
**Note:** Currently, only one SAML IdP is supported. The `providerId` field in `samlIdentifiers` is fixed to `'1'`.
#### Environment Variables
-`OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
* Display name for the identity service, used on the login page (default: `Log in with SAML IdP`).
-`OVERLEAF_SAML_USER_ID_FIELD`
* The value of this attribute will be used by Overleaf as the external user ID, defaults to `nameID`.
-`OVERLEAF_SAML_EMAIL_FIELD`
* Name of the Email field in user profile, defaults to `nameID`.
-`OVERLEAF_SAML_FIRST_NAME_FIELD`
* Name of the firstName field in user profile, defaults to `givenName`.
-`OVERLEAF_SAML_LAST_NAME_FIELD`
* Name of the lastName field in user profile, defaults to `lastName`
-`OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
* If set to `true`, updates the user `first_name` and `last_name` field on login,
and turn off the user details form on `/user/settings` page.
* Expected saml response Audience, defaults to value of `OVERLEAF_SAML_ISSUER`.
-`OVERLEAF_SAML_IDP_CERT`**(required)**
* Path to a file containing the Identity Provider's public certificate, used to validate the signatures of incoming SAML responses. If the Identity Provider has multiple valid signing certificates, then
it can be a JSON array of paths to the certificates.
- Example (one certificate): `/overleaf/certs/idp_cert.pem`
- Example (multiple certificates): `["/overleaf/certs/idp_cert.pem", "/overleaf/certs/idp_cert_old.pem"]`
-`OVERLEAF_SAML_PUBLIC_CERT`
* Path to a file containing public signing certificate used to embed in auth requests in order for the IdP to validate the signatures of the incoming SAML Request. It's required when setting up the [metadata endpoint](#metadata-for-the-identity-provider)
when the strategy is configured with a `OVERLEAF_SAML_PRIVATE_KEY`. A JSON array of paths to certificates can be provided to support certificate rotation. When supplying an array of certificates, the first entry in the array should match the
current `OVERLEAF_SAML_PRIVATE_KEY`. Additional entries in the array can be used to publish upcoming certificates to IdPs before changing the `OVERLEAF_SAML_PRIVATE_KEY`.
-`OVERLEAF_SAML_PRIVATE_KEY`
* Path to a file containing a PEM-formatted private key matching the `OVERLEAF_SAML_PUBLIC_CERT` used to sign auth requests sent by passport-saml.
-`OVERLEAF_SAML_DECRYPTION_CERT`
* Path to a file containing public certificate, used for the [metadata endpoint](#metadata-for-the-identity-provider).
-`OVERLEAF_SAML_DECRYPTION_PVK`
* Path to a file containing private key matching the `OVERLEAF_SAML_DECRYPTION_CERT` that will be used to attempt to decrypt any encrypted assertions that are received.
-`OVERLEAF_SAML_SIGNATURE_ALGORITHM`
* Optionally set the signature algorithm for signing requests,
valid values are 'sha1' (default), 'sha256' (prefered), 'sha512' (most secure, check if your IdP supports it).
-`OVERLEAF_SAML_ADDITIONAL_PARAMS`
* JSON dictionary of additional query params to add to all requests.
-`OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
* JSON dictionary of additional query params to add to 'authorize' requests.
- Example: `{"some_key": "some_value"}`
-`OVERLEAF_SAML_IDENTIFIER_FORMAT`
* Name identifier format to request from the identity provider (default: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`).
If using `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, ensure the `OVERLEAF_SAML_EMAIL_FIELD` envirionment variable is defined.
If `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` is required, you must also define the `OVERLEAF_SAML_ID_FIELD` environment variable,
which can, for example, be set to the user's email address.
-`OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
* Time in milliseconds of skew that is acceptable between client and server when checking OnBefore and NotOnOrAfter assertion
condition validity timestamps. Setting to -1 will disable checking these conditions entirely. Default is 0.
*`AttributeConsumingServiceIndex` attribute to add to AuthnRequest to instruct the IdP which attribute set to attach
to the response ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
-`OVERLEAF_SAML_AUTHN_CONTEXT`
* JSON array of name identifier format values to request auth context. Default: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
-`OVERLEAF_SAML_FORCE_AUTHN`
* If `true`, the initial SAML request from the service provider specifies that the IdP should force re-authentication of the user,
even if they possess a valid session.
-`OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
* If `true`, do not request a specific auth context. For example, you can this this to `true` to allow additional contexts such as password-less logins (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Support for additional contexts is dependant on your IdP.
-`OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
* If set to `HTTP-POST`, will request authentication from IdP via HTTP POST binding, otherwise defaults to HTTP-Redirect.
-`OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
* If `always`, then InResponseTo will be validated from incoming SAML responses.
* If `never`, then InResponseTo won't be validated (default).
* If `ifPresent`, then InResponseTo will only be validated if present in the incoming SAML response.
-`OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
* Defines the expiration time when a Request ID generated for a SAML request will not be valid if seen
in a SAML response in the `InResponseTo` field. Default: 28800000 (8 hours).
-`OVERLEAF_SAML_LOGOUT_URL`
* base address to call with logout requests (default: `entryPoint`).
* JSON dictionary of additional query params to add to 'logout' requests.
-`OVERLEAF_SAML_IS_ADMIN_FIELD` and `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
* When both environment variables are set, the login process updates `user.isAdmin = true` if the profile returned by the SAML IdP contains the attribute specified by
`OVERLEAF_SAML_IS_ADMIN_FIELD` and its value either matches `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` or is an array containing `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`,
otherwise `user.isAdmin` is set to `false`. If either of these variables is not set, then the admin status is only set to `true` during admin user
creation in Launchpad.
#### Metadata for the Identity Provider
The current version of Overleaf CE includes and endpoint to retrieve Service Provider Metadata: `http://my-overleaf-instance.com/saml/meta`
The Identity Provider will need to be configured to recognize the Overleaf server as a "Service Provider". Consult the documentation for your SAML server for instructions on how to do this.
Below is an example of appropriate Service Provider metadata:
Internally, Overleaf OIDC module uses the [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) library.
If you are having issues configuring OpenID Connect, it is worth reading the README for `passport-openidconnect` to get a feel for the configuration it expects.
When using the OIDC authentication method, a user is redirected to the Identity Provider (IdP) authentication site.
If the IdP successfully authenticates the user, the Overleaf users database is checked for a record containing a `thirdPartyIdentifiers` field structured as follows:
```
thirdPartyIdentifiers: [
{
externalUserId: "...",
externalData: null,
providerId: "..."
}
]
```
The `externalUserId` must match the user ID in the profile returned by the IdP server (see the `OVERLEAF_OIDC_USER_ID_FIELD` environment variable), and `providerId`
must match the ID of the OIDC provider (see the `OVERLEAF_OIDC_PROVIDER_ID`).
If no matching record is found, the database is searched for a user with the primary email address matching the email in the IdP user profile:
- If such a user is found, the `thirdPartyIdentifiers` field is updated.
- If no matching user is found, a new user is created with the email address and `thirdPartyIdentifiers` from the IdP profile.
In both cases, the user is said to be 'linked' to the external OIDC user. The user can be unlinked from the OIDC provider on the `/user/settings` page.
#### Environment Variables
The values of the following five required variables can be found using `.well-known/openid-configuration` endpoint of your OpenID Provider (OP).
-`OVERLEAF_OIDC_ISSUER`**(required)**
-`OVERLEAF_OIDC_AUTHORIZATION_URL`**(required)**
-`OVERLEAF_OIDC_TOKEN_URL`**(required)**
-`OVERLEAF_OIDC_USER_INFO_URL`**(required)**
-`OVERLEAF_OIDC_LOGOUT_URL`**(required)**
The values of the following two required variables will be provided by the admin of your OP
-`OVERLEAF_OIDC_CLIENT_ID`**(required)**
-`OVERLEAF_OIDC_CLIENT_SECRET`**(required)**
-`OVERLEAF_OIDC_SCOPE`
* Default: `openid profile email`
-`OVERLEAF_OIDC_PROVIDER_ID`
* Arbitrary ID of the OP, defaults to `oidc`.
-`OVERLEAF_OIDC_PROVIDER_NAME`
* The name of the OP, used in the `Linked Accounts` section of the `/user/settings` page, defaults to `OIDC Provider`.
-`OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
* Display name for the identity service, used on the login page (default: `Log in with $OVERLEAF_OIDC_PROVIDER_NAME`).
-`OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
* Description of OP, used in the `Linked Accounts` section (default: `Log in with $OVERLEAF_OIDC_PROVIDER_NAME`).
-`OVERLEAF_OIDC_PROVIDER_INFO_LINK`
*`Learn more` URL in the OP description, default: no `Learn more` link in the description.
-`OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
* Do not show OP on the `/user/settings` page, if the user's account is not linked with the OP, default `false`.
-`OVERLEAF_OIDC_USER_ID_FIELD`
* The value of this attribute will be used by Overleaf as the external user ID, defaults to `id`.
-`OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
* If set to `true`, updates the user `first_name` and `last_name` field on login,
and disables the user details form on `/user/settings` page.
-`OVERLEAF_OIDC_IS_ADMIN_FIELD` and `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
* When both environment variables are set, the login process updates `user.isAdmin = true` if the profile returned by the OP contains the attribute specified by
`OVERLEAF_OIDC_IS_ADMIN_FIELD` and its value matches `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, otherwise `user.isAdmin` is set to `false`.
If `OVERLEAF_OIDC_IS_ADMIN_FIELD` is `email` then the value of the attribute `emails[0].value` is used for match checking.
// The standard library only has fs.rename(), which does not support exclusive flags.
// Refuse to act on this write operation.
thrownewNotImplementedError(
'Overwrite protection required by caller, but it is not available is FS backend. Configure GCS or S3 backend instead, get in touch with support for further information.'
// Return a PassThrough stream with a minimal interface. It will buffer until the caller starts reading. It will emit errors from the source stream (Stream.pipeline passes errors along).
// Return a PassThrough stream with a minimal interface. It will buffer until the caller starts reading. It will emit errors from the source stream (Stream.pipeline passes errors along).
@@ -91,8 +91,22 @@ describe('S3PersistorTests', function () {
createReadStream(){
setTimeout(()=>{
if(this.notFoundSSEC){
// special case for AWS S3: 404 NoSuchKey wrapped in a 400. A single request received a single response, and multiple httpHeaders events are triggered. Don't ask.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.