gluu
公開メンバ関数 | 静的公開変数類 | 関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.gluu.credmanager.core.ExtensionsManager クラス
org.gluu.credmanager.core.ExtensionsManager の継承関係図
Inheritance graph
org.gluu.credmanager.core.ExtensionsManager 連携図
Collaboration graph

公開メンバ関数

Optional< AuthnMethodgetExtensionForAcr (String acr)
 
boolean pluginImplementsAuthnMethod (String acr, String plugId)
 
ClassLoader getPluginClassLoader (String clsName)
 
List< AuthnMethodgetAuthnMethodExts ()
 
Path getPluginsRoot ()
 
List< PluginWrapper > getPlugins ()
 
String loadPlugin (Path path)
 
boolean unloadPlugin (String pluginId)
 
boolean stopPlugin (String pluginId)
 
boolean deletePlugin (String pluginId)
 
boolean startPlugin (String pluginId)
 

静的公開変数類

static final String ASSETS_DIR = "assets"
 

関数

void scan ()
 
public< T > List< T > getSystemExtensionsForClass (Class< T > clazz)
 

非公開メンバ関数

void inited ()
 
boolean startPlugin (String pluginId, boolean refreshLabels)
 
List< AuthnMethodscanInnerAuthnMechanisms ()
 
void parsePluginAuthnMethodExtensions (String pluginId)
 
Path getDestinationPathForPlugin (String pluginId)
 
void extractResources (String pluginId, Path path) throws IOException
 
void reconfigureServices (String pluginId, Path path, ClassLoader cl)
 
void purgePluginsPath ()
 

非公開変数類

Logger logger
 
ConfigurationHandler configurationHandler
 
ZKService zkService
 
MainSettings mainSettings
 
ResourceExtractor resourceExtractor
 
RSRegistryHandler registryHandler
 
Path pluginsRoot
 
PluginManager pluginManager
 
Map< String, List< AuthnMethod > > plugExtensionMap
 

静的非公開変数類

static final String PLUGINS_DIR_NAME = "plugins"
 
static final Class< AuthnMethodAUTHN_METHOD_CLASS = AuthnMethod.class
 

詳解

著者
jgomer

関数詳解

◆ deletePlugin()

boolean org.gluu.credmanager.core.ExtensionsManager.deletePlugin ( String  pluginId)
inline
229  {
230 
231  //Not used, see: https://github.com/pf4j/pf4j/issues/217
232  boolean success = pluginManager.deletePlugin(pluginId);
233  if (!success) {
234  logger.warn("Plugin '{}' could not be unloaded or deleted", pluginId);
235  }
236  return success;
237 
238  }
Logger logger
Definition: ExtensionsManager.java:43
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ extractResources()

void org.gluu.credmanager.core.ExtensionsManager.extractResources ( String  pluginId,
Path  path 
) throws IOException
inlineprivate
312  {
313 
314  Path destPath = getDestinationPathForPlugin(pluginId);
315  logger.info("Extracting resources for plugin {} to {}", pluginId, destPath.toString());
316 
317  if (Files.isDirectory(path)) {
318  path = Paths.get(path.toString(), ASSETS_DIR);
319  if (Files.isDirectory(path)) {
320  resourceExtractor.createDirectory(path, destPath);
321  } else {
322  logger.info("No resources to extract");
323  }
324  } else if (Utils.isJarFile(path)) {
325  try (JarInputStream jis = new JarInputStream(new BufferedInputStream(new FileInputStream(path.toString())), false)) {
326  resourceExtractor.createDirectory(jis, ASSETS_DIR + "/", destPath);
327  }
328  }
329 
330  }
static final String ASSETS_DIR
Definition: ExtensionsManager.java:37
Path getDestinationPathForPlugin(String pluginId)
Definition: ExtensionsManager.java:308
Logger logger
Definition: ExtensionsManager.java:43
void createDirectory(Path sourcePath, Path destinationPath)
Definition: ResourceExtractor.java:96
ResourceExtractor resourceExtractor
Definition: ExtensionsManager.java:55

◆ getAuthnMethodExts()

List<AuthnMethod> org.gluu.credmanager.core.ExtensionsManager.getAuthnMethodExts ( )
inline
180  {
181  return plugExtensionMap.values().stream().flatMap(List::stream).collect(Collectors.toList());
182  }
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64

◆ getDestinationPathForPlugin()

