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

公開メンバ関数

void init ()
 
String getName ()
 
void jobToBeExecuted (JobExecutionContext context)
 

静的公開変数類

static final String LOCATION_TYPE_PROPERTY = "location_type"
 
static final String LOCATION_PATH_PROPERTY = "location_path"
 

非公開メンバ関数

void inited ()
 
oxCustomScript getScript (String acr)
 
void copyToLibsDir (oxCustomScript script)
 
byte [] getScriptContents (oxCustomScript script)
 
Map< String, String > modulePropertyMap (oxCustomScript script)
 

非公開変数類

Logger logger
 
TimerService timerService
 
ConfigurationHandler confHandler
 
LdapService ldapService
 
ExtensionsManager extManager
 
String scriptsJobName
 
Map< String, Integer > scriptHashes
 
String pythonLibLocation
 
ObjectMapper mapper
 

静的非公開変数類

static final int SCAN_INTERVAL = 45
 
static final String FILENAME_TEMPLATE = "cred-manager-external_{0}.py"
 

詳解

著者
jgomer

関数詳解

◆ copyToLibsDir()

void org.gluu.credmanager.service.AuthnScriptsReloader.copyToLibsDir ( oxCustomScript  script)
inlineprivate
165  {
166 
167  try {
168  String acr = script.getDisplayName();
169  byte[] contents = getScriptContents(script);
170  if (contents != null) {
171  Path destPath = Paths.get(pythonLibLocation, MessageFormat.format(FILENAME_TEMPLATE, acr));
172  Files.write(destPath, contents);
173  logger.trace("The script for acr '{}' has been copied to {}", acr, destPath.toString());
174  } else {
175  logger.warn("The script for acr '{}' was not copied to jython's lib path", acr);
176  }
177  } catch (Exception e) {
178  logger.error(e.getMessage(), e);
179  }
180 
181  }
byte [] getScriptContents(oxCustomScript script)
Definition: AuthnScriptsReloader.java:183
String pythonLibLocation
Definition: AuthnScriptsReloader.java:60
Logger logger
Definition: AuthnScriptsReloader.java:44
static final String FILENAME_TEMPLATE
Definition: AuthnScriptsReloader.java:41

◆ getName()

String org.gluu.credmanager.service.AuthnScriptsReloader.getName ( )
inline
74  {
75  return scriptsJobName;
76  }
String scriptsJobName
Definition: AuthnScriptsReloader.java:58

◆ getScript()

oxCustomScript org.gluu.credmanager.service.AuthnScriptsReloader.getScript ( String  acr)
inlineprivate
156  {
157 
158  oxCustomScript script = new oxCustomScript();
159  script.setDisplayName(acr);
160  List<oxCustomScript> scripts = ldapService.find(script, oxCustomScript.class, ldapService.getCustomScriptsDn());
161  return scripts.size() == 0 ? null : scripts.get(0);
162 
163  }
String getCustomScriptsDn()
Definition: LdapService.java:187
public< T > List< T > find(Class< T > clazz, String parentDn, String filter)
Definition: LdapService.java:222
LdapService ldapService
Definition: AuthnScriptsReloader.java:53

◆ getScriptContents()

byte [] org.gluu.credmanager.service.AuthnScriptsReloader.getScriptContents ( oxCustomScript  script)
inlineprivate
183  {
184 
185  byte[] bytes = null;
186  String acr = script.getDisplayName();
187  try {
188  Map<String, String> moduleProperties = modulePropertyMap(script);
189  ScriptLocationType locType = ScriptLocationType.getByValue(moduleProperties.get(LOCATION_TYPE_PROPERTY));
190 
191  switch (locType) {
192  case FILE:
193  bytes = Files.readAllBytes(Paths.get(moduleProperties.get(LOCATION_PATH_PROPERTY)));
194  break;
195  case LDAP:
196  bytes = script.getScript().getBytes(Charset.forName("utf-8"));
197  break;
198  default:
199  logger.warn("getScriptContents. Unknown 'location_type' value for script '{}'", acr);
200  }
201  } catch (Exception e) {
202  logger.error("getScriptContents. There was an error reading the bytes of script '{}': {}", acr, e.getMessage());
203  }
204  return bytes;
205 
206  }
static final String LOCATION_PATH_PROPERTY
Definition: AuthnScriptsReloader.java:40
static final String LOCATION_TYPE_PROPERTY
Definition: AuthnScriptsReloader.java:39
Logger logger
Definition: AuthnScriptsReloader.java:44
Map< String, String > modulePropertyMap(oxCustomScript script)
Definition: AuthnScriptsReloader.java:208

