private Map<String, Object> toMap(final Client client) { final Map<String, Object> map = new HashMap<String, Object>(); map.put("sid", writeSid(client.getSid())); map.put("date_created", writeDateTime(client.getDateCreated())); map.put("date_updated", writeDateTime(client.getDateUpdated())); map.put("account_sid", writeSid(client.getAccountSid())); map.put("api_version", client.getApiVersion()); map.put("friendly_name", client.getFriendlyName()); map.put("login", client.getLogin()); map.put("password", client.getPassword()); map.put("status", client.getStatus()); map.put("voice_url", writeUri(client.getVoiceUrl())); map.put("voice_method", client.getVoiceMethod()); map.put("voice_fallback_url", writeUri(client.getVoiceFallbackUrl())); map.put("voice_fallback_method", client.getVoiceFallbackMethod()); map.put("voice_application_sid", writeSid(client.getVoiceApplicationSid())); map.put("uri", writeUri(client.getUri())); map.put("push_client_identity", client.getPushClientIdentity()); return map; } }
final Client client = clients.getClient(user, organizationSid); if (client != null && Client.ENABLED == client.getStatus()) { final String password2 = client.getPassword(); final String result = DigestAuthentication.response(algorithm, user, realm, "", password2, nonce, nc, cnonce, method, uri, null, qop); } else { if (logger.isDebugEnabled()) { String msg = String.format("Authorization check failed, [if(client==null) evaluates %s] or [if(client.getStatus()==Client.ENABLED) evaluates %s]", client!=null, Client.ENABLED == client.getStatus()); logger.debug(msg);
logger.info(String.format("B2BUA: Proxying a session between %s and %s", client.getLogin(), toClient.getLogin())); logger.warn(String.format("B2B clients do not belong to same organization. from-client: %s belong to %s . where as to-client %s belong to %s", client.getLogin(), fromOrganizationSid, user, toOrganizationSid)); return false; from = (SipURI) sipFactory.createURI((registrations.getRegistration(client.getLogin(), fromOrganizationSid)).getLocation()); } else { from = (SipURI) sipFactory.createURI((registrations.getRegistration(client.getLogin(), fromOrganizationSid)).getAddressOfRecord()); builder.setInstanceId(RestcommConfiguration.getInstance().getMain().getInstanceId()); builder.setDateCreated(DateTime.now()); builder.setAccountSid(client.getAccountSid()); builder.setTo(toClient.getLogin()); builder.setCallerName(client.getFriendlyName()); builder.setFrom(client.getLogin()); builder.setApiVersion(client.getApiVersion()); builder.setPrice(new BigDecimal("0.00")); buffer.append("/").append(client.getApiVersion()).append("/Accounts/"); buffer.append(client.getAccountSid().toString()).append("/Calls/"); buffer.append(client.getSid().toString()); final URI uri = URI.create(buffer.toString()); builder.setUri(uri); incomingSession.setAttribute(CDR_ACCOUNT_SID, client.getSid()); outgoingSession.setAttribute(CDR_ACCOUNT_SID, client.getSid()); incomingSession.setAttribute(CDR_DIRECTION, "Client-To-Client");
private Client update(Client client, String realm, final MultivaluedMap<String, String> data) throws PasswordTooWeak { if (data.containsKey("FriendlyName")) { client = client.setFriendlyName(data.getFirst("FriendlyName")); throw new PasswordTooWeak(); client = client.setPassword(client.getLogin(), password, realm); client = client.setStatus(getStatus(data)); client = client.setVoiceUrl(isEmpty(uri.toString()) ? null : uri); client = client.setVoiceMethod(getMethod("VoiceMethod", data)); client = client.setVoiceFallbackUrl(isEmpty(uri.toString()) ? null :uri); client = client.setVoiceFallbackMethod(getMethod("VoiceFallbackMethod", data)); client = client.setVoiceApplicationSid(null); } else { client = client.setVoiceApplicationSid(getSid("VoiceApplicationSid", data)); client = client.setPushClientIdentity(client.getSid().toString()); } else { client = client.setPushClientIdentity(null);
/** * update SIP client of the corresponding Account.Password and FriendlyName fields are synched. */ private void updateLinkedClient(Account account, MultivaluedMap<String, String> data) { logger.debug("checking linked client"); String email = account.getEmailAddress(); if (email != null && !email.equals("")) { logger.debug("account email is valid"); String username = email.split("@")[0]; Client client = clientDao.getClient(username, account.getOrganizationSid()); if (client != null) { logger.debug("client found"); // TODO: need to encrypt this password because it's // same with Account password. // Don't implement now. Opened another issue for it. if (data.containsKey("Password")) { // Md5Hash(data.getFirst("Password")).toString(); logger.debug("password changed"); String password = data.getFirst("Password"); client = client.setPassword(client.getLogin(), password, organizationsDao.getOrganization(account.getOrganizationSid()).getDomainName()); } if (data.containsKey("FriendlyName")) { logger.debug("friendlyname changed"); client = client.setFriendlyName(data.getFirst("FriendlyName")); } logger.debug("updating linked client"); clientDao.updateClient(client); } } }
private Response deleteClient(final String accountSid, final String sid) { Account operatedAccount =super.accountsDao.getAccount(accountSid); secure(operatedAccount, "RestComm:Delete:Clients"); Client client = dao.getClient(new Sid(sid)); if (client != null) { secure(operatedAccount, client.getAccountSid(), SecuredType.SECURED_STANDARD); dao.removeClient(new Sid(sid)); return ok().build(); } else { return status(Response.Status.NOT_FOUND).build(); } }
SipServletRequest outRequest = null; if (fromClient != null) { Address fromAddress = sipFactory.createAddress(from, fromClient.getFriendlyName()); Address toAddress = sipFactory.createAddress(to, to.getUser()); outRequest = sipFactory.createRequest(request.getApplicationSession(), request.getMethod(), fromAddress, builder.setInstanceId(RestcommConfiguration.getInstance().getMain().getInstanceId()); builder.setDateCreated(DateTime.now()); builder.setAccountSid(fromClient.getAccountSid()); builder.setTo(to.toString()); builder.setCallerName(fromClient.getFriendlyName()); builder.setFrom(fromClient.getFriendlyName()); builder.setApiVersion(fromClient.getApiVersion()); builder.setPrice(new BigDecimal("0.00")); buffer.append("/").append(fromClient.getApiVersion()).append("/Accounts/"); buffer.append(fromClient.getAccountSid().toString()).append("/Calls/"); buffer.append(fromClient.getSid().toString()); final URI uri = URI.create(buffer.toString()); builder.setUri(uri); incomingSession.setAttribute(CDR_ACCOUNT_SID, fromClient.getSid()); outgoingSession.setAttribute(CDR_ACCOUNT_SID, fromClient.getSid()); incomingSession.setAttribute(CDR_DIRECTION, "Client-To-Client"); outgoingSession.setAttribute(CDR_DIRECTION, "Client-To-Client"); incomingSession.setAttribute(CDR_FROM, fromClient.getLogin()); outgoingSession.setAttribute(CDR_FROM, fromClient.getLogin()); incomingSession.setAttribute(CDR_TO, to.toString());
protected Response getClient(final String accountSid, final String sid, final MediaType responseType) { Account operatedAccount = accountsDao.getAccount(accountSid); secure(operatedAccount, "RestComm:Read:Clients"); final Client client = dao.getClient(new Sid(sid)); if (client == null) { return status(NOT_FOUND).build(); } else { secure(operatedAccount, client.getAccountSid(), SecuredType.SECURED_STANDARD); if (APPLICATION_XML_TYPE.equals(responseType)) { final RestCommResponse response = new RestCommResponse(client); return ok(xstream.toXML(response), APPLICATION_XML).build(); } else if (APPLICATION_JSON_TYPE.equals(responseType)) { return ok(gson.toJson(client), APPLICATION_JSON).build(); } else { return null; } } }
@Override public JsonElement serialize(final Client client, final Type type, final JsonSerializationContext context) { final JsonObject object = new JsonObject(); writeSid(client.getSid(), object); writeDateCreated(client.getDateCreated(), object); writeDateUpdated(client.getDateUpdated(), object); writeAccountSid(client.getAccountSid(), object); writeApiVersion(client.getApiVersion(), object); writeFriendlyName(client.getFriendlyName(), object); writeLogin(client.getLogin(), object); writePassword(client.getPassword(), object); writeStatus(client.getStatus().toString(), object); writeVoiceUrl(client.getVoiceUrl(), object); writeVoiceMethod(client.getVoiceMethod(), object); writeVoiceFallbackUrl(client.getVoiceFallbackUrl(), object); writeVoiceFallbackMethod(client.getVoiceFallbackMethod(), object); writeVoiceApplicationSid(client.getVoiceApplicationSid(), object); writeUri(client.getUri(), object); writePushClientIdentity(client.getPushClientIdentity(), object); return object; }
} else if (!client.getAccountSid().toString().equals(accountSid)) { return status(CONFLICT) .entity("A client with the same name was already created by another account. Please, choose a different name and try again.")
@Override public void marshal(final Object object, final HierarchicalStreamWriter writer, final MarshallingContext context) { final Client client = (Client) object; writer.startNode("Client"); writeSid(client.getSid(), writer); writeDateCreated(client.getDateCreated(), writer); writeDateUpdated(client.getDateUpdated(), writer); writeAccountSid(client.getAccountSid(), writer); writeApiVersion(client.getApiVersion(), writer); writeFriendlyName(client.getFriendlyName(), writer); writeLogin(client.getLogin(), writer); writePassword(client.getPassword(), writer); writeStatus(client.getStatus().toString(), writer); writeVoiceUrl(client.getVoiceUrl(), writer); writeVoiceMethod(client.getVoiceMethod(), writer); writeVoiceFallbackUrl(client.getVoiceFallbackUrl(), writer); writeVoiceFallbackMethod(client.getVoiceFallbackMethod(), writer); writeVoiceApplicationSid(client.getVoiceApplicationSid(), writer); writeUri(client.getUri(), writer); writePushClientIdentity(client.getPushClientIdentity(), writer); writer.endNode(); }
protected Response updateClient(final String accountSid, final String sid, final MultivaluedMap<String, String> data, final MediaType responseType) { Account operatedAccount = accountsDao.getAccount(accountSid); secure(operatedAccount, "RestComm:Modify:Clients"); Client client = dao.getClient(new Sid(sid)); if (client == null) { return status(NOT_FOUND).build(); } else { secure(operatedAccount, client.getAccountSid(), SecuredType.SECURED_STANDARD ); try { final String realm = organizationsDao.getOrganization(accountsDao.getAccount(client.getAccountSid()).getOrganizationSid()).getDomainName(); client = update(client, realm, data); dao.updateClient(client); } catch (PasswordTooWeak passwordTooWeak) { return status(BAD_REQUEST).entity(buildErrorResponseBody("Password too weak",responseType)).type(responseType).build(); } if (APPLICATION_XML_TYPE.equals(responseType)) { final RestCommResponse response = new RestCommResponse(client); return ok(xstream.toXML(response), APPLICATION_XML).build(); } else if (APPLICATION_JSON_TYPE.equals(responseType)) { return ok(gson.toJson(client), APPLICATION_JSON).build(); } else { return null; } } }