Path org.gluu.credmanager.core.ExtensionsManager.getDestinationPathForPlugin ( String  pluginId)
inlineprivate
308  {
309  return Paths.get(zkService.getAppFileSystemRoot(), RSRegistryHandler.ENDPOINTS_PREFIX, pluginId);
310  }
String getAppFileSystemRoot()
Definition: ZKService.java:165
ZKService zkService
Definition: ExtensionsManager.java:49

◆ getExtensionForAcr()

Optional<AuthnMethod> org.gluu.credmanager.core.ExtensionsManager.getExtensionForAcr ( String  acr)
inline
138  {
139 
140  AuthnMethod handler = null;
141  String plugId = mainSettings.getAcrPluginMap().get(acr);
142 
143  List<AuthnMethod> exts = plugExtensionMap.get(plugId);
144  //Returns the first occurrence!
145  for (AuthnMethod aMethod : exts) {
146  if (aMethod.getAcr().equals(acr)) {
147  handler = exts.get(0);
148  break;
149  }
150  }
151  return Optional.ofNullable(handler);
152 
153  }
MainSettings mainSettings
Definition: ExtensionsManager.java:52
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64
Map< String, String > getAcrPluginMap()
Definition: MainSettings.java:110

◆ getPluginClassLoader()

ClassLoader org.gluu.credmanager.core.ExtensionsManager.getPluginClassLoader ( String  clsName)
inline

org.gluu.credmanager.service.IExtensionsManagerを実装しています。

159  {
160 
161  ClassLoader clsLoader = null;
162  for (PluginWrapper wrapper : pluginManager.getStartedPlugins()) {
163  try {
164  String pluginClassName = wrapper.getDescriptor().getPluginClass();
165  ClassLoader loader = wrapper.getPluginClassLoader();
166 
167  Class<?> cls = loader.loadClass(pluginClassName);
168  if (clsName.startsWith(cls.getPackage().getName())) {
169  clsLoader = loader;
170  break;
171  }
172  } catch (ClassNotFoundException e) {
173  //Intentionally left empty
174  }
175  }
176  return clsLoader;
177 
178  }
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ getPlugins()

List<PluginWrapper> org.gluu.credmanager.core.ExtensionsManager.getPlugins ( )
inline
192  {
193  return pluginManager.getPlugins();
194  }
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ getPluginsRoot()

Path org.gluu.credmanager.core.ExtensionsManager.getPluginsRoot ( )
inline
188  {
189  return pluginsRoot;
190  }
Path pluginsRoot
Definition: ExtensionsManager.java:60

◆ getSystemExtensionsForClass()

public<T> List<T> org.gluu.credmanager.core.ExtensionsManager.getSystemExtensionsForClass ( Class< T >  clazz)
inlinepackage
184  {
185  return pluginManager.getExtensions(clazz);
186  }
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ inited()

void org.gluu.credmanager.core.ExtensionsManager.inited ( )
inlineprivate
67  {
68 
69  pluginsRoot = Paths.get(System.getProperty("server.base"), PLUGINS_DIR_NAME);
70  pluginManager = new DefaultPluginManager();
71  plugExtensionMap = new HashMap<>(); //It accepts null keys
72 
73  if (Files.isDirectory(pluginsRoot)) {
75  } else {
76  pluginsRoot = null;
77  logger.warn("External plugins directory does not exist: there is no valid location for searching");
78  }
79 
80  }
void purgePluginsPath()
Definition: ExtensionsManager.java:345
Logger logger
Definition: ExtensionsManager.java:43
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64
PluginManager pluginManager
Definition: ExtensionsManager.java:62
static final String PLUGINS_DIR_NAME
Definition: ExtensionsManager.java:39
Path pluginsRoot
Definition: ExtensionsManager.java:60

◆ loadPlugin()

String org.gluu.credmanager.core.ExtensionsManager.loadPlugin ( Path  path)
inline
196  {
197  String id = pluginManager.loadPlugin(path);
198  if (id != null) {
199  logger.debug("Loaded plugin {}, now in state {}", id, pluginManager.getPlugin(id).getPluginState().toString());
200  } else {
201  logger.warn("Plugin found at {} could not be loaded", path.toString());
202  }
203  return id;
204  }
Logger logger
Definition: ExtensionsManager.java:43
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ parsePluginAuthnMethodExtensions()