◆ init()

void org.gluu.credmanager.service.AuthnScriptsReloader.init ( )
inline
63  {
64  try {
66  //Start in 2 seconds and repeat indefinitely
68  } catch (Exception e) {
69  logger.error(e.getMessage(), e);
70  }
71  }
String scriptsJobName
Definition: AuthnScriptsReloader.java:58
TimerService timerService
Definition: AuthnScriptsReloader.java:47
static final int SCAN_INTERVAL
Definition: AuthnScriptsReloader.java:38
void addListener(JobListener jobListener, String jobName)
Definition: TimerService.java:66
JobKey schedule(String name, int count, int sleepTime)
Definition: TimerService.java:48
Logger logger
Definition: AuthnScriptsReloader.java:44

◆ inited()

void org.gluu.credmanager.service.AuthnScriptsReloader.inited ( )
inlineprivate
144  {
145  scriptsJobName = getClass().getSimpleName() + "_scripts";
146  scriptHashes = new HashMap<>();
147  mapper = new ObjectMapper();
148 
149  //Inside chroot the env variable is not set... why?. TODO: really?
150  //the following works fine in both windows dev environment, and linux VMs
151  pythonLibLocation = Optional.ofNullable(System.getenv("PYTHON_HOME")).orElse("/opt/gluu/python");
152  pythonLibLocation += File.separator + "lib";
153  logger.info("Using {} as jython's lib path", pythonLibLocation);
154  }
String pythonLibLocation
Definition: AuthnScriptsReloader.java:60
String scriptsJobName
Definition: AuthnScriptsReloader.java:58
ObjectMapper mapper
Definition: AuthnScriptsReloader.java:61
Map< String, Integer > scriptHashes
Definition: AuthnScriptsReloader.java:59
Logger logger
Definition: AuthnScriptsReloader.java:44

◆ jobToBeExecuted()

void org.gluu.credmanager.service.AuthnScriptsReloader.jobToBeExecuted ( JobExecutionContext  context)
inline
79  {
80 
81  Integer prevHash, currHash;
82  oxCustomScript script;
83 
84  boolean anyChanged = false;
85  Set<String> acrs = confHandler.getEnabledAcrs();
86 
87  logger.info("AuthnScriptsReloader. Running timer job for acrs: {}", acrs.toString());
88  for (String acr : acrs) {
89  script = getScript(acr);
90 
91  if (script != null) {
92  prevHash = scriptHashes.get(acr);
93  currHash = script.hashCode();
94  scriptHashes.put(acr, currHash);
95 
96  if (prevHash == null || !prevHash.equals(currHash)) {
97  //the script changed... Out-of-the-box methods' scripts must not be copied
98  if (!ConfigurationHandler.DEFAULT_SUPPORTED_METHODS.contains(acr)) {
99  copyToLibsDir(script);
100  }
101  //Force extension reloading (normally to re-read configuration properties)
103  anyChanged = true;
104  }
105  }
106  }
107 
108  if (anyChanged) {
109  //"touch" main script so that it gets reloaded as well
110  try {
111  logger.info("Touching main interception script to trigger reload by oxAuth...");
112  script = getScript(ConfigurationHandler.DEFAULT_ACR);
113  Map<String, String> moduleProperties = modulePropertyMap(script);
114  ScriptLocationType locType = ScriptLocationType.getByValue(moduleProperties.get(LOCATION_TYPE_PROPERTY));
115 
116  switch (locType) {
117  case FILE:
118  File f = Paths.get(moduleProperties.get(LOCATION_PATH_PROPERTY)).toFile();
119  if (f.setLastModified(System.currentTimeMillis())) {
120  logger.debug("Last modified timestamp of \"{}\" has been updated", f.getPath());
121  }
122  break;
123  case LDAP:
124  Long rev = Long.valueOf(script.getRevision());
125  rev = rev == Long.MAX_VALUE ? 0 : rev;
126  script.setRevision(Long.toString(rev + 1));
127  if (ldapService.modify(script, oxCustomScript.class)) {
128  logger.debug("oxRevision updated for script '{}'", script.getDisplayName());
129  }
130  break;
131  default:
132  //Added to pass checkstyle
133  }
134  } catch (Exception e) {
135  logger.error(e.getMessage(), e);
136  logger.warn("Main custom script could not be touched!");
137  logger.info("Recent changes in dependant scripts won't take effect until a new successful reload of script succeeds");
138  }
139  }
140 
141  }
static final String LOCATION_PATH_PROPERTY
Definition: AuthnScriptsReloader.java:40
void copyToLibsDir(oxCustomScript script)
Definition: AuthnScriptsReloader.java:165
ExtensionsManager extManager
Definition: AuthnScriptsReloader.java:56
Set< String > getEnabledAcrs()
Definition: ConfigurationHandler.java:249
LdapService ldapService
Definition: AuthnScriptsReloader.java:53
public< T > boolean modify(T object, Class< T > clazz)
Definition: LdapService.java:264
Map< String, Integer > scriptHashes
Definition: AuthnScriptsReloader.java:59
ConfigurationHandler confHandler
Definition: AuthnScriptsReloader.java:50
static final String LOCATION_TYPE_PROPERTY
Definition: AuthnScriptsReloader.java:39
Logger logger
Definition: AuthnScriptsReloader.java:44
Optional< AuthnMethod > getExtensionForAcr(String acr)
Definition: ExtensionsManager.java:138
oxCustomScript getScript(String acr)
Definition: AuthnScriptsReloader.java:156
Map< String, String > modulePropertyMap(oxCustomScript script)
Definition: AuthnScriptsReloader.java:208

