Skip to content

Commit 916b100

Browse files
authored
Addition iRODS CS_NEG and AUTH_SCHEME configuration options (#141)
See #111
1 parent af0e853 commit 916b100

File tree

6 files changed

+106
-17
lines changed

6 files changed

+106
-17
lines changed

pom.xml

+3-2
Original file line numberDiff line numberDiff line change
@@ -2024,7 +2024,8 @@
20242024
<dependency>
20252025
<groupId>org.irods.jargon</groupId>
20262026
<artifactId>jargon-core</artifactId>
2027-
<version>4.3.2.5-RELEASE</version>
2027+
<!--<version>4.3.2.5-RELEASE</version>-->
2028+
<version>4.3.4.0-RELEASE</version>
20282029
<exclusions>
20292030
<exclusion>
20302031
<groupId>com.fasterxml.jackson.core</groupId>
@@ -2923,7 +2924,7 @@
29232924
<jstl.version>1.1.2</jstl.version>
29242925
<lucene.version>5.5.5</lucene.version>
29252926
<netty.version>4.1.63.Final</netty.version>
2926-
<rspace-core-model.version>2.1.0</rspace-core-model.version>
2927+
<rspace-core-model.version>2.7.1</rspace-core-model.version>
29272928
<servlet.version>3.1.0</servlet.version>
29282929
<sitemesh.version>2.4.2</sitemesh.version>
29292930
<urlrewrite.version>4.0.3</urlrewrite.version>

src/main/java/com/researchspace/netfiles/NfsFactory.java

+50-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@
1212
import com.researchspace.netfiles.samba.SmbjClient;
1313
import com.researchspace.netfiles.sftp.SftpClient;
1414
import org.apache.commons.lang.StringUtils;
15+
import org.irods.jargon.core.connection.AuthScheme;
16+
import org.irods.jargon.core.connection.ClientServerNegotiationPolicy;
17+
import org.irods.jargon.core.connection.ClientServerNegotiationPolicy.SslNegotiationPolicy;
1518
import org.irods.jargon.core.connection.IRODSAccount;
19+
import org.irods.jargon.core.connection.IRODSSession;
20+
import org.irods.jargon.core.connection.SettableJargonProperties;
21+
import org.irods.jargon.core.pub.IRODSFileSystem;
1622
import org.slf4j.Logger;
1723
import org.slf4j.LoggerFactory;
1824
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,9 +28,13 @@
2228
/** Class providing various Net File Store implementations depending on deployment.properties */
2329
@Component
2430
public class NfsFactory {
25-
31+
2632
private static final int IRODS_DEFAULT_PORT = 1247;
2733

34+
private static final String IRODS_DEFAULT_CSNEG = "CS_NEG_REFUSE";
35+
36+
private static final String IRODS_DEFAULT_AUTH = "NATIVE";
37+
2838
private static final Logger log = LoggerFactory.getLogger(NfsFactory.class);
2939

3040
@Autowired private NfsUserPasswordAuthentication userPasswordAuthentication;
@@ -91,18 +101,53 @@ public NfsClient getNfsClient(String nfsusername, String nfspassword, NfsFileSys
91101
fileSystem.getClientOption(NfsFileSystemOption.SFTP_SERVER_PUBLIC_KEY));
92102
}
93103
if (NfsClientType.IRODS.equals(clientType)) {
104+
94105
int irodsPort;
95-
irodsPort = (StringUtils.isBlank(fileSystem.getClientOption(NfsFileSystemOption.IRODS_PORT))) ? IRODS_DEFAULT_PORT : Integer.parseInt(fileSystem.getClientOption(NfsFileSystemOption.IRODS_PORT));
96-
return new IRODSClient(
106+
String irodsCSNeg;
107+
String irodsAuth;
108+
109+
irodsPort =
110+
(StringUtils.isBlank(fileSystem.getClientOption(NfsFileSystemOption.IRODS_PORT)))
111+
? IRODS_DEFAULT_PORT
112+
: Integer.parseInt(fileSystem.getClientOption(NfsFileSystemOption.IRODS_PORT));
113+
irodsCSNeg =
114+
(StringUtils.isBlank(fileSystem.getClientOption(NfsFileSystemOption.IRODS_CSNEG)))
115+
? IRODS_DEFAULT_CSNEG
116+
: fileSystem.getClientOption(NfsFileSystemOption.IRODS_CSNEG);
117+
118+
IRODSAccount ia =
97119
new IRODSAccount(
98120
fileSystem.getUrl(),
99121
irodsPort,
100122
nfsusername,
101123
nfspassword,
102124
fileSystem.getClientOption(NfsFileSystemOption.IRODS_HOME_DIR),
103125
fileSystem.getClientOption(NfsFileSystemOption.IRODS_ZONE),
104-
""),
105-
new JargonFacade());
126+
"");
127+
JargonFacade jf = new JargonFacade();
128+
129+
// set up iRODS CS NEG
130+
// here you could set all jargon/irods props
131+
// see
132+
// jargon-core/src/main/java/org/irods/jargon/core/connection/SettableJargonProperties.java
133+
IRODSFileSystem iRODSFs = jf.iRODSFs;
134+
IRODSSession session = iRODSFs.getIrodsSession();
135+
SettableJargonProperties props = new SettableJargonProperties(session.getJargonProperties());
136+
SslNegotiationPolicy sslNegPolicy =
137+
ClientServerNegotiationPolicy.findSslNegotiationPolicyFromString(irodsCSNeg);
138+
props.setNegotiationPolicy(sslNegPolicy);
139+
session.setJargonProperties(props);
140+
141+
// set iRODS auth scheme
142+
irodsAuth =
143+
(StringUtils.isBlank(fileSystem.getClientOption(NfsFileSystemOption.IRODS_AUTH)))
144+
? IRODS_DEFAULT_AUTH
145+
: fileSystem.getClientOption(NfsFileSystemOption.IRODS_AUTH);
146+
147+
AuthScheme ias = (irodsAuth.equals("NATIVE")) ? AuthScheme.STANDARD : AuthScheme.PAM;
148+
ia.setAuthenticationScheme(ias);
149+
150+
return new IRODSClient(ia, jf);
106151
}
107152

