Class DefaultSyncContext

    • Field Detail

      • REP_LAST_SYNCED

        public static final String REP_LAST_SYNCED
        Name of the property that stores the time when an identity was synced.
        See Also:
        Constant Field Values
      • userManager

        protected final org.apache.jackrabbit.api.security.user.UserManager userManager
      • valueFactory

        protected final javax.jcr.ValueFactory valueFactory
      • keepMissing

        protected boolean keepMissing
      • forceUserSync

        protected boolean forceUserSync
      • forceGroupSync

        protected boolean forceGroupSync
      • now

        protected final long now
      • nowValue

        protected final javax.jcr.Value nowValue
    • Constructor Detail

      • DefaultSyncContext

        public DefaultSyncContext​(@NotNull
                                  @NotNull DefaultSyncConfig config,
                                  @NotNull
                                  @NotNull ExternalIdentityProvider idp,
                                  @NotNull
                                  @NotNull org.apache.jackrabbit.api.security.user.UserManager userManager,
                                  @NotNull
                                  @NotNull javax.jcr.ValueFactory valueFactory)
    • Method Detail

      • createSyncedIdentity

        @Nullable
        public static @Nullable DefaultSyncedIdentity createSyncedIdentity​(@Nullable
                                                                           @Nullable org.apache.jackrabbit.api.security.user.Authorizable auth)
                                                                    throws javax.jcr.RepositoryException
        Creates a synced identity from the given authorizable.
        Parameters:
        auth - the authorizable
        Returns:
        the id
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • getIdentityRef

        @Nullable
        public static @Nullable ExternalIdentityRef getIdentityRef​(@Nullable
                                                                   @Nullable org.apache.jackrabbit.api.security.user.Authorizable auth)
                                                            throws javax.jcr.RepositoryException
        Retrieves the external identity ref from the authorizable
        Parameters:
        auth - the authorizable
        Returns:
        the ref
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • joinPaths

        public static String joinPaths​(String... paths)
        Deprecated.
        Since Oak 1.3.10. Please use PathUtils.concatRelativePaths(String...) instead.
        Robust relative path concatenation.
        Parameters:
        paths - relative paths
        Returns:
        the concatenated path
      • close

        public void close()
        Closes this context and releases any resources bound to it. Note that an implementation must not commit the Root passed during the creation call. This is the responsibility of the application.
        Specified by:
        close in interface SyncContext
      • isKeepMissing

        public boolean isKeepMissing()
        Defines if synchronization keeps missing external identities on synchronization of authorizables. Default is false.
        Specified by:
        isKeepMissing in interface SyncContext
        Returns:
        true if keep missing.
      • isForceUserSync

        public boolean isForceUserSync()
        Defines if synchronization of users always will perform, i.e. ignores the last synced properties.
        Specified by:
        isForceUserSync in interface SyncContext
        Returns:
        true if forced syncing users
      • isForceGroupSync

        public boolean isForceGroupSync()
        Defines if synchronization of groups always will perform, i.e. ignores the last synced properties.
        Specified by:
        isForceGroupSync in interface SyncContext
        Returns:
        true if forced syncing groups
      • sync

        @NotNull
        public @NotNull SyncResult sync​(@NotNull
                                        @NotNull ExternalIdentity identity)
                                 throws SyncException
        Synchronizes an external identity with the repository based on the respective configuration.
        Specified by:
        sync in interface SyncContext
        Parameters:
        identity - the identity to sync.
        Returns:
        the result of the operation
        Throws:
        SyncException - if an error occurs
      • sync

        @NotNull
        public @NotNull SyncResult sync​(@NotNull
                                        @NotNull String id)
                                 throws SyncException
        Synchronizes an authorizable with the corresponding external identity with the repository based on the respective configuration.
        Specified by:
        sync in interface SyncContext
        Parameters:
        id - the id of the authorizable
        Returns:
        the result of the operation
        Throws:
        SyncException - if an error occurs
      • getAuthorizable

        @Nullable
        protected <T extends org.apache.jackrabbit.api.security.user.Authorizable> T getAuthorizable​(@NotNull
                                                                                                     @NotNull ExternalIdentity external,
                                                                                                     @NotNull
                                                                                                     @NotNull Class<T> type)
                                                                                              throws javax.jcr.RepositoryException,
                                                                                                     SyncException
        Retrieves the repository authorizable that corresponds to the given external identity
        Parameters:
        external - the external identity
        type - the authorizable type
        Returns:
        the repository authorizable or null if not found.
        Throws:
        javax.jcr.RepositoryException - if an error occurs.
        SyncException - if the repository contains a colliding authorizable with the same name.
      • createUser

        @NotNull
        protected @NotNull org.apache.jackrabbit.api.security.user.User createUser​(@NotNull
                                                                                   @NotNull ExternalUser externalUser)
                                                                            throws javax.jcr.RepositoryException
        Creates a new repository user for the given external one. Note that this method only creates the authorizable but does not perform any synchronization.
        Parameters:
        externalUser - the external user
        Returns:
        the repository user
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • createGroup

        @NotNull
        protected @NotNull org.apache.jackrabbit.api.security.user.Group createGroup​(@NotNull
                                                                                     @NotNull ExternalGroup externalGroup)
                                                                              throws javax.jcr.RepositoryException
        Creates a new repository group for the given external one. Note that this method only creates the authorizable but does not perform any synchronization.
        Parameters:
        externalGroup - the external group
        Returns:
        the repository group
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • syncUser

        @NotNull
        protected @NotNull DefaultSyncResultImpl syncUser​(@NotNull
                                                          @NotNull ExternalUser external,
                                                          @NotNull
                                                          @NotNull org.apache.jackrabbit.api.security.user.User user)
                                                   throws javax.jcr.RepositoryException
        Throws:
        javax.jcr.RepositoryException
      • syncGroup

        @NotNull
        protected @NotNull DefaultSyncResultImpl syncGroup​(@NotNull
                                                           @NotNull ExternalGroup external,
                                                           @NotNull
                                                           @NotNull org.apache.jackrabbit.api.security.user.Group group)
                                                    throws javax.jcr.RepositoryException
        Throws:
        javax.jcr.RepositoryException
      • syncMembership

        protected void syncMembership​(@NotNull
                                      @NotNull ExternalIdentity external,
                                      @NotNull
                                      @NotNull org.apache.jackrabbit.api.security.user.Authorizable auth,
                                      long depth)
                               throws javax.jcr.RepositoryException
        Recursively sync the memberships of an authorizable up-to the specified depth. If the given depth is equal or less than 0, no syncing is performed.
        Parameters:
        external - the external identity
        auth - the authorizable
        depth - recursion depth.
        Throws:
        javax.jcr.RepositoryException
      • applyMembership

        protected void applyMembership​(@NotNull
                                       @NotNull org.apache.jackrabbit.api.security.user.Authorizable member,
                                       @NotNull
                                       @NotNull Set<String> groups)
                                throws javax.jcr.RepositoryException
        Ensures that the given authorizable is member of the specific groups. Note that it does not create groups if missing, nor remove memberships of groups not in the given set.
        Parameters:
        member - the authorizable
        groups - set of groups.
        Throws:
        javax.jcr.RepositoryException
      • syncProperties

        protected void syncProperties​(@NotNull
                                      @NotNull ExternalIdentity ext,
                                      @NotNull
                                      @NotNull org.apache.jackrabbit.api.security.user.Authorizable auth,
                                      @NotNull
                                      @NotNull Map<String,​String> mapping)
                               throws javax.jcr.RepositoryException
        Syncs the properties specified in the mapping from the external identity to the given authorizable. Note that this method does not check for value equality and just blindly copies or deletes the properties.
        Parameters:
        ext - external identity
        auth - the authorizable
        mapping - the property mapping
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • isExpired

        protected boolean isExpired​(@NotNull
                                    @NotNull org.apache.jackrabbit.api.security.user.Authorizable auth,
                                    long expirationTime,
                                    @NotNull
                                    @NotNull String type)
                             throws javax.jcr.RepositoryException
        Checks if the given authorizable needs syncing based on the REP_LAST_SYNCED property.
        Parameters:
        auth - the authorizable to check
        expirationTime - the expiration time to compare to.
        type - debug message type
        Returns:
        true if the authorizable needs sync
        Throws:
        javax.jcr.RepositoryException
      • createValue

        @Nullable
        protected @Nullable javax.jcr.Value createValue​(@Nullable
                                                        @Nullable Object v)
                                                 throws javax.jcr.RepositoryException
        Creates a new JCR value of the given object, checking the internal type.
        Parameters:
        v - the value
        Returns:
        the JCR value or null
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • createValues

        @Nullable
        protected @Nullable javax.jcr.Value[] createValues​(@NotNull
                                                           @NotNull Collection<?> propValues)
                                                    throws javax.jcr.RepositoryException
        Creates an array of JCR values based on the type.
        Parameters:
        propValues - the given values
        Returns:
        and array of JCR values
        Throws:
        javax.jcr.RepositoryException - if an error occurs
      • isSameIDP

        protected boolean isSameIDP​(@Nullable
                                    @Nullable org.apache.jackrabbit.api.security.user.Authorizable auth)
                             throws javax.jcr.RepositoryException
        Checks if the given authorizable was synced from the same IDP by comparing the IDP name of the "rep:externalId" property.
        Parameters:
        auth - the authorizable.
        Returns:
        true if same IDP.
        Throws:
        javax.jcr.RepositoryException