001/* 002 * (C) Copyright 2006-2013 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo 016 */ 017 018package org.nuxeo.ecm.platform.oauth2.openid; 019 020import java.util.Collection; 021import java.util.HashMap; 022import java.util.Map; 023 024import org.nuxeo.runtime.model.ContributionFragmentRegistry; 025 026/** 027 * @author <a href="mailto:tdelprat@nuxeo.com">Tiry</a> 028 * @since 5.7 029 */ 030public class OpenIDProviderFragmentRegistry extends ContributionFragmentRegistry<OpenIDConnectProviderDescriptor> { 031 032 protected final Map<String, OpenIDConnectProviderDescriptor> providers = new HashMap<String, OpenIDConnectProviderDescriptor>(); 033 034 @Override 035 public OpenIDConnectProviderDescriptor clone(OpenIDConnectProviderDescriptor source) { 036 037 OpenIDConnectProviderDescriptor copy = new OpenIDConnectProviderDescriptor(); 038 039 copy.scopes = source.scopes; 040 copy.authorizationServerURL = source.authorizationServerURL; 041 copy.clientId = source.clientId; 042 copy.clientSecret = source.clientSecret; 043 copy.icon = source.icon; 044 copy.enabled = source.enabled; 045 copy.name = source.name; 046 copy.tokenServerURL = source.tokenServerURL; 047 copy.userInfoURL = source.userInfoURL; 048 copy.label = source.label; 049 copy.description = source.description; 050 copy.redirectUriResolver = source.redirectUriResolver; 051 copy.userResolverClass = source.userResolverClass; 052 copy.accessTokenKey = source.accessTokenKey; 053 copy.userInfoClass = source.userInfoClass; 054 return copy; 055 } 056 057 @Override 058 public void contributionRemoved(String name, OpenIDConnectProviderDescriptor origContrib) { 059 providers.remove(name); 060 } 061 062 @Override 063 public void contributionUpdated(String name, OpenIDConnectProviderDescriptor contrib, 064 OpenIDConnectProviderDescriptor newOrigContrib) { 065 if (contrib.isEnabled()) { 066 providers.put(name, contrib); 067 } else { 068 providers.remove(name); 069 } 070 } 071 072 @Override 073 public String getContributionId(OpenIDConnectProviderDescriptor contrib) { 074 return contrib.getName(); 075 } 076 077 @Override 078 public void merge(OpenIDConnectProviderDescriptor src, OpenIDConnectProviderDescriptor dst) { 079 080 if (dst.authorizationServerURL == null || dst.authorizationServerURL.isEmpty()) { 081 dst.authorizationServerURL = src.authorizationServerURL; 082 } 083 if (dst.clientId == null || dst.clientId.isEmpty()) { 084 dst.clientId = src.clientId; 085 } 086 if (dst.clientSecret == null || dst.clientSecret.isEmpty()) { 087 dst.clientSecret = src.clientSecret; 088 } 089 if (dst.icon == null || dst.icon.isEmpty()) { 090 dst.icon = src.icon; 091 } 092 if (dst.scopes == null || dst.scopes.length == 0) { 093 dst.scopes = src.scopes; 094 } 095 if (dst.tokenServerURL == null || dst.tokenServerURL.isEmpty()) { 096 dst.tokenServerURL = src.tokenServerURL; 097 } 098 if (dst.userInfoURL == null || dst.userInfoURL.isEmpty()) { 099 dst.userInfoURL = src.userInfoURL; 100 } 101 if (dst.label == null || dst.label.isEmpty()) { 102 dst.label = src.label; 103 } 104 if (dst.description == null || dst.description.isEmpty()) { 105 dst.description = src.description; 106 } 107 if (!src.accessTokenKey.equals(OpenIDConnectProviderDescriptor.DEFAULT_ACCESS_TOKEN_KEY)) { 108 dst.accessTokenKey = src.accessTokenKey; 109 } 110 if (src.userInfoClass != OpenIDConnectProviderDescriptor.DEFAULT_USER_INFO_CLASS) { 111 dst.userInfoClass = src.userInfoClass; 112 } 113 if (src.redirectUriResolver != OpenIDConnectProviderDescriptor.DEFAULT_REDIRECT_URI_RESOLVER_CLASS) { 114 dst.redirectUriResolver = src.redirectUriResolver; 115 } 116 if (src.userResolverClass != OpenIDConnectProviderDescriptor.DEFAULT_USER_RESOLVER_CLASS) { 117 dst.userResolverClass = src.userResolverClass; 118 } 119 120 dst.accessTokenKey = src.accessTokenKey; 121 122 dst.userInfoClass = src.userInfoClass; 123 124 dst.redirectUriResolver = src.redirectUriResolver; 125 126 dst.userResolverClass = src.userResolverClass; 127 128 dst.enabled = src.enabled; 129 } 130 131 public Collection<OpenIDConnectProviderDescriptor> getContribs() { 132 return providers.values(); 133 } 134}