void org.gluu.credmanager.core.ExtensionsManager.parsePluginAuthnMethodExtensions ( String  pluginId)
inlineprivate
290  {
291 
292  List<AuthnMethod> ames = pluginManager.getExtensions(AUTHN_METHOD_CLASS, pluginId);
293  if (ames.size() > 0) {
294  logger.info("Plugin extends {} at {} point(s)", AUTHN_METHOD_CLASS.getName(), ames.size());
295 
296  for (AuthnMethod ext : ames) {
297  logger.info("Extension point found to deal with acr value '{}'", ext.getAcr());
298  }
299 
300  List<AuthnMethod> exts = new ArrayList<>(ames);
301  //I think this is safer than simply plugExtensionMap.put(pluginId, ames)
302  plugExtensionMap.put(pluginId, exts);
303 
304  }
305 
306  }
static final Class< AuthnMethod > AUTHN_METHOD_CLASS
Definition: ExtensionsManager.java:40
Logger logger
Definition: ExtensionsManager.java:43
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ pluginImplementsAuthnMethod()

boolean org.gluu.credmanager.core.ExtensionsManager.pluginImplementsAuthnMethod ( String  acr,
String  plugId 
)
inline
155  {
156  return plugExtensionMap.get(plugId).stream().anyMatch(aMethod -> aMethod.getAcr().equals(acr));
157  }
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64

◆ purgePluginsPath()

void org.gluu.credmanager.core.ExtensionsManager.purgePluginsPath ( )
inlineprivate
345  {
346 
347  //Deletes all files in path directory as a consequence of https://github.com/pf4j/pf4j/issues/217
348  //Also prevents cheating...
349  try {
350  List<PluginInfo> pls = Optional.ofNullable(mainSettings.getKnownPlugins()).orElse(Collections.emptyList());
351  List<String> validFileNames = pls.stream().map(PluginInfo::getRelativePath).collect(Collectors.toList());
352 
353  Files.list(pluginsRoot).forEach(p -> {
354  if (Files.isRegularFile(p)) {
355  if (!validFileNames.contains(p.getFileName().toString())) {
356  try {
357  Files.delete(p);
358  } catch (Exception e) {
359  logger.error("Error deleting unnecesary file {}: {}", p.toString(), e.getMessage());
360  }
361  }
362  } else if (Files.isDirectory(p)) {
363  //TODO add support for directory-based plugins
364  }
365  });
366 
367  } catch (Exception e) {
368  logger.error(e.getMessage(), e);
369  logger.warn("An error occured while cleaning plugins directory {}", pluginsRoot.toString());
370  }
371 
372  }
List< PluginInfo > getKnownPlugins()
Definition: MainSettings.java:130
Logger logger
Definition: ExtensionsManager.java:43
MainSettings mainSettings
Definition: ExtensionsManager.java:52
String getRelativePath()
Definition: PluginInfo.java:25
Path pluginsRoot
Definition: ExtensionsManager.java:60

◆ reconfigureServices()

void org.gluu.credmanager.core.ExtensionsManager.reconfigureServices ( String  pluginId,
Path  path,
ClassLoader  cl 
)
inlineprivate
332  {
333 
334  try {
335  extractResources(pluginId, path);
336  } catch (IOException e) {
337  logger.error("Error when extracting plugin resources");
338  logger.error(e.getMessage(), e);
339  }
340  zkService.readPluginLabels(pluginId, path);
341  registryHandler.scan(pluginId, path, cl);
342 
343  }
Logger logger
Definition: ExtensionsManager.java:43
void scan(String id, Path path, ClassLoader classLoader)
Definition: RSRegistryHandler.java:182
RSRegistryHandler registryHandler
Definition: ExtensionsManager.java:58
void readPluginLabels(String id, Path path)
Definition: ZKService.java:169
void extractResources(String pluginId, Path path)
Definition: ExtensionsManager.java:312
ZKService zkService
Definition: ExtensionsManager.java:49

◆ scan()

