1
0
mirror of https://github.com/bitwarden/directory-connector synced 2025-12-10 21:33:20 +00:00

Compare commits

..

1 Commits

Author SHA1 Message Date
Jimmy Vo
599b6e6058 [PM-15283] [PM-15284] [PM-15286] Upgrade Angular to 19. 2024-12-09 14:10:39 -05:00
8 changed files with 4416 additions and 3210 deletions

View File

@@ -5,8 +5,6 @@ on:
push: push:
branches: branches:
- "main" - "main"
- "rc"
- "hotfix-rc"
workflow_dispatch: {} workflow_dispatch: {}
jobs: jobs:
@@ -577,7 +575,7 @@ jobs:
- name: Install Node dependencies - name: Install Node dependencies
run: npm install run: npm install
- name: Set up private auth key - name: Set up private auth key
run: | run: |
mkdir ~/private_keys mkdir ~/private_keys
@@ -636,11 +634,7 @@ jobs:
- macos-gui - macos-gui
steps: steps:
- name: Check if any job failed - name: Check if any job failed
if: | if: github.ref == 'refs/heads/main' && contains(needs.*.result, 'failure')
(github.ref == 'refs/heads/main'
|| github.ref == 'refs/heads/rc'
|| github.ref == 'refs/heads/hotfix-rc')
&& contains(needs.*.result, 'failure')
run: exit 1 run: exit 1
- name: Login to Azure - CI subscription - name: Login to Azure - CI subscription

View File

@@ -88,7 +88,7 @@ jobs:
fail-on-error: true fail-on-error: true
- name: Upload coverage to codecov.io - name: Upload coverage to codecov.io
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2 uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
if: ${{ needs.check-test-secrets.outputs.available == 'true' }} if: ${{ needs.check-test-secrets.outputs.available == 'true' }}
env: env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -18,17 +18,17 @@ jobs:
name: Setup name: Setup
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
outputs: outputs:
release_version: ${{ steps.version.outputs.version }} release-version: ${{ steps.version.outputs.version }}
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Branch check - name: Branch check
if: ${{ inputs.release_type != 'Dry Run' }} if: ${{ github.event.inputs.release_type != 'Dry Run' }}
run: | run: |
if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc" ]]; then if [[ "$GITHUB_REF" != "refs/heads/main" ]]; then
echo "===================================" echo "==================================="
echo "[!] Can only release from the 'rc' or 'hotfix-rc' branches" echo "[!] Can only release from the 'main' branch"
echo "===================================" echo "==================================="
exit 1 exit 1
fi fi
@@ -37,7 +37,7 @@ jobs:
id: version id: version
uses: bitwarden/gh-actions/release-version-check@main uses: bitwarden/gh-actions/release-version-check@main
with: with:
release-type: ${{ inputs.release_type }} release-type: ${{ github.event.inputs.release_type }}
project-type: ts project-type: ts
file: package.json file: package.json
@@ -47,7 +47,7 @@ jobs:
needs: setup needs: setup
steps: steps:
- name: Download all artifacts - name: Download all artifacts
if: ${{ inputs.release_type != 'Dry Run' }} if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@main uses: bitwarden/gh-actions/download-artifacts@main
with: with:
workflow: build.yml workflow: build.yml
@@ -55,7 +55,7 @@ jobs:
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}
- name: Dry Run - Download all artifacts - name: Dry Run - Download all artifacts
if: ${{ inputs.release_type == 'Dry Run' }} if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@main uses: bitwarden/gh-actions/download-artifacts@main
with: with:
workflow: build.yml workflow: build.yml
@@ -63,10 +63,10 @@ jobs:
branch: main branch: main
- name: Create release - name: Create release
if: ${{ inputs.release_type != 'Dry Run' }} if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.0 uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.0
env: env:
PKG_VERSION: ${{ needs.setup.outputs.release_version }} PKG_VERSION: ${{ needs.setup.outputs.release-version }}
with: with:
artifacts: "./bwdc-windows-${{ env.PKG_VERSION }}.zip, artifacts: "./bwdc-windows-${{ env.PKG_VERSION }}.zip,
./bwdc-macos-${{ env.PKG_VERSION }}.zip, ./bwdc-macos-${{ env.PKG_VERSION }}.zip,

View File

@@ -64,9 +64,10 @@ jobs:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
- name: Scan with SonarCloud - name: Scan with SonarCloud
uses: sonarsource/sonarqube-scan-action@bfd4e558cda28cda6b5defafb9232d191be8c203 # v4.2.1 uses: sonarsource/sonarcloud-github-action@eb211723266fe8e83102bac7361f0a05c3ac1d1b # v3.0.0
env: env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
args: > args: >
-Dsonar.organization=${{ github.repository_owner }} -Dsonar.organization=${{ github.repository_owner }}