108153
return null;

src/main/java/com/researchspace/netfiles/irods/JargonFacade.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
public class JargonFacade {
2727

2828
private IRODSAccessObjectFactory accessObjectFactory;
29+
public IRODSFileSystem iRODSFs;
2930

3031
private enum IRODSFileSystemSingletonHolder {
3132
INSTANCE();
@@ -46,8 +47,8 @@ public IRODSFileSystem getIRodFileSystem() {
4647

4748
public JargonFacade() {
4849
try {
49-
this.accessObjectFactory =
50-
IRODSFileSystemSingletonHolder.INSTANCE.getIRodFileSystem().getIRODSAccessObjectFactory();
50+
this.iRODSFs = IRODSFileSystemSingletonHolder.INSTANCE.getIRodFileSystem();
51+
this.accessObjectFactory = iRODSFs.getIRODSAccessObjectFactory();
5152
} catch (JargonException e) {
5253
log.error("Error Constructing JargonFacade: ", e);
5354
}

src/main/resources/bundles/system/system.properties

+4
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ system.netfilesystem.details.client.irods=iRODS
279279
system.netfilesystem.details.client.irods.zone=iRODS Zone
280280
system.netfilesystem.details.client.irods.homedir=iRODS Search Path
281281
system.netfilesystem.details.client.irods.port= iRODS Port
282+
system.netfilesystem.details.client.irods.csneg=iRODS CS_NEG
283+
system.netfilesystem.details.client.irods.auth=Password Type
284+
system.netfilesystem.details.client.irods.auth.native=Native
285+
system.netfilesystem.details.client.irods.auth.pam=PAM
282286
system.netfilesystem.details.auth=Authentication Type
283287
system.netfilesystem.details.auth.password=Username/Password
284288
system.netfilesystem.details.auth.pubkey=Public Key Authentication

src/main/webapp/WEB-INF/pages/system/netfilesystem_ajax.jsp

+24
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,18 @@
135135
<spring:message code="system.netfilesystem.details.client.irods.port" /></label></td>
136136
<td><input id="fileSystemIrodsPort" type="text" style="width: 20em" /></td>
137137
</tr>
138+
139+
<tr class="fileSystemDetailsIrodsCsnegRow">
140+
<td><label for="fileSystemIrodsCsneg">
141+
<spring:message code="system.netfilesystem.details.client.irods.csneg" /></label></td>
142+
<td><input id="fileSystemIrodsCsneg" type="text" style="width: 20em" /></td>
143+
</tr>
144+
145+
146+
147+
148+
149+
138150
<tr class="fileSystemDetailsSftpRow">
139151
<td><label for="fileSystemSftpServerPublicKey">
140152
<spring:message code="system.netfilesystem.details.client.sftp.server.public.key" /></label></td>
@@ -162,6 +174,18 @@
162174
<spring:message code="system.netfilesystem.details.auth.pubkey.registration.dialog.url" /></label></td>
163175
<td><input id="fileSystemPubKeyRegistrationUrl" type="text" style="width: 20em" /></td>
164176
</tr>
177+
178+
<tr class="fileSystemDetailsIrodsAuthRow">
179+
<td><label><spring:message code="system.netfilesystem.details.client.irods.auth" /></label></td>
180+
<td>
181+
<label><input type="radio" id="iRODSfileSystemAuthTypeNative" name="iRODSfileSystemAuthType" value="NATIVE" required>
182+
<span id="iRODSfileSystemAuthTypeNativeSpan"><spring:message code="system.netfilesystem.details.client.irods.auth.native" /></span></label>
183+
<label><input type="radio" id="iRODSfileSystemAuthTypePAM" name="iRODSfileSystemAuthType" value="PAM">
184+
<span id="iRODSfileSystemAuthTypePAMSpan"><spring:message code="system.netfilesystem.details.client.irods.auth.pam" /></span></label>
185+
186+
</td>
187+
</tr>
188+
165189
<tr>
166190
<td><label><spring:message code="system.netfilesystem.details.status" /></label></td>
167191
<td>

src/main/webapp/scripts/pages/system/netfilesystem_mod.js

+22-8
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ define(function() {
157157
$('#fileSystemSambaDomain').val(clientOptions.SAMBA_DOMAIN);
158158
$('#fileSystemSambaShare').val(clientOptions.SAMBA_SHARE_NAME);
159159
} else if (isSftpClient) {
160-
// $('#fileSystemDetailsSftpDirChoiceRow').show();
161160
$('#fileSystemSftpServerPublicKey').val(clientOptions.SFTP_SERVER_PUBLIC_KEY);
162161
} else if(isIrodsClient) {
163162
$('#fileSystemIrodsZone').val(clientOptions.IRODS_ZONE);
164163
$('#fileSystemIrodsHomeDir').val(clientOptions.IRODS_HOME_DIR);
165164
$('#fileSystemIrodsPort').val(clientOptions.IRODS_PORT);
165+
$('#fileSystemIrodsCsneg').val(clientOptions.IRODS_CSNEG);
166166
}
167167

168168
var isPasswordAuth = isExistingFileSystem && fileSystem.authType === 'PASSWORD';
@@ -174,6 +174,19 @@ define(function() {
174174

175175
$('#fileSystemPubKeyRegistrationUrl').val("");
176176

177+
178+
if (fileSystem.clientType === 'IRODS'){
179+
var rows = fileSystem.clientOptions.split('\n');
180+
for (var i = 0; i < rows.length; i++) {
181+
var currRow = rows[i];
182+
var currRowValue = currRow.substring(currRow.indexOf('=') + 1);
183+
if (currRow.indexOf('IRODS_AUTH') === 0) {
184+
$('#iRODSfileSystemAuthTypeNative').prop('checked', currRowValue === 'NATIVE');
185+
$('#iRODSfileSystemAuthTypePAM').prop('checked', currRowValue === 'PAM');
186+
}
187+
}
188+
}
189+
177190
if (fileSystem.authOptions) {
178191
if (isPubKeyAuth) {
179192
var rows = fileSystem.authOptions.split('\n');
@@ -236,9 +249,7 @@ define(function() {
236249
clientOptions +="\nUSER_DIRS_REQUIRED=" + dirsRequired;
237250
}
238251
} else if (clientType === 'IRODS') {
239-
clientOptions = "IRODS_ZONE=" + $('#fileSystemIrodsZone').val()
240-
+ "\nIRODS_HOME_DIR=" + $('#fileSystemIrodsHomeDir').val()
241-
+ "\nIRODS_PORT=" + $('#fileSystemIrodsPort').val();
252+
clientOptions = "IRODS_ZONE=" + $('#fileSystemIrodsZone').val() + "\nIRODS_HOME_DIR=" + $('#fileSystemIrodsHomeDir').val() + "\nIRODS_PORT=" + $('#fileSystemIrodsPort').val()+"\nIRODS_CSNEG=" + $('#fileSystemIrodsCsneg').val()+"\nIRODS_AUTH=" + $('input[name="iRODSfileSystemAuthType"]:checked').val()+"\n";
242253
}
243254

244255
var fileSystem = {
@@ -251,7 +262,7 @@ define(function() {
251262
clientOptions: clientOptions,
252263
authOptions: authOptions
253264
};
254-
console.log("File System:", fileSystem);
265+
//console.log("File System:", fileSystem);
255266
RS.blockPage("Saving...");
256267
var jqxhr = RS.sendJsonPostRequestToUrl('/system/netfilesystem/save', fileSystem);
257268
jqxhr.done(function() {
@@ -304,7 +315,9 @@ define(function() {
304315
$('.fileSystemDetailsIrodsZoneRow').toggle(isIrodsClient);
305316
$('.fileSystemDetailsIrodsHomeDirRow').toggle(isIrodsClient);
306317
$('.fileSystemDetailsIrodsPortRow').toggle(isIrodsClient);
307-
318+
$('.fileSystemDetailsIrodsCsnegRow').toggle(isIrodsClient);
319+
$('.fileSystemDetailsIrodsAuthRow').toggle(isIrodsClient);
320+
308321
$('#fileSystemAuthTypePubKey').prop('disabled', isSambaClient);
309322
if (isSambaClient) {
310323
$('#fileSystemAuthTypePassword').click();
@@ -323,8 +336,9 @@ define(function() {
323336
.removeAttr('pattern')
324337
.attr('title', 'iRODS hostname or IP without protocol');
325338
$("label[for='fileSystemUrl']").text('iRODS Host');
326-
$("label[for='fileSystemAuthTypePubKey']").hide();
327-
$('#fileSystemAuthTypePasswordSpan').text('Native');
339+
$("label[for='fileSystemAuthTypePubKey']").hide();
340+
//$('#fileSystemAuthTypePasswordSpan').text('Native');
341+
$('#fileSystemAuthTypePasswordSpan').text(sysNetfileSysDetAuthPasswd);
328342
} else {
329343
$('#fileSystemUrl').removeAttr('title').removeAttr('pattern');
330344
$("label[for='fileSystemAuthTypePubKey']").show();

0 commit comments

Comments
 (0)