void org.gluu.credmanager.core.ExtensionsManager.scan ( )
inlinepackage
82  {
83 
84  //Load inner extensions first, then load plugins
86 
87  if (pluginsRoot != null) {
88  List<PluginInfo> pls = Optional.ofNullable(mainSettings.getKnownPlugins()).orElse(Collections.emptyList());
89 
90  if (pls.size() > 0) {
91  logger.info("Loading external plugins...");
92 
93  List<String> loaded = new ArrayList<>();
94  for (PluginInfo pl : pls) {
95  String id = loadPlugin(Paths.get(pluginsRoot.toString(), pl.getRelativePath()));
96  if (id != null) {
97  loaded.add(id);
98  }
99  }
100 
101  logger.info("Total plugins loaded {}", loaded.size());
102  int started = 0;
103 
104  for (String pluginId : loaded) {
105  if (pls.stream().anyMatch(pl -> pl.getId().equals(pluginId) && PluginState.STARTED.toString().equals(pl.getState()))) {
106 
107  if (startPlugin(pluginId, false)) {
108  started++;
109  PluginWrapper wrapper = pluginManager.getPlugin(pluginId);
110 
111  logger.info("Plugin {} ({}) started", pluginId, wrapper.getDescriptor().getPluginClass());
112 
113  Set<String> classNames = pluginManager.getExtensionClassNames(pluginId);
114  //classNames.remove(AUTHN_METHOD_CLASS.getName());
115  if (classNames.size() > 0) {
116  logger.info("Plugin's extensions are at: {}", classNames.toString());
117  }
118  logger.info("");
119 
120  }
121  }
122  }
123  logger.info("Plugins started {}", started);
124  }
126 
127  }
128 
129  long distinctAcrs = plugExtensionMap.values().stream().flatMap(List::stream).map(AuthnMethod::getAcr).distinct().count();
130  if (distinctAcrs < plugExtensionMap.values().stream().mapToLong(List::size).sum()) {
131  logger.warn("Several extensions pretend to handle the same acr.");
132  logger.warn("Only the first one parsed for the plugin referenced in the config file will be effective");
133  logger.warn("The system extension (if exists) will be used if no plugin can handle an acr");
134  }
135 
136  }
List< PluginInfo > getKnownPlugins()
Definition: MainSettings.java:130
List< AuthnMethod > scanInnerAuthnMechanisms()
Definition: ExtensionsManager.java:273
Logger logger
Definition: ExtensionsManager.java:43
MainSettings mainSettings
Definition: ExtensionsManager.java:52
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64
PluginManager pluginManager
Definition: ExtensionsManager.java:62
String loadPlugin(Path path)
Definition: ExtensionsManager.java:196
boolean startPlugin(String pluginId)
Definition: ExtensionsManager.java:240
Path pluginsRoot
Definition: ExtensionsManager.java:60
void refreshLabels()
Definition: ZKService.java:190
ZKService zkService
Definition: ExtensionsManager.java:49

◆ scanInnerAuthnMechanisms()

List<AuthnMethod> org.gluu.credmanager.core.ExtensionsManager.scanInnerAuthnMechanisms ( )
inlineprivate
273  {
274 
275  List<AuthnMethod> actualAMEs = new ArrayList<>();
276  List<AuthnMethod> authnMethodExtensions = pluginManager.getExtensions(AUTHN_METHOD_CLASS);
277  if (authnMethodExtensions != null) {
278 
279  for (AuthnMethod ext : authnMethodExtensions) {
280  String acr = ext.getAcr();
281  String name = ext.getClass().getName();
282  logger.info("Found system extension '{}' for {}", name, acr);
283  actualAMEs.add(ext);
284  }
285  }
286  return actualAMEs;
287 
288  }
static final Class< AuthnMethod > AUTHN_METHOD_CLASS
Definition: ExtensionsManager.java:40
Logger logger
Definition: ExtensionsManager.java:43
PluginManager pluginManager
Definition: ExtensionsManager.java:62

◆ startPlugin() [1/2]

boolean org.gluu.credmanager.core.ExtensionsManager.startPlugin ( String  pluginId)
inline
240  {
241  return startPlugin(pluginId, true);
242  }
boolean startPlugin(String pluginId)
Definition: ExtensionsManager.java:240

◆ startPlugin() [2/2]

