openhound-github 0.6.2__tar.gz → 0.6.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openhound_github-0.6.2 → openhound_github-0.6.4}/PKG-INFO +2 -2
- {openhound_github-0.6.2 → openhound_github-0.6.4}/README.md +1 -1
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/helpers.py +13 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/kinds/edges.py +0 -1
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/kinds/nodes.py +0 -2
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/lookup.py +24 -4
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/main.py +1 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/__init__.py +10 -1
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_helpers.py +4 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team_organization.py +15 -12
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/external_identity.py +10 -76
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/projected_enterprise_team.py +2 -1
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_helpers.py +1 -55
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/scim_user.py +24 -9
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/resources/enterprise.py +102 -46
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/resources/organization.py +88 -33
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/source.py +0 -14
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/transforms.py +5 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_app_auth.py +0 -1
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_enterprise_organization.py +8 -10
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_enterprise_resources.py +174 -0
- openhound_github-0.6.4/tests/test_lookup.py +28 -0
- openhound_github-0.6.4/tests/test_org_scim_resources.py +111 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_saml_models.py +65 -2
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_scim_models.py +54 -9
- openhound_github-0.6.2/tests/test_external_identity_tenant_matching.py +0 -242
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/CODE_OF_CONDUCT.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/CONTRIBUTING.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GOVERNANCE.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-COC-Header.png +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-CONTRIB-Header.png +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-GOV-Header.png +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-Header.png +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-LIC-Header.png +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-SEC-Header.png +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SECURITY.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-Dark.svg +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-FOSS-Dark.svg +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-FOSS-Light.svg +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-Light.svg +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/workflows/publish.yml +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/workflows/release-on-merge.yml +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/workflows/validate-branch.yml +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.gitignore +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.gitmodules +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/.pre-commit-config.yaml +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/LICENSE.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddAssignee.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddCollaborator.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddLabel.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddMember.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AdminTo.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AssignedTo.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CallsWorkflow.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanAccess.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanCreateBranch.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanEditProtection.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanPwnRequest.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanUseRunner.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanWriteBranch.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CloseDiscussion.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CloseIssue.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ClosePullRequest.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_Contains.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateRepository.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateTag.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateTeam.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteIssue.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteTag.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DependsOn.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeploysTo.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoProtections.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasBaseRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasBranch.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasEnvironment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasJob.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasMember.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasRunner.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasSecret.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasStep.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasVariable.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasWorkflow.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_InheritedFrom.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_InstalledAs.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_InviteMember.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_IsEligibleFor.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageTopics.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageWebhooks.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MapsToUser.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MemberOf.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_Owns.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ProtectedBy.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadRepoContents.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RemoveAssignee.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RemoveLabel.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReopenIssue.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RequestPrReview.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RunOrgMigration.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetIssueType.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetMilestone.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetSocialPreview.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SyncedTo.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_TransferRepository.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_UsesSecret.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_UsesVariable.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ValidToken.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteRepoContents.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_App.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_AppInstallation.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Branch.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Environment.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgRunner.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgSecret.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgVariable.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Organization.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoRunner.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoSecret.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoVariable.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Repository.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Team.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_TeamRole.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_User.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Workflow.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_WorkflowJob.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_WorkflowStep.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/docs/og-docs.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-organizations.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/README.md +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/active-leaked-secrets.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/all-actions-allowed.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/app-installations-all-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-self-approval.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/bypass-pr-requirements.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dangerous-branch-perms.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/default-repository-permissions.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/environments-admin-bypass.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/expired-pats.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/external-identities-without-scim.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/github-to-azure-identity.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/global-repo-perms.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/hybrid-identities.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-create-pages.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-create-public-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-delete-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/org-owners.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/orgs-without-2fa.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/pats-all-repo-access.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/pending-pat-requests.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/public-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/push-to-protected-branches.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/repository-workflows.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/saml-configuration.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/secret-scanning-alerts.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/team-membership-admin.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/team-structure.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/unprotected-branches.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/unprotected-default-branches.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/schema.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/justfile +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/pyproject.toml +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/main.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/__init__.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/auth.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/extension.yaml +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/graph.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/graphql.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/actions_permission.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/app_installation.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch_protection_rule.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch_push_allowance.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_admin.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_managed_user.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_member.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_organization.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_role.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_role_team.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_role_user.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team_member.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team_role.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_user.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/env_secret.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/env_variable.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/environment.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/environment_branch_policy.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_role.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_role_member.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_role_team.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_secret.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_variable.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/personal_access_token.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/personal_access_token_access.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/personal_access_token_request.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repo_role_assignment.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository_role.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository_secret.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository_variable.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/runner.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_issuer.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_provider.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_service_provider.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/secret_scanning_alert.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/team.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/team_member.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/team_role.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/user.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/workflow.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/workflow_job.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/workflow_step.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/resources/__init__.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/runner_ids.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_branch_collection_gate.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_branch_protection_traversability.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/actions-permissions.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/actionsecrets.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/app.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/appinstalls.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/branch-policies.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/branch-prot-rules.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/branches.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/custom-roles.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/environments.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-pat-request.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-pat.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-role-teams.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-role-users.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-roles.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/pat-repositories.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/repo-collaborators.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/repo-teams.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/repositories.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/scimusers.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/secrets.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/secretscanningalert.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/selected-org-secrets.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/variables.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/workflows.json +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_enterprise_capabilities.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_environment_model.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_environment_resources.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_environment_reviewer_lookup.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_error_resilience.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_github_app_retry.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_github_rest_client.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_github_retry.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_helpers.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_org_secret_models.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_repository_rulesets.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_runner_ids.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_runner_models.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_runner_resources.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_saml_helpers.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_variable_models.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_workflow_model.py +0 -0
- {openhound_github-0.6.2 → openhound_github-0.6.4}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: openhound-github
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.4
|
|
4
4
|
Summary: Github collector for OpenHound
|
|
5
5
|
Author-email: "jdreijer@specterops.io" <jdreijer@specterops.io>, Jared Atkinson <jatkinson@specterops.io>
|
|
6
6
|
License-File: LICENSE.md
|
|
@@ -53,7 +53,7 @@ identifier must be supplied together with `key_path` and `enterprise_name`.
|
|
|
53
53
|
|
|
54
54
|
### Enterprise SCIM and hybrid correlations
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
A token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
|
|
57
57
|
|
|
58
58
|
`SOURCES__GITHUB__EMIT_LEGACY_SCIM_CORRELATIONS=true` temporarily reproduces GitHound-style Okta-to-SCIM correlation relationships. It defaults to false because a dedicated hybrid correlator should own IdP-to-SCIM matching; GitHub remains authoritative for GitHub's SCIM resources and target-system provisioning relationships.
|
|
59
59
|
|
|
@@ -42,7 +42,7 @@ identifier must be supplied together with `key_path` and `enterprise_name`.
|
|
|
42
42
|
|
|
43
43
|
### Enterprise SCIM and hybrid correlations
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
A token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
|
|
46
46
|
|
|
47
47
|
`SOURCES__GITHUB__EMIT_LEGACY_SCIM_CORRELATIONS=true` temporarily reproduces GitHound-style Okta-to-SCIM correlation relationships. It defaults to false because a dedicated hybrid correlator should own IdP-to-SCIM matching; GitHub remains authoritative for GitHub's SCIM resources and target-system provisioning relationships.
|
|
48
48
|
|
|
@@ -20,6 +20,19 @@ class GraphQLPaginationError(RuntimeError):
|
|
|
20
20
|
pass
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
def scim_skip_reason(exception: BaseException) -> str | None:
|
|
24
|
+
"""Return a user-facing reason for expected SCIM API unavailability."""
|
|
25
|
+
if not isinstance(exception, requests.HTTPError) or exception.response is None:
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
status_code = exception.response.status_code
|
|
29
|
+
if status_code in (401, 403):
|
|
30
|
+
return "the configured credentials do not have SCIM access"
|
|
31
|
+
if status_code == 404:
|
|
32
|
+
return "the GitHub scope does not expose SCIM endpoints"
|
|
33
|
+
return None
|
|
34
|
+
|
|
35
|
+
|
|
23
36
|
class GraphQLCursorPaginator(JSONResponseCursorPaginator):
|
|
24
37
|
def __init__(
|
|
25
38
|
self,
|
|
@@ -39,7 +39,6 @@ RESTRICTIONS_CAN_PUSH = "GH_RestrictionsCanPush"
|
|
|
39
39
|
HAS_EXTERNAL_IDENTITY = "GH_HasExternalIdentity"
|
|
40
40
|
HAS_SAML_IDENTITY_PROVIDER = "GH_HasSamlIdentityProvider"
|
|
41
41
|
MAPS_TO_USER = "GH_MapsToUser"
|
|
42
|
-
SYNCED_TO_GH_USER = "GH_SyncedTo"
|
|
43
42
|
|
|
44
43
|
# Normalized OpenGraph-SCIM edges
|
|
45
44
|
SCIM_CONTAINS = "SCIM_Contains"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import re
|
|
2
3
|
from functools import lru_cache
|
|
3
4
|
|
|
4
5
|
import duckdb
|
|
@@ -8,10 +9,20 @@ from openhound.core.lookup import LookupManager, logger
|
|
|
8
9
|
from openhound_github.runner_ids import runner_group_node_id, runner_node_id
|
|
9
10
|
|
|
10
11
|
|
|
12
|
+
_SCHEMA_IDENTIFIER_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _validate_schema_identifier(schema: str) -> str:
|
|
16
|
+
if not _SCHEMA_IDENTIFIER_RE.fullmatch(schema):
|
|
17
|
+
raise ValueError(f"Invalid DuckDB schema identifier: {schema!r}")
|
|
18
|
+
return schema
|
|
19
|
+
|
|
20
|
+
|
|
11
21
|
class GithubLookup(LookupManager):
|
|
12
22
|
def __init__(self, client: DuckDBPyConnection, schema: str = "github"):
|
|
13
|
-
|
|
14
|
-
|
|
23
|
+
validated_schema = _validate_schema_identifier(schema)
|
|
24
|
+
super().__init__(client, validated_schema)
|
|
25
|
+
self.schema = validated_schema
|
|
15
26
|
self.client = client
|
|
16
27
|
|
|
17
28
|
def _find_single_row(self, *args):
|
|
@@ -188,12 +199,21 @@ class GithubLookup(LookupManager):
|
|
|
188
199
|
)
|
|
189
200
|
|
|
190
201
|
@lru_cache
|
|
191
|
-
def
|
|
202
|
+
def projected_enterprise_team_id(self, org_login: str, slug: str) -> str | None:
|
|
192
203
|
return self._find_single_object(
|
|
193
|
-
f"""SELECT
|
|
204
|
+
f"""SELECT node_id FROM {self.schema}.projected_enterprise_teams WHERE org_login = ? AND slug = ?""",
|
|
194
205
|
[org_login, slug],
|
|
195
206
|
)
|
|
196
207
|
|
|
208
|
+
@lru_cache
|
|
209
|
+
def external_identity_id_for_guid(
|
|
210
|
+
self, guid: str, environment_slug: str
|
|
211
|
+
) -> str | None:
|
|
212
|
+
return self._find_single_object(
|
|
213
|
+
f"""SELECT id FROM {self.schema}.external_identities WHERE guid = ? AND environment_slug = ?""",
|
|
214
|
+
[guid, environment_slug],
|
|
215
|
+
)
|
|
216
|
+
|
|
197
217
|
@lru_cache
|
|
198
218
|
def repository_node_ids(self):
|
|
199
219
|
return self._find_all_objects(
|
|
@@ -63,6 +63,7 @@ def preproc(ctx: PreProcContext):
|
|
|
63
63
|
"teams": "teams",
|
|
64
64
|
"team_members": "team_members",
|
|
65
65
|
"saml_provider": "saml_provider",
|
|
66
|
+
"external_identities": "external_identities",
|
|
66
67
|
"applications": "applications",
|
|
67
68
|
"enterprise": "enterprise",
|
|
68
69
|
"enterprise_organizations": "enterprise_organizations",
|
|
@@ -53,7 +53,14 @@ from .saml_assertion_consumer_service import SamlAssertionConsumerService
|
|
|
53
53
|
from .saml_provider import SamlProvider
|
|
54
54
|
from .saml_service_provider import SamlServiceProvider
|
|
55
55
|
from .saml_issuer import SamlIssuer
|
|
56
|
-
from .scim_user import
|
|
56
|
+
from .scim_user import (
|
|
57
|
+
EnterpriseScimOrganization,
|
|
58
|
+
EnterpriseScimUser,
|
|
59
|
+
ScimGroup,
|
|
60
|
+
ScimOrganization,
|
|
61
|
+
ScimResource,
|
|
62
|
+
ScimUser,
|
|
63
|
+
)
|
|
57
64
|
from .secret_scanning_alert import SecretScanningAlert
|
|
58
65
|
from .team import Team
|
|
59
66
|
from .team_member import TeamMember
|
|
@@ -117,6 +124,8 @@ __all__ = [
|
|
|
117
124
|
"ScimUser",
|
|
118
125
|
"ScimGroup",
|
|
119
126
|
"ScimOrganization",
|
|
127
|
+
"EnterpriseScimUser",
|
|
128
|
+
"EnterpriseScimOrganization",
|
|
120
129
|
"RepoRoleAssignment",
|
|
121
130
|
"Environment",
|
|
122
131
|
"EnvironmentSecret",
|
{openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_helpers.py
RENAMED
|
@@ -2,5 +2,9 @@ def enterprise_team_node_id(enterprise_id: str, team_id: str | int) -> str:
|
|
|
2
2
|
return f"GH_EnterpriseTeam_{enterprise_id}_{team_id}"
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
def projected_enterprise_team_node_id(org_id: str | None, team_node_id: str) -> str:
|
|
6
|
+
return f"GH_Team_{org_id}_{team_node_id}"
|
|
7
|
+
|
|
8
|
+
|
|
5
9
|
def enterprise_role_node_id(enterprise_id: str, role_id: str | int) -> str:
|
|
6
10
|
return f"GH_EnterpriseRole_{enterprise_id}_{role_id}"
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
from openhound.core.asset import BaseAsset, EdgeDef
|
|
2
2
|
from openhound.core.models.entries_dataclass import (
|
|
3
|
-
ConditionalEdgePath,
|
|
4
3
|
Edge,
|
|
5
4
|
EdgePath,
|
|
6
5
|
EdgeProperties,
|
|
7
|
-
PropertyMatch,
|
|
8
6
|
)
|
|
9
7
|
|
|
10
8
|
from openhound_github.kinds import edges as ek
|
|
11
9
|
from openhound_github.kinds import nodes as nk
|
|
12
10
|
from openhound_github.main import app
|
|
13
|
-
from openhound_github.models.enterprise_helpers import
|
|
11
|
+
from openhound_github.models.enterprise_helpers import (
|
|
12
|
+
enterprise_team_node_id,
|
|
13
|
+
projected_enterprise_team_node_id,
|
|
14
|
+
)
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
@app.asset(
|
|
@@ -59,18 +60,20 @@ class EnterpriseTeamOrganization(BaseAsset):
|
|
|
59
60
|
@property
|
|
60
61
|
def member_of_team_edges(self):
|
|
61
62
|
org_login = self.login or self._lookup.org_login_for_id(self.node_id)
|
|
62
|
-
|
|
63
|
-
org_login, self.projected_slug
|
|
64
|
-
|
|
63
|
+
projected_team_id = (
|
|
64
|
+
self._lookup.projected_enterprise_team_id(org_login, self.projected_slug)
|
|
65
|
+
if org_login
|
|
66
|
+
else None
|
|
67
|
+
)
|
|
68
|
+
if projected_team_id:
|
|
65
69
|
yield Edge(
|
|
66
70
|
kind=ek.MEMBER_OF,
|
|
67
71
|
start=EdgePath(value=self.enterprise_team_node_id, match_by="id"),
|
|
68
|
-
end=
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
],
|
|
72
|
+
end=EdgePath(
|
|
73
|
+
value=projected_enterprise_team_node_id(
|
|
74
|
+
self.node_id, projected_team_id
|
|
75
|
+
),
|
|
76
|
+
match_by="id",
|
|
74
77
|
),
|
|
75
78
|
properties=EdgeProperties(traversable=True),
|
|
76
79
|
)
|
{openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/external_identity.py
RENAMED
|
@@ -2,14 +2,13 @@ from dataclasses import dataclass, field
|
|
|
2
2
|
|
|
3
3
|
from openhound.core.asset import BaseAsset, EdgeDef, NodeDef
|
|
4
4
|
from openhound.core.models.entries_dataclass import (
|
|
5
|
-
ConditionalEdgePath,
|
|
6
5
|
Edge,
|
|
7
6
|
EdgePath,
|
|
8
7
|
EdgeProperties,
|
|
9
8
|
)
|
|
10
9
|
from pydantic import BaseModel, ConfigDict, Field
|
|
11
10
|
|
|
12
|
-
from openhound_github.graph import
|
|
11
|
+
from openhound_github.graph import GHNode, GHNodeProperties
|
|
13
12
|
from openhound_github.kinds import edges as ek
|
|
14
13
|
from openhound_github.kinds import nodes as nk
|
|
15
14
|
from openhound_github.main import app
|
|
@@ -18,9 +17,6 @@ from .saml_helpers import (
|
|
|
18
17
|
DEFAULT_GITHUB_DEPLOYMENT_ID,
|
|
19
18
|
ENTRA_OBJECT_ID_CLAIM,
|
|
20
19
|
SAML_CONTRACT_VERSION,
|
|
21
|
-
detect_foreign_idp,
|
|
22
|
-
foreign_user_kind,
|
|
23
|
-
foreign_user_matchers,
|
|
24
20
|
github_saml_service_provider_id,
|
|
25
21
|
saml_account_match_values,
|
|
26
22
|
saml_attribute_match_values,
|
|
@@ -113,13 +109,6 @@ class User(BaseModel):
|
|
|
113
109
|
description="External identity maps to a user",
|
|
114
110
|
traversable=False,
|
|
115
111
|
),
|
|
116
|
-
EdgeDef(
|
|
117
|
-
start=nk.EXTERNAL_IDENTITY,
|
|
118
|
-
end=nk.USER,
|
|
119
|
-
kind=ek.SYNCED_TO_GH_USER,
|
|
120
|
-
description="Foreign IdP user is synced to a GitHub user",
|
|
121
|
-
traversable=True,
|
|
122
|
-
),
|
|
123
112
|
EdgeDef(
|
|
124
113
|
start=nk.SAML_SERVICE_PROVIDER,
|
|
125
114
|
end=nk.USER,
|
|
@@ -150,12 +139,19 @@ class ExternalIdentity(BaseAsset):
|
|
|
150
139
|
|
|
151
140
|
@property
|
|
152
141
|
def as_node(self) -> GHNode:
|
|
142
|
+
display_name = (
|
|
143
|
+
self.saml_identity.username
|
|
144
|
+
if self.saml_identity and self.saml_identity.username
|
|
145
|
+
else self.scim_identity.username
|
|
146
|
+
if self.scim_identity and self.scim_identity.username
|
|
147
|
+
else self.guid or self.node_id
|
|
148
|
+
)
|
|
153
149
|
|
|
154
150
|
return GHNode(
|
|
155
151
|
kinds=[nk.EXTERNAL_IDENTITY],
|
|
156
152
|
properties=GHExternalIdentityProperties(
|
|
157
|
-
name=
|
|
158
|
-
displayname=
|
|
153
|
+
name=display_name,
|
|
154
|
+
displayname=display_name,
|
|
159
155
|
node_id=self.node_id,
|
|
160
156
|
guid=self.guid,
|
|
161
157
|
saml_identity_username=self.saml_identity.username
|
|
@@ -209,66 +205,6 @@ class ExternalIdentity(BaseAsset):
|
|
|
209
205
|
"environment_type": environment_type,
|
|
210
206
|
}
|
|
211
207
|
|
|
212
|
-
@property
|
|
213
|
-
def _maps_to_user_edges(self):
|
|
214
|
-
foreign_idp_type, foreign_env_id = detect_foreign_idp(
|
|
215
|
-
issuer=self.idp["issuer"],
|
|
216
|
-
sso_url=self.idp["sso_url"],
|
|
217
|
-
)
|
|
218
|
-
foreign_kind = foreign_user_kind(foreign_idp_type)
|
|
219
|
-
|
|
220
|
-
foreign_username = None
|
|
221
|
-
if self.saml_identity and self.saml_identity.username:
|
|
222
|
-
foreign_username = self.saml_identity.username
|
|
223
|
-
elif self.scim_identity and self.scim_identity.username:
|
|
224
|
-
foreign_username = self.scim_identity.username
|
|
225
|
-
|
|
226
|
-
matchers = foreign_user_matchers(
|
|
227
|
-
foreign_kind,
|
|
228
|
-
foreign_env_id,
|
|
229
|
-
foreign_username,
|
|
230
|
-
self.saml_identity.attributes if self.saml_identity else [],
|
|
231
|
-
)
|
|
232
|
-
if foreign_kind and matchers:
|
|
233
|
-
yield Edge(
|
|
234
|
-
kind=ek.MAPS_TO_USER,
|
|
235
|
-
start=EdgePath(value=self.node_id, match_by="id"),
|
|
236
|
-
end=ConditionalEdgePath(
|
|
237
|
-
kind=foreign_kind,
|
|
238
|
-
property_matchers=matchers,
|
|
239
|
-
),
|
|
240
|
-
properties=EdgeProperties(traversable=False),
|
|
241
|
-
)
|
|
242
|
-
|
|
243
|
-
# SyncedToGHUser: foreign IdP user → GitHub user (traversable, with composition)
|
|
244
|
-
if matchers and self.user and self.user.id:
|
|
245
|
-
composition_matchers = [
|
|
246
|
-
matcher for matcher in matchers if matcher.key in {"name", "objectid"}
|
|
247
|
-
]
|
|
248
|
-
composition_predicates = " OR ".join(
|
|
249
|
-
f"n.{matcher.key} = '{matcher.value}'"
|
|
250
|
-
for matcher in composition_matchers
|
|
251
|
-
)
|
|
252
|
-
q = (
|
|
253
|
-
f"MATCH p=()<-[:GH_SyncedToEnvironment]-(:GH_SamlIdentityProvider)"
|
|
254
|
-
f"-[:GH_HasExternalIdentity]->(:GH_ExternalIdentity)"
|
|
255
|
-
f"-[:GH_MapsToUser]->(n) "
|
|
256
|
-
f"WHERE {composition_predicates} RETURN p"
|
|
257
|
-
)
|
|
258
|
-
yield Edge(
|
|
259
|
-
kind=ek.SYNCED_TO_GH_USER,
|
|
260
|
-
start=ConditionalEdgePath(
|
|
261
|
-
kind=foreign_kind,
|
|
262
|
-
property_matchers=matchers,
|
|
263
|
-
),
|
|
264
|
-
end=EdgePath(value=self.user.id, match_by="id"),
|
|
265
|
-
properties=GHEdgeProperties(
|
|
266
|
-
traversable=True,
|
|
267
|
-
composed=True,
|
|
268
|
-
query_composition=q,
|
|
269
|
-
),
|
|
270
|
-
)
|
|
271
|
-
|
|
272
208
|
@property
|
|
273
209
|
def service_provider_node_id(self) -> str | None:
|
|
274
210
|
return github_saml_service_provider_id(
|
|
@@ -363,5 +299,3 @@ class ExternalIdentity(BaseAsset):
|
|
|
363
299
|
end=EdgePath(value=self.user.id, match_by="id"),
|
|
364
300
|
properties=EdgeProperties(traversable=False),
|
|
365
301
|
)
|
|
366
|
-
|
|
367
|
-
yield from self._maps_to_user_edges
|
|
@@ -7,6 +7,7 @@ from pydantic import ConfigDict, Field
|
|
|
7
7
|
from openhound_github.graph import GHNode
|
|
8
8
|
from openhound_github.kinds import nodes as nk
|
|
9
9
|
from openhound_github.main import app
|
|
10
|
+
from openhound_github.models.enterprise_helpers import projected_enterprise_team_node_id
|
|
10
11
|
from openhound_github.models.team import GHTeamProperties
|
|
11
12
|
|
|
12
13
|
|
|
@@ -43,7 +44,7 @@ class ProjectedEnterpriseTeam(BaseAsset):
|
|
|
43
44
|
properties=GHTeamProperties(
|
|
44
45
|
name=self.name,
|
|
45
46
|
displayname=self.name,
|
|
46
|
-
node_id=
|
|
47
|
+
node_id=projected_enterprise_team_node_id(self.org_node_id, self.node_id),
|
|
47
48
|
github_team_id=self.node_id,
|
|
48
49
|
collected=False,
|
|
49
50
|
slug=self.slug,
|
{openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_helpers.py
RENAMED
|
@@ -3,27 +3,14 @@ from dataclasses import dataclass
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
from urllib.parse import quote, urlparse
|
|
5
5
|
|
|
6
|
-
from openhound.core.models.entries_dataclass import EdgeProperties
|
|
7
|
-
|
|
8
|
-
from openhound_github.kinds import nodes as nk
|
|
6
|
+
from openhound.core.models.entries_dataclass import EdgeProperties
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
SAML_CONTRACT_VERSION = "opengraph-saml-v0.3.0"
|
|
12
10
|
ENTRA_OBJECT_ID_CLAIM = "http://schemas.microsoft.com/identity/claims/objectidentifier"
|
|
13
|
-
ENTRA_TENANT_ID_CLAIM = "http://schemas.microsoft.com/identity/claims/tenantid"
|
|
14
11
|
DEFAULT_GITHUB_DEPLOYMENT_ID = "github.com"
|
|
15
12
|
DEFAULT_GITHUB_WEB_ORIGIN = "https://github.com"
|
|
16
13
|
|
|
17
|
-
_FOREIGN_USER_KIND = {
|
|
18
|
-
"entra": nk.AZ_USER,
|
|
19
|
-
"okta": nk.OKTA_USER,
|
|
20
|
-
"pingone": nk.PINGONE_USER,
|
|
21
|
-
}
|
|
22
|
-
_FOREIGN_USER_ENVIRONMENT_PROPERTY = {
|
|
23
|
-
nk.OKTA_USER: "tenant_domain",
|
|
24
|
-
nk.PINGONE_USER: "environmentid",
|
|
25
|
-
}
|
|
26
|
-
|
|
27
14
|
|
|
28
15
|
@dataclass
|
|
29
16
|
class SAMLRelationshipEdgeProperties(EdgeProperties):
|
|
@@ -67,47 +54,6 @@ def detect_foreign_idp(
|
|
|
67
54
|
|
|
68
55
|
return None, None
|
|
69
56
|
|
|
70
|
-
def foreign_user_kind(foreign_idp_type: str | None) -> str:
|
|
71
|
-
return _FOREIGN_USER_KIND.get(foreign_idp_type or "", "")
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def foreign_user_matchers(
|
|
75
|
-
foreign_kind: str | None,
|
|
76
|
-
foreign_environment_id: str | None,
|
|
77
|
-
foreign_username: str | None,
|
|
78
|
-
saml_attributes: list[Any] | None = None,
|
|
79
|
-
) -> list[PropertyMatch]:
|
|
80
|
-
"""Return tenant-scoped matchers for foreign IdP user correlation."""
|
|
81
|
-
if foreign_kind == nk.AZ_USER:
|
|
82
|
-
tenant_ids = saml_attribute_match_values(
|
|
83
|
-
saml_attributes or [],
|
|
84
|
-
ENTRA_TENANT_ID_CLAIM,
|
|
85
|
-
)
|
|
86
|
-
object_ids = saml_attribute_match_values(
|
|
87
|
-
saml_attributes or [],
|
|
88
|
-
ENTRA_OBJECT_ID_CLAIM,
|
|
89
|
-
)
|
|
90
|
-
if (
|
|
91
|
-
not foreign_environment_id
|
|
92
|
-
or len(tenant_ids) != 1
|
|
93
|
-
or len(object_ids) != 1
|
|
94
|
-
or tenant_ids[0].casefold() != foreign_environment_id.casefold()
|
|
95
|
-
):
|
|
96
|
-
return []
|
|
97
|
-
return [
|
|
98
|
-
PropertyMatch(key="tenantid", value=tenant_ids[0].upper()),
|
|
99
|
-
PropertyMatch(key="objectid", value=object_ids[0].upper()),
|
|
100
|
-
]
|
|
101
|
-
|
|
102
|
-
environment_property = _FOREIGN_USER_ENVIRONMENT_PROPERTY.get(foreign_kind or "")
|
|
103
|
-
if not environment_property or not foreign_environment_id or not foreign_username:
|
|
104
|
-
return []
|
|
105
|
-
return [
|
|
106
|
-
PropertyMatch(key=environment_property, value=foreign_environment_id),
|
|
107
|
-
PropertyMatch(key="name", value=foreign_username.upper()),
|
|
108
|
-
]
|
|
109
|
-
|
|
110
|
-
|
|
111
57
|
def github_deployment_context(host: str) -> tuple[str, str]:
|
|
112
58
|
"""Return a stable deployment ID and browser origin for a GitHub API host."""
|
|
113
59
|
parsed = urlparse(host)
|
|
@@ -137,6 +137,15 @@ class ScimOrganization(ScimScopeAsset):
|
|
|
137
137
|
return []
|
|
138
138
|
|
|
139
139
|
|
|
140
|
+
@app.asset()
|
|
141
|
+
class EnterpriseScimOrganization(ScimOrganization):
|
|
142
|
+
"""Enterprise-scoped SCIM organization input model.
|
|
143
|
+
|
|
144
|
+
This remains a distinct asset class so the converter can map enterprise and
|
|
145
|
+
organization SCIM tables independently while emitting the same graph kind.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
|
|
140
149
|
@app.asset(
|
|
141
150
|
node=NodeDef(
|
|
142
151
|
kind=nk.SCIM_USER,
|
|
@@ -189,7 +198,7 @@ class ScimUser(ScimScopeAsset):
|
|
|
189
198
|
id=self.id,
|
|
190
199
|
kinds=[nk.SCIM_USER],
|
|
191
200
|
properties=ScimNodeProperties(
|
|
192
|
-
name=self.id,
|
|
201
|
+
name=self.user_name or self.id,
|
|
193
202
|
displayname=display_name,
|
|
194
203
|
environmentid=self.scope_node_id,
|
|
195
204
|
external_id=self.external_id,
|
|
@@ -213,15 +222,16 @@ class ScimUser(ScimScopeAsset):
|
|
|
213
222
|
end=EdgePath(value=self.id, match_by="id"),
|
|
214
223
|
properties=EdgeProperties(traversable=True),
|
|
215
224
|
)
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
start=EdgePath(value=self.id, match_by="id"),
|
|
219
|
-
end=ConditionalEdgePath(
|
|
220
|
-
kind=nk.EXTERNAL_IDENTITY,
|
|
221
|
-
property_matchers=[PropertyMatch(key="guid", value=self.id)],
|
|
222
|
-
),
|
|
223
|
-
properties=EdgeProperties(traversable=True),
|
|
225
|
+
external_identity_id = self._lookup.external_identity_id_for_guid(
|
|
226
|
+
self.id, self.scope_name
|
|
224
227
|
)
|
|
228
|
+
if external_identity_id:
|
|
229
|
+
yield Edge(
|
|
230
|
+
kind=ek.SCIM_PROVISIONED,
|
|
231
|
+
start=EdgePath(value=self.id, match_by="id"),
|
|
232
|
+
end=EdgePath(value=external_identity_id, match_by="id"),
|
|
233
|
+
properties=EdgeProperties(traversable=True),
|
|
234
|
+
)
|
|
225
235
|
if self.emit_legacy_correlation and self.external_id:
|
|
226
236
|
yield Edge(
|
|
227
237
|
kind=ek.SCIM_PROVISIONED,
|
|
@@ -231,6 +241,11 @@ class ScimUser(ScimScopeAsset):
|
|
|
231
241
|
)
|
|
232
242
|
|
|
233
243
|
|
|
244
|
+
@app.asset()
|
|
245
|
+
class EnterpriseScimUser(ScimUser):
|
|
246
|
+
"""Enterprise-scoped SCIM user input model."""
|
|
247
|
+
|
|
248
|
+
|
|
234
249
|
@app.asset(
|
|
235
250
|
node=NodeDef(
|
|
236
251
|
kind=nk.SCIM_GROUP,
|