View File

@@ -5,8 +5,6 @@ on:
push: push:
branches: branches:
- "main" - "main"
- "rc"
- "hotfix-rc"
pull_request: pull_request:
jobs: jobs:
@@ -78,7 +76,7 @@ jobs:
fail-on-error: true fail-on-error: true
- name: Upload coverage to codecov.io - name: Upload coverage to codecov.io
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2 uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0
if: ${{ needs.check-test-secrets.outputs.available == 'true' }} if: ${{ needs.check-test-secrets.outputs.available == 'true' }}
env: env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

7531
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
"name": "@bitwarden/directory-connector", "name": "@bitwarden/directory-connector",
"productName": "Bitwarden Directory Connector", "productName": "Bitwarden Directory Connector",
"description": "Sync your user directory to your Bitwarden organization.", "description": "Sync your user directory to your Bitwarden organization.",
"version": "2025.1.0", "version": "2024.10.0",
"keywords": [ "keywords": [
"bitwarden", "bitwarden",
"password", "password",
@@ -73,15 +73,15 @@
"test:types": "npx tsc --noEmit" "test:types": "npx tsc --noEmit"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "17.3.11", "@angular-devkit/build-angular": "19.0.3",
"@angular-eslint/eslint-plugin-template": "17.5.3", "@angular-eslint/eslint-plugin-template": "17.5.3",
"@angular-eslint/template-parser": "17.5.3", "@angular-eslint/template-parser": "17.5.3",
"@angular/compiler-cli": "17.3.12", "@angular/compiler-cli": "19.0.3",
"@electron/notarize": "2.5.0", "@electron/notarize": "2.5.0",
"@electron/rebuild": "3.7.1", "@electron/rebuild": "3.7.1",
"@fluffy-spoon/substitute": "1.208.0", "@fluffy-spoon/substitute": "1.208.0",
"@microsoft/microsoft-graph-types": "2.40.0", "@microsoft/microsoft-graph-types": "2.40.0",
"@ngtools/webpack": "17.3.11", "@ngtools/webpack": "19.0.0",
"@types/inquirer": "8.2.10", "@types/inquirer": "8.2.10",
"@types/jest": "29.5.14", "@types/jest": "29.5.14",
"@types/lowdb": "1.0.15", "@types/lowdb": "1.0.15",
@@ -90,15 +90,15 @@
"@types/node-forge": "1.3.11", "@types/node-forge": "1.3.11",
"@types/proper-lockfile": "4.1.4", "@types/proper-lockfile": "4.1.4",
"@types/tldjs": "2.3.4", "@types/tldjs": "2.3.4",
"@typescript-eslint/eslint-plugin": "8.19.0", "@typescript-eslint/eslint-plugin": "5.62.0",
"@typescript-eslint/parser": "8.19.0", "@typescript-eslint/parser": "5.62.0",
"clean-webpack-plugin": "4.0.0", "clean-webpack-plugin": "4.0.0",
"concurrently": "9.1.0", "concurrently": "9.1.0",
"copy-webpack-plugin": "12.0.2", "copy-webpack-plugin": "12.0.2",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"css-loader": "7.1.2", "css-loader": "7.1.2",
"dotenv": "16.4.7", "dotenv": "16.4.5",
"electron": "32.1.1", "electron": "28.3.3",
"electron-builder": "24.13.3", "electron-builder": "24.13.3",
"electron-log": "5.2.4", "electron-log": "5.2.4",
"electron-reload": "2.0.0-alpha.1", "electron-reload": "2.0.0-alpha.1",
@@ -123,8 +123,8 @@
"node-forge": "1.3.1", "node-forge": "1.3.1",
"node-loader": "2.1.0", "node-loader": "2.1.0",
"pkg": "5.8.1", "pkg": "5.8.1",
"prettier": "3.4.2", "prettier": "3.3.3",
"rimraf": "6.0.1", "rimraf": "5.0.10",
"rxjs": "7.8.1", "rxjs": "7.8.1",
"sass": "1.79.4", "sass": "1.79.4",
"sass-loader": "16.0.4", "sass-loader": "16.0.4",
@@ -132,24 +132,24 @@
"ts-loader": "9.5.1", "ts-loader": "9.5.1",
"tsconfig-paths-webpack-plugin": "4.2.0", "tsconfig-paths-webpack-plugin": "4.2.0",
"type-fest": "4.30.0", "type-fest": "4.30.0",
"typescript": "5.4.5", "typescript": "5.5.4",
"typescript-transform-paths": "3.5.2", "typescript-transform-paths": "3.5.2",
"webpack": "5.95.0", "webpack": "5.95.0",
"webpack-cli": "5.1.4", "webpack-cli": "5.1.4",
"webpack-merge": "6.0.1", "webpack-merge": "6.0.1",
"zone.js": "0.14.10", "zone.js": "0.15.0",
"webpack-node-externals": "3.0.0" "webpack-node-externals": "3.0.0"
}, },
"dependencies": { "dependencies": {
"@angular/animations": "17.3.12", "@angular/animations": "19.0.3",
"@angular/cdk": "17.3.10", "@angular/cdk": "19.0.2",
"@angular/common": "17.3.12", "@angular/common": "19.0.3",
"@angular/compiler": "17.3.12", "@angular/compiler": "19.0.3",
"@angular/core": "17.3.12", "@angular/core": "19.0.3",
"@angular/forms": "17.3.12", "@angular/forms": "19.0.3",
"@angular/platform-browser": "17.3.12", "@angular/platform-browser": "19.0.3",
"@angular/platform-browser-dynamic": "17.3.12", "@angular/platform-browser-dynamic": "19.0.3",
"@angular/router": "17.3.12", "@angular/router": "19.0.3",
"@microsoft/microsoft-graph-client": "3.0.7", "@microsoft/microsoft-graph-client": "3.0.7",
"big-integer": "1.6.52", "big-integer": "1.6.52",
"bootstrap": "5.3.3", "bootstrap": "5.3.3",
@@ -160,17 +160,17 @@
"form-data": "4.0.1", "form-data": "4.0.1",
"google-auth-library": "7.14.1", "google-auth-library": "7.14.1",
"googleapis": "73.0.0", "googleapis": "73.0.0",
"https-proxy-agent": "7.0.6", "https-proxy-agent": "7.0.5",
"inquirer": "8.2.6", "inquirer": "8.2.6",
"keytar": "7.9.0", "keytar": "7.9.0",
"ldapts": "7.2.2", "ldapts": "7.2.1",
"lowdb": "1.0.0", "lowdb": "1.0.0",
"ngx-toastr": "17.0.2", "ngx-toastr": "17.0.2",
"node-fetch": "2.7.0", "node-fetch": "2.7.0",
"proper-lockfile": "4.1.2", "proper-lockfile": "4.1.2",
"rxjs": "7.8.1", "rxjs": "7.8.1",
"tldjs": "2.3.1", "tldjs": "2.3.1",
"zone.js": "0.14.10" "zone.js": "0.15.0"
}, },
"engines": { "engines": {
"node": "~20.18.0", "node": "~20.18.0",

View File

@@ -18,11 +18,6 @@ import { IDirectoryService } from "./directory.service";
const UserControlAccountDisabled = 2; const UserControlAccountDisabled = 2;
/**
* The attribute name for the unique identifier used by Active Directory.
*/
const ActiveDirectoryExternalId = "objectGUID";
export class LdapDirectoryService implements IDirectoryService { export class LdapDirectoryService implements IDirectoryService {
private client: ldapts.Client; private client: ldapts.Client;
private dirConfig: LdapConfiguration; private dirConfig: LdapConfiguration;
@@ -245,7 +240,7 @@ export class LdapDirectoryService implements IDirectoryService {
* otherwise it falls back to the provided referenceId. * otherwise it falls back to the provided referenceId.
*/ */
private getExternalId(searchEntry: ldapts.Entry, referenceId: string) { private getExternalId(searchEntry: ldapts.Entry, referenceId: string) {
const attr = this.getAttr<Buffer>(searchEntry, ActiveDirectoryExternalId); const attr = this.getAttr<Buffer>(searchEntry, "objectGUID");
if (attr != null) { if (attr != null) {
return this.bufToGuid(attr); return this.bufToGuid(attr);
} else { } else {
@@ -363,9 +358,6 @@ export class LdapDirectoryService implements IDirectoryService {
filter: filter, filter: filter,
scope: "sub", scope: "sub",
paged: this.dirConfig.pagedSearch, paged: this.dirConfig.pagedSearch,
// We need to expressly tell ldapts what attributes to return as Buffer objects,
// otherwise they are returned as strings
explicitBufferAttributes: [ActiveDirectoryExternalId],
}; };
const { searchEntries } = await this.client.search(path, options, controls); const { searchEntries } = await this.client.search(path, options, controls);
return searchEntries.map((e) => processEntry(e)).filter((e) => e != null); return searchEntries.map((e) => processEntry(e)).filter((e) => e != null);