public class Constants extends OICConstants {
- public static final String PROPERTIES_FILE_NAME = "properties"
+ public static final String PROPERTIES_FILE_NAME = "properties"
+ File.separator + "config.properties";
// Database name
- public static final String DB_NAME = "ACCOUNTSERVER_DB";
+ public static final String DB_NAME = "ACCOUNTSERVER_DB";
// Database table
- public static final String CRL_TABLE = "CRL_TABLE";
+ public static final String CRL_TABLE = "CRL_TABLE";
- public static final String CERTIFICATE_TABLE = "CERTIFICATE_TABLE";
+ public static final String CERTIFICATE_TABLE = "CERTIFICATE_TABLE";
- public static final String USER_TABLE = "USER_TABLE";
+ public static final String USER_TABLE = "USER_TABLE";
- public static final String TOKEN_TABLE = "TOKEN_TABLE";
+ public static final String TOKEN_TABLE = "TOKEN_TABLE";
- public static final String GROUP_TABLE = "GROUP_TABLE";
+ public static final String GROUP_TABLE = "GROUP_TABLE";
- public static final String INVITE_TABLE = "INVITE_TABLE";
+ public static final String INVITE_TABLE = "INVITE_TABLE";
- public static final String DEVICE_TABLE = "DEVICE_TABLE";
+ public static final String DEVICE_TABLE = "DEVICE_TABLE";
- public static final String ACL_TABLE = "ACL_TABLE";
+ public static final String ACL_TABLE = "ACL_TABLE";
- public static final String ACLTEMPLATE_TABLE = "ACLTEMPLATE_TABLE";
+ public static final String ACLTEMPLATE_TABLE = "ACLTEMPLATE_TABLE";
// Database table key
- public static final String KEYFIELD_SN = "serialNumber";
+ public static final String KEYFIELD_SN = "serialNumber";
- public static final String KEYFIELD_NA = "notAfter";
+ public static final String KEYFIELD_NA = "notAfter";
- public static final String KEYFIELD_NB = "notBefore";
+ public static final String KEYFIELD_NB = "notBefore";
- public static final String KEYFIELD_REVOKED = "revoked";
+ public static final String KEYFIELD_REVOKED = "revoked";
- public static final String KEYFIELD_UUID = "uuid";
+ public static final String KEYFIELD_UUID = "uuid";
- public static final String KEYFIELD_ACCESSTOKEN = "accesstoken";
+ public static final String KEYFIELD_ACCESSTOKEN = "accesstoken";
- public static final String KEYFIELD_GID = "gid";
+ public static final String KEYFIELD_GID = "gid";
- public static final String KEYFIELD_DID = "did";
+ public static final String KEYFIELD_DID = "did";
- public static final String KEYFIELD_ACLID = "aclid";
+ public static final String KEYFIELD_ACLID = "aclid";
- public static final String KEYFIELD_DI = "di";
+ public static final String KEYFIELD_DI = "di";
- public static final String KEYFIELD_GTYPE = "gtype";
+ public static final String KEYFIELD_GTYPE = "gtype";
- public static final String KEYFIELD_GIDLIST = "gidlist";
+ public static final String KEYFIELD_GIDLIST = "gidlist";
- public static final String KEYFIELD_MIDLIST = "midlist";
+ public static final String KEYFIELD_MIDLIST = "midlist";
- public static final String KEYFIELD_GACL = "gacl";
+ public static final String KEYFIELD_GACL = "gacl";
- public static final String KEYFIELD_USERID = "userid";
+ public static final String KEYFIELD_USERID = "userid";
- public static final String KEYFIELD_PROVIDER = "provider";
+ public static final String KEYFIELD_PROVIDER = "provider";
- public static final String KEYFIELD_ISSUED_TIME = "issuedtime";
+ public static final String KEYFIELD_ISSUED_TIME = "issuedtime";
- public static final String KEYFIELD_EXPIRED_TIME = "expiredtime";
+ public static final String KEYFIELD_EXPIRED_TIME = "expiredtime";
- public static final String KEYFIELD_INVITE_USER = "inviteUser";
+ public static final String KEYFIELD_INVITE_USER = "inviteUser";
- public static final String KEYFIELD_INVITED_USER = "invitedUser";
+ public static final String KEYFIELD_INVITED_USER = "invitedUser";
- public static final String KEYFIELD_ACE_SUBJECT_ID = "subjectuuid";
+ public static final String KEYFIELD_ACE_SUBJECT_ID = "subjectuuid";
- public static final String KEYFIELD_ACE_SUBJECT_TYPE = "stype";
+ public static final String KEYFIELD_ACE_SUBJECT_TYPE = "stype";
- public static final String KEYFIELD_ACE_RESOURCE= "resources";
+ public static final String KEYFIELD_ACE_RESOURCE = "resources";
- public static final String KEYFIELD_ACE_VALIDITY = "validity";
+ public static final String KEYFIELD_ACE_VALIDITY = "validity";
- public static final String KEYFIELD_ACE_PERMISSION = "permission";
+ public static final String KEYFIELD_ACE_PERMISSION = "permission";
public static final String KEYFIELD_ACE_RESOURCE_HREF = "href";
- public static final String KEYFIELD_ACE_RESOURCE_RT = "rt";
+ public static final String KEYFIELD_ACE_RESOURCE_RT = "rt";
- public static final String KEYFIELD_ACE_RESOURCE_IF = "if";
+ public static final String KEYFIELD_ACE_RESOURCE_IF = "if";
// Request payload key
- public static final String REQ_DEVICE_ID = "di";
+ public static final String REQ_DEVICE_ID = "di";
- public static final String REQ_DEVICE_ID_LIST = "dilist";
+ public static final String REQ_DEVICE_ID_LIST = "dilist";
- public static final String REQ_UUID_ID = "uid";
+ public static final String REQ_UUID_ID = "uid";
- public static final String REQ_ACE_ID = "aceid";
+ public static final String REQ_ACE_ID = "aceid";
- public static final String REQ_ACL_ID = "aclid";
+ public static final String REQ_ACL_ID = "aclid";
- public static final String REQ_ROWNER_ID = "rowneruuid";
+ public static final String REQ_ROWNER_ID = "rowneruuid";
- public static final String REQ_ACL_LIST = "aclist";
+ public static final String REQ_ACL_LIST = "aclist";
- public static final String REQ_OWNER_ID = "oid";
+ public static final String REQ_OWNER_ID = "oid";
- public static final String REQ_AUTH_CODE = "authcode";
+ public static final String REQ_AUTH_CODE = "authcode";
- public static final String REQ_AUTH_PROVIDER = "authprovider";
+ public static final String REQ_AUTH_PROVIDER = "authprovider";
- public static final String REQ_ACCESS_TOKEN = "accesstoken";
+ public static final String REQ_ACCESS_TOKEN = "accesstoken";
- public static final String REQ_LOGIN = "login";
+ public static final String REQ_LOGIN = "login";
- public static final String REQ_REFRESH_TOKEN = "refreshtoken";
+ public static final String REQ_REFRESH_TOKEN = "refreshtoken";
- public static final String REQ_GRANT_TYPE = "granttype";
+ public static final String REQ_GRANT_TYPE = "granttype";
- public static final String REQ_AUTH_OPTIONS = "options";
+ public static final String REQ_AUTH_OPTIONS = "options";
- public static final String REQ_REQUEST_METHOD = "rm";
+ public static final String REQ_REQUEST_METHOD = "rm";
- public static final String REQ_REQUEST_URI = "uri";
+ public static final String REQ_REQUEST_URI = "uri";
- public static final String REQ_SEARCH_USER_ID = "sid";
+ public static final String REQ_SEARCH_USER_ID = "sid";
- public static final String REQ_SEARCH_CRITERIA = "search";
+ public static final String REQ_SEARCH_CRITERIA = "search";
- public static final String REQ_GROUP_ID = "gid";
+ public static final String REQ_GROUP_ID = "gid";
- public static final String REQ_GROUP_MASTER_ID = "gmid";
+ public static final String REQ_GROUP_MASTER_ID = "gmid";
- public static final String REQ_GROUP_TYPE = "gtype";
+ public static final String REQ_GROUP_TYPE = "gtype";
- public static final String REQ_MEMBER = "mid";
+ public static final String REQ_MEMBER = "mid";
- public static final String REQ_LAST_UPDATE = "lu";
+ public static final String REQ_LAST_UPDATE = "lu";
- public static final String REQ_THIS_UPDATE = "tu";
+ public static final String REQ_THIS_UPDATE = "tu";
- public static final String REQ_NEXT_UPDATE = "nu";
+ public static final String REQ_NEXT_UPDATE = "nu";
- public static final String REQ_CRL = "crl";
+ public static final String REQ_CRL = "crl";
- public static final String REQ_SERIAL_NUMBER = "rcsn";
+ public static final String REQ_SERIAL_NUMBER = "rcsn";
- public static final String REQ_MEMBER_LIST = "midlist";
+ public static final String REQ_MEMBER_LIST = "midlist";
- public static final String REQ_GTYPE_PRIVATE = "Private";
+ public static final String REQ_GTYPE_PRIVATE = "Private";
- public static final String REQ_GTYPE_PUBLIC = "Public";
+ public static final String REQ_GTYPE_PUBLIC = "Public";
- public static final String REQ_CSR = "csr";
+ public static final String REQ_CSR = "csr";
- public static final String REQ_INVITE = "invite";
+ public static final String REQ_INVITE = "invite";
// Response payload key
- public static final String RESP_ACCESS_TOKEN = "accesstoken";
+ public static final String RESP_ACCESS_TOKEN = "accesstoken";
- public static final String RESP_REFRESH_TOKEN = "refreshtoken";
+ public static final String RESP_REFRESH_TOKEN = "refreshtoken";
- public static final String RESP_TOKEN_TYPE = "tokentype";
+ public static final String RESP_TOKEN_TYPE = "tokentype";
- public static final String RESP_EXPIRES_IN = "expiresin";
+ public static final String RESP_EXPIRES_IN = "expiresin";
- public static final String RESP_REDIRECT_URI = "redirecturi";
+ public static final String RESP_REDIRECT_URI = "redirecturi";
- public static final String RESP_CERTIFICATE = "certificate";
+ public static final String RESP_CERTIFICATE = "certificate";
- public static final String RESP_SERVER_ID = "sid";
+ public static final String RESP_SERVER_ID = "sid";
- public static final String RESP_DEVICES = "devices";
+ public static final String RESP_DEVICES = "devices";
- public static final String RESP_UUID = "uid";
+ public static final String RESP_UUID = "uid";
- public static final String RESP_USER_INFO = "uinfo";
+ public static final String RESP_USER_INFO = "uinfo";
- public static final String RESP_USER_LIST = "ulist";
+ public static final String RESP_USER_LIST = "ulist";
- public static final String RESP_DEVICE_ID = "di";
+ public static final String RESP_DEVICE_ID = "di";
- public static final String RESP_CERT = "cert";
+ public static final String RESP_CERT = "cert";
- public static final String RESP_CACERT = "cacert";
+ public static final String RESP_CACERT = "cacert";
- public static final String RESP_INVITE = "invite";
+ public static final String RESP_INVITE = "invite";
- public static final String RESP_INVITED = "invited";
+ public static final String RESP_INVITED = "invited";
- public static final String RESP_ACL_ALLOWED = "Allowed";
+ public static final String RESP_ACL_ALLOWED = "Allowed";
- public static final String RESP_ACL_DENIED = "Denied";
+ public static final String RESP_ACL_DENIED = "Denied";
- public static final String ENCODING = "encoding";
+ public static final String ENCODING = "encoding";
- public static final String DATA = "data";
+ public static final String DATA = "data";
- public static final String CERT = "cert";
+ public static final String CERT = "cert";
+
+ public static final String CERT_CHAIN = "certchain";
+
+ // query parameter key
+
+ public static final String REQ_INVITE_ACCEPT = "accept";
+
+ // constants
+
+ public static final String INVITE_ACCEPT = "1";
+
+ public static final String INVITE_DENY = "0";
- public static final String CERT_CHAIN = "certchain";
// static token type
- public static final String TOKEN_TYPE_BEARER = "bearer";
+ public static final String TOKEN_TYPE_BEARER = "bearer";
- public static final int TOKEN_INFINITE = -1;
+ public static final int TOKEN_INFINITE = -1;
// auth servers
- public static final String GITHUB = "Github";
+ public static final String GITHUB = "Github";
- public static final String SAMSUNG = "Samsung";
+ public static final String SAMSUNG = "Samsung";
- public static final String GOOGLE = "Google";
+ public static final String GOOGLE = "Google";
}
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import org.iotivity.cloud.accountserver.Constants;
import org.iotivity.cloud.accountserver.db.AccountDBManager;
import org.iotivity.cloud.accountserver.db.InviteTable;
+import org.iotivity.cloud.accountserver.resources.acl.group.GroupManager;
import org.iotivity.cloud.accountserver.util.TypeCastingManager;
import org.iotivity.cloud.base.device.Device;
import org.iotivity.cloud.base.exception.ServerException.BadRequestException;
* id of invited user
* @param gid
* id of group which the user was invited to
+ * @param accepted
+ * value of invitation accept or deny
*/
- public void deleteInvitation(String mid, String gid) {
+ public void deleteInvitation(String mid, String gid, boolean accepted) {
HashMap<String, Object> condition = new HashMap<>();
condition.put(Constants.REQ_GROUP_ID, gid);
condition.put(Constants.KEYFIELD_INVITED_USER, mid);
AccountDBManager.getInstance().deleteRecord(Constants.INVITE_TABLE,
condition);
+ /* add user into group */
+ if (accepted) {
+
+ HashSet<String> midlist = new HashSet<String>();
+ midlist.add(mid);
+
+ GroupManager.getInstance().addGroupMember(gid, midlist);
+ }
+
notifyToSubscriber(mid);
for (String uid : uidList) {
notifyToSubscriber(uid);
for (InviteTable invite : inviteList) {
HashMap<String, String> inviteElement = new HashMap<>();
inviteElement.put(Constants.REQ_GROUP_ID, invite.getGid());
- inviteElement
- .put(Constants.REQ_MEMBER, invite.getInvitedUser());
+ inviteElement.put(Constants.REQ_MEMBER,
+ invite.getInvitedUser());
invitePayloadData.add(inviteElement);
}
}
*
* @return returns invite and invited information of the user
*/
- public HashMap<String, Object> removeSubscriber(String uid, IRequest request) {
+ public HashMap<String, Object> removeSubscriber(String uid,
+ IRequest request) {
synchronized (mSubscribers) {
if (mSubscribers.containsKey(uid)) {
- mSubscribers.get(uid).removeIf(
- subscriber -> subscriber.mRequest.getRequestId()
- .equals(request.getRequestId()));
+ mSubscribers.get(uid).removeIf(subscriber -> subscriber.mRequest
+ .getRequestId().equals(request.getRequestId()));
}
}
for (InviteSubscriber subscriber : mSubscribers.get(id)) {
- subscriber.mSubscriber.sendResponse(MessageBuilder
- .createResponse(subscriber.mRequest,
+ subscriber.mSubscriber.sendResponse(
+ MessageBuilder.createResponse(subscriber.mRequest,
ResponseStatus.CONTENT,
ContentFormat.APPLICATION_CBOR, payload));
}
import org.iotivity.cloud.accountserver.Constants;
import org.iotivity.cloud.accountserver.db.MongoDB;
+import org.iotivity.cloud.accountserver.resources.acl.group.GroupResource;
import org.iotivity.cloud.base.device.CoapDevice;
import org.iotivity.cloud.base.exception.ServerException.PreconditionFailedException;
import org.iotivity.cloud.base.protocols.IRequest;
public class InviteResourceTest {
private static final String INVITE_URI = Constants.INVITE_FULL_URI;
+ private static final String GROUP_URI = Constants.GROUP_FULL_URI;
private static final String TEST_INVITE_USER = "u0001";
private static final String TEST_INVITED_USER = "u0002";
private static final String TEST_GROUP_ID = "g0001";
+ private String mInvitedGroupId = null;
+
private InviteResource mInviteResource = null;
+ private GroupResource mGroupResource = new GroupResource();
+
private CountDownLatch mLatch = null;
private CoapDevice mMockDevice = null;
CoapResponse resp = (CoapResponse) args[0];
mResponse = resp;
+ if (resp.getPayloadSize() != 0) {
+
+ HashMap<String, Object> payloadData = mCbor
+ .parsePayloadFromCbor(resp.getPayload(),
+ HashMap.class);
+
+ if (payloadData.containsKey(Constants.REQ_GROUP_ID)) {
+ mInvitedGroupId = (String) payloadData
+ .get(Constants.REQ_GROUP_ID);
+ }
+ }
+
mLatch.countDown();
return resp;
}
@Test
- public void testDeleteInvitation() throws Exception {
+ public void testDeleteInvitationForAccept() throws Exception {
- sendInvitation(TEST_GROUP_ID, TEST_INVITED_USER);
+ createGroup(TEST_INVITE_USER, "Public");
+ sendInvitation(mInvitedGroupId, TEST_INVITED_USER);
- deleteInvitation(TEST_GROUP_ID, TEST_INVITED_USER, "");
+ deleteInvitationWithQuery(mInvitedGroupId, TEST_INVITED_USER, true);
+
+ assertTrue(mLatch.await(1L, SECONDS));
+ assertEquals(mResponse.getStatus(), ResponseStatus.DELETED);
+
+ }
+
+ @Test
+ public void testDeleteInvitationForDeny() throws Exception {
+
+ createGroup(TEST_INVITE_USER, "Public");
+ sendInvitation(mInvitedGroupId, TEST_INVITED_USER);
+
+ deleteInvitationWithQuery(mInvitedGroupId, TEST_INVITED_USER, false);
assertTrue(mLatch.await(1L, SECONDS));
assertEquals(mResponse.getStatus(), ResponseStatus.DELETED);
return false;
}
+ private void deleteInvitationWithQuery(String gid, String uid,
+ boolean accept) {
+
+ int acceptInt = 0;
+
+ if (accept)
+ acceptInt = 1;
+
+ String uriQuery = Constants.REQ_GROUP_ID + "=" + gid + ";"
+ + Constants.REQ_UUID_ID + "=" + uid + ";"
+ + Constants.REQ_INVITE_ACCEPT + "=" + acceptInt;
+
+ IRequest request = MessageBuilder.createRequest(RequestMethod.DELETE,
+ INVITE_URI, uriQuery);
+
+ mInviteResource.onDefaultRequestReceived(mMockDevice, request);
+ }
+
+ private void createGroup(String gmid, String gtype) {
+
+ IRequest request = createGroupRequest(gmid, gtype);
+
+ mGroupResource.onDefaultRequestReceived(mMockDevice, request);
+ }
+
+ private IRequest createGroupRequest(String uuid, String gtype) {
+
+ IRequest request = null;
+
+ HashMap<String, Object> payloadData = new HashMap<String, Object>();
+ payloadData.put("gmid", uuid);
+ payloadData.put("gtype", gtype);
+
+ request = MessageBuilder.createRequest(RequestMethod.POST, GROUP_URI,
+ null, ContentFormat.APPLICATION_CBOR,
+ mCbor.encodingPayloadToCbor(payloadData));
+
+ return request;
+ }
}
\ No newline at end of file