我试图在OpenIDM中开发一个自定义js端点,在其中我用我在脚本中生成的两个属性(otpexpiry
和otpvalue
)更新搜索到的用户。
我在openidm/conf/endpoint-otp.json
添加了一个json conf来链接:
{
"context" : "endpoint/otp/*",
"type" : "text/javascript",
"file" : "script/otp.js"
}
这是我的脚本openidm/script/otp.js
:
(function() {
if(request.method === "update") {
var five_minutes = 5 * 60 * 1000;
var timestamp = new Date().getTime();
var otpexpiry = timestamp + five_minutes;
var otpvalue = Math.floor(Math.random() * 9999);
/* Not sure of this code below I have to update the user searched with " otpdate : otpexpiry " and "otp : otpvalue "*/
var u = request.value;
var id = "managed/user/" + u._id;
if (id != null) {
openidm['update']( ... );
}
return {
method: "update",
resourceName: request.resourcePath,
revision: request.revision,
parameters: request.additionalParameters,
patch: request.patchpperations,
context: context.current
};
} else {
throw { code: 500, message: "Unknown request type " + request.method};
}
})();
如何更新搜索到的用户的两个变量?
答案 0 :(得分:0)
对于对我如何实现这一目标感兴趣的人,下面是我的代码。我只是从POST传递数据,我查询用户,然后使用openidm.patch
方法更新属性。
(function(){
var content = request.content;
java.lang.System.out.println(content);
var userID = content.id;
var userEmail = content.email;
java.lang.System.out.println("User ID: " + userID);
java.lang.System.out.println("User Email: " + userEmail);
var qry = {
'_queryFilter' : '/mail eq "' + userEmail + '"'
};
var userFound = openidm.query("managed/user", qry);
if (userFound != null) {
java.lang.System.out.println(userFound);
/*Generate OTP and Expiry */
var five_minutes = 5 * 60 * 1000;
var timestamp = new Date().getTime();
var otpexpiry = timestamp + five_minutes;
var otpvalue = Math.floor(Math.random() * 9999);
java.lang.System.out.println("OTP Valore: " + otpvalue);
java.lang.System.out.println("Scadenza: " + otpexpiry);
var patch = [{ "operation" : "replace", "field" : "/otp", "value" : otpvalue },{ "operation" : "replace", "field" : "/otpdate" , "value" : otpexpiry }];
openidm.patch("managed/user/" + userID, null, patch);
return true;
}
})();
您可以使用POST方法触发此端点:
curl -k \
--header "X-OpenIDM-Username: xxx" \
--header "X-OpenIDM-Password: xxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data '{ \
"id" : "2d141539-50b6-4637-bfe8-24a1d61fa556", \
"email" : "jdoe@example.com" }' \
--request POST "https://localhost:8443/openidm/endpoint/otp"