/** * @param account * @throws IllegalStateException */ private void checkOrganization(Account account) throws IllegalStateException { Sid organizationSid = account.getOrganizationSid(); if(organizationSid == null){ String errorMsg = "there is no organization assosiate with this account: "+account.getSid(); logger.error(errorMsg); throw new IllegalStateException(errorMsg); } Organization organization = organizationsDao.getOrganization(organizationSid); if(organization == null || organization.getDomainName() == null || organization.getDomainName().trim().isEmpty()){ String errorMsg = "Invalid or Null Organization: "+organization +" for account: "+account.getSid(); logger.error(errorMsg); throw new IllegalStateException(errorMsg); } }
private Map<String, Object> toMap(final Organization org) { final Map<String, Object> map = new HashMap<String, Object>(); map.put("sid", DaoUtils.writeSid(org.getSid())); map.put("domain_name", org.getDomainName()); map.put("date_created", DaoUtils.writeDateTime(org.getDateCreated())); map.put("date_updated", DaoUtils.writeDateTime(org.getDateUpdated())); map.put("status", DaoUtils.writeOrganizationStatus(org.getStatus())); return map; } }
/** * @param incomingPhoneNumber * @param organization * @return */ private boolean updateNumberAtPhoneNumberProvisioningManager(IncomingPhoneNumber incomingPhoneNumber, Organization organization){ if(phoneNumberProvisioningManager != null && (incomingPhoneNumber.isPureSip() == null || !incomingPhoneNumber.isPureSip())) { String domainName = organization.getDomainName(); phoneNumberParameters.setVoiceUrl((callbackPort == null || callbackPort.trim().isEmpty()) ? domainName : domainName+":"+callbackPort); if(logger.isDebugEnabled()) logger.debug("updateNumber " + incomingPhoneNumber +" phoneNumberParameters: " + phoneNumberParameters); return phoneNumberProvisioningManager.updateNumber(convertIncomingPhoneNumbertoPhoneNumber(incomingPhoneNumber), phoneNumberParameters); } return true; } }
private Client createClientFrom(final Sid accountSid, final MultivaluedMap<String, String> data) { final Client.Builder builder = Client.builder(); final Sid sid = Sid.generate(Sid.Type.CLIENT); // TODO: need to encrypt this password because it's same with Account // password. // Don't implement now. Opened another issue for it. // String password = new Md5Hash(data.getFirst("Password")).toString(); String password = data.getFirst("Password"); builder.setSid(sid); builder.setAccountSid(accountSid); builder.setApiVersion(getApiVersion(data)); builder.setLogin(data.getFirst("Login")); builder.setPassword(data.getFirst("Login"), password, organizationsDao.getOrganization(accountsDao.getAccount(accountSid).getOrganizationSid()).getDomainName()); builder.setFriendlyName(data.getFirst("FriendlyName")); builder.setStatus(Client.ENABLED); final StringBuilder buffer = new StringBuilder(); buffer.append("/").append(getApiVersion(data)).append("/Accounts/").append(accountSid.toString()) .append("/Clients/").append(sid.toString()); builder.setUri(URI.create(buffer.toString())); return builder.build(); }
/** * Check if a client is authenticated. If so, return true. Otherwise request authentication and return false; * @param request * @param storage * @param organizationSid * @return * @throws IOException */ public static boolean checkAuthentication(SipServletRequest request, DaoManager storage, Sid organizationSid) throws IOException { // Make sure we force clients to authenticate. final String authorization = request.getHeader("Proxy-Authorization"); final String method = request.getMethod(); if (authorization == null || !CallControlHelper.permitted(authorization, method, storage, organizationSid)) { if (logger.isDebugEnabled()) { String msg = String.format("Either authorization header is null [if(authorization==null) evaluates %s], or CallControlHelper.permitted() method failed, will send \"407 Proxy Authentication required\"", authorization==null); logger.debug(msg); } authenticate(request, storage.getOrganizationsDao().getOrganization(organizationSid).getDomainName()); return false; } else { return true; } }
/** * 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); } } }
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; } } }
@Override public JsonElement serialize(final Organization organization, final Type type, final JsonSerializationContext context) { final JsonObject object = new JsonObject(); writeSid(organization.getSid(), object); writeDomainName(organization.getDomainName(), object); writeStatus(organization.getStatus().toString(), object); writeDateCreated(organization.getDateCreated(), object); writeDateUpdated(organization.getDateUpdated(), object); return object; }
String domainName = organizationsDao.getOrganization(account.getOrganizationSid()).getDomainName(); phoneNumberParameters.setVoiceUrl((callbackPort == null || callbackPort.trim().isEmpty()) ? domainName : domainName+":"+callbackPort); phoneNumberParameters.setPhoneNumberType(phoneNumberType);
if (!validator.isStrongEnough(password)) throw new PasswordTooWeak(); String realm = organizationsDao.getOrganization(accountsDao.getAccount(accountSid).getOrganizationSid()).getDomainName();
@Override public void marshal(final Object object, final HierarchicalStreamWriter writer, final MarshallingContext context) { final Organization organization = (Organization) object; writer.startNode("Organization"); writeSid(organization.getSid(), writer); writeDomainName(organization.getDomainName(), writer); writeStatus(organization.getStatus().toString(), writer); writeDateCreated(organization.getDateCreated(), writer); writeDateUpdated(organization.getDateUpdated(), writer); writer.endNode(); }