◆ modulePropertyMap()

Map<String, String> org.gluu.credmanager.service.AuthnScriptsReloader.modulePropertyMap ( oxCustomScript  script)
inlineprivate
208  {
209 
210  Map<String, String> map = new HashMap<>();
211  for (String mprop : script.getModuleProperties()) {
212  try {
213  SimpleExtendedCustomProperty p = mapper.readValue(mprop, new TypeReference<SimpleExtendedCustomProperty>() {});
214  map.put(p.getValue1(), p.getValue2());
215  } catch (Exception e) {
216  logger.error("modulePropertyMap. Error while parsing module properties of script '{}': {}", script.getDisplayName(), e.getMessage());
217  }
218  }
219  return map;
220 
221  }
ObjectMapper mapper
Definition: AuthnScriptsReloader.java:61
Logger logger
Definition: AuthnScriptsReloader.java:44

メンバ詳解

◆ confHandler

ConfigurationHandler org.gluu.credmanager.service.AuthnScriptsReloader.confHandler
private

◆ extManager

ExtensionsManager org.gluu.credmanager.service.AuthnScriptsReloader.extManager
private

◆ FILENAME_TEMPLATE

final String org.gluu.credmanager.service.AuthnScriptsReloader.FILENAME_TEMPLATE = "cred-manager-external_{0}.py"
staticprivate

◆ ldapService

LdapService org.gluu.credmanager.service.AuthnScriptsReloader.ldapService
private

◆ LOCATION_PATH_PROPERTY

final String org.gluu.credmanager.service.AuthnScriptsReloader.LOCATION_PATH_PROPERTY = "location_path"
static

◆ LOCATION_TYPE_PROPERTY

final String org.gluu.credmanager.service.AuthnScriptsReloader.LOCATION_TYPE_PROPERTY = "location_type"
static

◆ logger

Logger org.gluu.credmanager.service.AuthnScriptsReloader.logger
private

◆ mapper

ObjectMapper org.gluu.credmanager.service.AuthnScriptsReloader.mapper
private

◆ pythonLibLocation

String org.gluu.credmanager.service.AuthnScriptsReloader.pythonLibLocation
private

◆ SCAN_INTERVAL

final int org.gluu.credmanager.service.AuthnScriptsReloader.SCAN_INTERVAL = 45
staticprivate

◆ scriptHashes

Map<String, Integer> org.gluu.credmanager.service.AuthnScriptsReloader.scriptHashes
private

◆ scriptsJobName

String org.gluu.credmanager.service.AuthnScriptsReloader.scriptsJobName
private

◆ timerService

TimerService org.gluu.credmanager.service.AuthnScriptsReloader.timerService
private

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