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; } }
public Organization build() { return new Organization(sid, domainName, dateCreated, dateUpdated, status); }
/** * @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); } }
/** * getOrganizationSidBySipURIHost * * @param sipURI * @return Sid of Organization */ public static Sid getOrganizationSidBySipURIHost(DaoManager storage, final SipURI sipURI) { if (logger.isDebugEnabled()) { logger.debug(String.format("getOrganizationSidBySipURIHost sipURI = %s", sipURI)); } final String organizationDomainName = sipURI.getHost(); Organization organization = storage.getOrganizationsDao().getOrganizationByDomainName(organizationDomainName); return organization == null ? null : organization.getSid(); }
/** * @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; } }
if (operatingAccount.getOrganizationSid().equals(organization.getSid())) { return status(BAD_REQUEST).entity("Account already in the requested Organization").build(); Account modifiedAccount = operatingAccount.setOrganizationSid(organization.getSid()); accountsDao.updateAccount(modifiedAccount); String msg = String.format("Parent Account %s migrated to Organization %s", modifiedAccount.getSid(), organization.getSid()); logger.debug(msg); if (!child.getOrganizationSid().equals(organization.getSid())) { Account modifiedChildAccount = child.setOrganizationSid(organization.getSid()); accountsDao.updateAccount(modifiedChildAccount); if (logger.isDebugEnabled()) { String msg = String.format("Child Account %s from Parent Account %s, migrated to Organization %s", modifiedChildAccount.getSid(), modifiedAccount.getSid(), organization.getSid()); logger.debug(msg);
@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; }
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(); }
/** * @param domainName * @return * @throws IllegalArgumentException in case provided domainName is empty or null */ public Organization setDomainName(final String domainName) throws IllegalArgumentException { if(domainName == null || domainName.trim().isEmpty()) throw new IllegalArgumentException("Organization domainName can not be empty."); return new Organization(sid, domainName, dateCreated, DateTime.now(), status); }
/** * @param account * @param destinationOrganization */ private void migrateSingleAccountNumbers(Account account, Organization destinationOrganization) { List<IncomingPhoneNumber> incomingPhoneNumbers = dao.getIncomingPhoneNumbers(account.getSid()); if(incomingPhoneNumbers != null) { for (int i=0; i<incomingPhoneNumbers.size(); i++){ IncomingPhoneNumber incomingPhoneNumber = incomingPhoneNumbers.get(i); incomingPhoneNumber.setOrganizationSid(destinationOrganization.getSid()); //update organization in db dao.updateIncomingPhoneNumber(incomingPhoneNumber); //update number at provider's end if(!updateNumberAtPhoneNumberProvisioningManager(incomingPhoneNumber, destinationOrganization)){ //if number could not be updated at provider's end, log the error and keep moving to next number. logger.error(String.format("could not update number %s at number provider %s ", incomingPhoneNumber.getPhoneNumber(), phoneNumberProvisioningManager)); } } } }
@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(); }
/** * 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 Organization toOrganization(final Map<String, Object> map) { final Sid sid = DaoUtils.readSid(map.get("sid")); final String domainName = DaoUtils.readString(map.get("domain_name")); final DateTime dateCreated = DaoUtils.readDateTime(map.get("date_created")); final DateTime dateUpdated = DaoUtils.readDateTime(map.get("date_updated")); final Organization.Status status = DaoUtils.readOrganizationStatus(map.get("status")); return new Organization(sid, domainName, dateCreated, dateUpdated, status); }
return status(NOT_FOUND).build(); accounts.addAll(accountsDao.getAccountsByOrganization(organization.getSid())); } else { accounts.addAll(accountsDao.getChildAccounts(account.getSid()));
/** * 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; } }
organization = new Organization(Sid.generate(Sid.Type.ORGANIZATION), domainName, DateTime.now(), DateTime.now(), Organization.Status.ACTIVE); organizationsDao.addOrganization(organization); }else { return status(INTERNAL_SERVER_ERROR).build(); }else{ organization = new Organization(Sid.generate(Sid.Type.ORGANIZATION), completeDomainName, DateTime.now(), DateTime.now(), Organization.Status.ACTIVE); organizationsDao.addOrganization(organization);
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; } } }
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();