boolean org.gluu.credmanager.core.ExtensionsManager.startPlugin ( String  pluginId,
boolean  refreshLabels 
)
inlineprivate
244  {
245 
246  boolean success = false;
247  PluginState state = pluginManager.startPlugin(pluginId);
248  Path path = pluginManager.getPlugin(pluginId).getPluginPath();
249 
250  if (PluginState.STARTED.equals(state)) {
252 
253  /*
254  //Notifies activation/deactivation for extensions handling authentication methods
255  Set<String> acrs = configurationHandler.retrieveAcrs();
256  plugExtensionMap.forEach(pair -> pair.getX().deactivate());
257  for (String acr : acrs) {
258  getExtensionForAcr(acr).activate();
259  } */
260  reconfigureServices(pluginId, path, pluginManager.getPluginClassLoader(pluginId));
261  success = true;
262 
263  if (refreshLabels) {
265  }
266  } else {
267  logger.warn("Plugin loaded from {} not started. Current state is {}", path.toString(), state == null ? null : state.toString());
268  }
269  return success;
270 
271  }
Logger logger
Definition: ExtensionsManager.java:43
PluginManager pluginManager
Definition: ExtensionsManager.java:62
void reconfigureServices(String pluginId, Path path, ClassLoader cl)
Definition: ExtensionsManager.java:332
void parsePluginAuthnMethodExtensions(String pluginId)
Definition: ExtensionsManager.java:290
void refreshLabels()
Definition: ZKService.java:190
ZKService zkService
Definition: ExtensionsManager.java:49

◆ stopPlugin()

boolean org.gluu.credmanager.core.ExtensionsManager.stopPlugin ( String  pluginId)
inline
212  {
213 
214  PluginState state = pluginManager.stopPlugin(pluginId);
215  try {
216  if (state.equals(PluginState.STOPPED)) {
217  plugExtensionMap.remove(pluginId);
218  zkService.removePluginLabels(pluginId);
219  registryHandler.remove(pluginId);
221  }
222  } catch (Exception e) {
223  logger.error(e.getMessage(), e);
224  }
225  return state.equals(PluginState.STOPPED);
226 
227  }
void removeDestinationDirectory(Path destPath)
Definition: ResourceExtractor.java:134
void remove(String id)
Definition: RSRegistryHandler.java:207
Path getDestinationPathForPlugin(String pluginId)
Definition: ExtensionsManager.java:308
Logger logger
Definition: ExtensionsManager.java:43
Map< String, List< AuthnMethod > > plugExtensionMap
Definition: ExtensionsManager.java:64
void removePluginLabels(String id)
Definition: ZKService.java:176
PluginManager pluginManager
Definition: ExtensionsManager.java:62
RSRegistryHandler registryHandler
Definition: ExtensionsManager.java:58
ResourceExtractor resourceExtractor
Definition: ExtensionsManager.java:55
ZKService zkService
Definition: ExtensionsManager.java:49

◆ unloadPlugin()

boolean org.gluu.credmanager.core.ExtensionsManager.unloadPlugin ( String  pluginId)
inline
206  {
207  boolean unloaded = pluginManager.unloadPlugin(pluginId);
208  logger.debug("Plugin {} was{} unloaded", pluginId, unloaded ? "" : "not");
209  return unloaded;
210  }
Logger logger
Definition: ExtensionsManager.java:43
PluginManager pluginManager
Definition: ExtensionsManager.java:62

メンバ詳解

◆ ASSETS_DIR

final String org.gluu.credmanager.core.ExtensionsManager.ASSETS_DIR = "assets"
static

◆ AUTHN_METHOD_CLASS

final Class<AuthnMethod> org.gluu.credmanager.core.ExtensionsManager.AUTHN_METHOD_CLASS = AuthnMethod.class
staticprivate

◆ configurationHandler

ConfigurationHandler org.gluu.credmanager.core.ExtensionsManager.configurationHandler
private

◆ logger

Logger org.gluu.credmanager.core.ExtensionsManager.logger
private

◆ mainSettings

MainSettings org.gluu.credmanager.core.ExtensionsManager.mainSettings
private

◆ plugExtensionMap

Map<String, List<AuthnMethod> > org.gluu.credmanager.core.ExtensionsManager.plugExtensionMap
private

◆ pluginManager

PluginManager org.gluu.credmanager.core.ExtensionsManager.pluginManager
private

◆ PLUGINS_DIR_NAME

final String org.gluu.credmanager.core.ExtensionsManager.PLUGINS_DIR_NAME = "plugins"
staticprivate

◆ pluginsRoot

Path org.gluu.credmanager.core.ExtensionsManager.pluginsRoot
private

◆ registryHandler

RSRegistryHandler org.gluu.credmanager.core.ExtensionsManager.registryHandler
private

◆ resourceExtractor

ResourceExtractor org.gluu.credmanager.core.ExtensionsManager.resourceExtractor
private

◆ zkService

ZKService org.gluu.credmanager.core.ExtensionsManager.zkService
private

このクラス詳解は次のファイルから抽出されました: