{"action":"created","comment":{"url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/comments/141260959","pull_request_review_id":65446282,"id":141260959,"diff_hunk":"@@ -0,0 +1,253 @@\n+/*\n+ * TeleStax, Open Source Cloud Communications\n+ * Copyright 2011-2014, Telestax Inc and individual contributors\n+ * by the @authors tag.\n+ *\n+ * This program is free software: you can redistribute it and/or modify\n+ * under the terms of the GNU Affero General Public License as\n+ * published by the Free Software Foundation; either version 3 of\n+ * the License, or (at your option) any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU Affero General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Affero General Public License\n+ * along with this program.  If not, see <http://www.gnu.org/licenses/>\n+ *\n+ */\n+package org.restcomm.connect.http;\n+\n+import static javax.ws.rs.core.MediaType.APPLICATION_JSON;\n+import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;\n+import static javax.ws.rs.core.MediaType.APPLICATION_XML;\n+import static javax.ws.rs.core.MediaType.APPLICATION_XML_TYPE;\n+import static javax.ws.rs.core.Response.ok;\n+import static javax.ws.rs.core.Response.status;\n+import static javax.ws.rs.core.Response.Status.BAD_REQUEST;\n+import static javax.ws.rs.core.Response.Status.CONFLICT;\n+import static javax.ws.rs.core.Response.Status.FORBIDDEN;\n+import static javax.ws.rs.core.Response.Status.NOT_FOUND;\n+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;\n+\n+import java.util.List;\n+import java.util.regex.Pattern;\n+\n+import javax.annotation.PostConstruct;\n+import javax.servlet.ServletContext;\n+import javax.servlet.http.HttpServletRequest;\n+import javax.ws.rs.core.Context;\n+import javax.ws.rs.core.MediaType;\n+import javax.ws.rs.core.MultivaluedMap;\n+import javax.ws.rs.core.Response;\n+import javax.ws.rs.core.UriInfo;\n+\n+import org.apache.commons.configuration.Configuration;\n+import org.joda.time.DateTime;\n+import org.restcomm.connect.commons.dao.Sid;\n+import org.restcomm.connect.dao.entities.Organization;\n+import org.restcomm.connect.dao.entities.OrganizationList;\n+import org.restcomm.connect.dao.entities.RestCommResponse;\n+import org.restcomm.connect.dns.DnsProvisioningManager;\n+import org.restcomm.connect.dns.DnsProvisioningManagerProvider;\n+import org.restcomm.connect.http.converter.OrganizationConverter;\n+import org.restcomm.connect.http.converter.OrganizationListConverter;\n+import org.restcomm.connect.http.converter.RestCommResponseConverter;\n+\n+import com.google.gson.Gson;\n+import com.google.gson.GsonBuilder;\n+import com.thoughtworks.xstream.XStream;\n+\n+/**\n+ * @author maria.farooq@telestax.com (Maria Farooq)\n+ */\n+public class OrganizationsEndpoint extends SecuredEndpoint {\n+    @Context\n+    protected ServletContext context;\n+    protected DnsProvisioningManager dnsProvisioningManager;\n+    protected Gson gson;\n+    protected XStream xstream;\n+    private final String MSG_EMPTY_DOMAIN_NAME = \"domain name can not be empty. Please, choose a valid name and try again.\";\n+    private final String MSG_INVALID_DOMAIN_NAME_PATTERN= \"Total Length of domain_name can be upto 255 Characters. It can contain only letters, number and hyphen - sign.. Please, choose a valid name and try again.\";\n+    private final String MSG_DOMAIN_NAME_NOT_AVAILABLE = \"This domain name is not available. Please, choose a different name and try again.\";\n+    private String DOMAIN_NAME_VALIDATION_PATTERN=\"[A-Za-z0-9\\\\-\\\\.]{1,255}\";\n+    private String SUB_DOMAIN_NAME_VALIDATION_PATTERN=\"[A-Za-z0-9\\\\-]{1,255}\";\n+    private OrganizationListConverter listConverter;\n+\n+    public OrganizationsEndpoint() {\n+        super();\n+    }\n+\n+    // used for testing\n+    public OrganizationsEndpoint(ServletContext context, HttpServletRequest request) {\n+        super(context, request);\n+    }\n+\n+    @PostConstruct\n+    void init() {\n+        configuration = (Configuration) context.getAttribute(Configuration.class.getName());\n+        super.init(configuration.subset(\"runtime-settings\"));\n+\n+        registerConverters();\n+\n+        // Make sure there is an authenticated account present when this endpoint is used\n+        // get manager from context or create it if it does not exist\n+        try {\n+            dnsProvisioningManager = new DnsProvisioningManagerProvider(configuration.subset(\"runtime-settings\"), context).get();\n+        } catch(Exception e) {\n+            logger.error(\"Unable to get dnsProvisioningManager\", e);\n+        }\n+    }\n+\n+    private void registerConverters(){\n+        final OrganizationConverter converter = new OrganizationConverter(configuration);\n+        listConverter = new OrganizationListConverter(configuration);\n+        final GsonBuilder builder = new GsonBuilder();\n+        builder.serializeNulls();\n+        builder.registerTypeAdapter(Organization.class, converter);\n+        builder.setPrettyPrinting();\n+        gson = builder.create();\n+        xstream = new XStream();\n+        xstream.alias(\"RestcommResponse\", RestCommResponse.class);\n+        xstream.registerConverter(converter);\n+        xstream.registerConverter(listConverter);\n+        xstream.registerConverter(new RestCommResponseConverter(configuration));\n+    }\n+\n+    /**\n+     * @param organizationSid\n+     * @param responseType\n+     * @return\n+     */\n+    protected Response getOrganization(final String organizationSid, final MediaType responseType) {\n+        checkAuthenticatedAccount();\n+        //First check if the account has the required permissions in general, this way we can fail fast and avoid expensive DAO operations\n+        checkPermission(\"RestComm:Read:Organizations\");\n+        Organization organization = null;\n+\n+        if (!Sid.pattern.matcher(organizationSid).matches()) {\n+            return status(BAD_REQUEST).build();\n+        } else {\n+            try {\n+                //if account is not super admin then allow to read only affiliated organization\n+                if (!isSuperAdmin()) {\n+                    if (userIdentityContext.getEffectiveAccount().getOrganizationSid().equals(new Sid(organizationSid))) {\n+                        organization = organizationsDao.getOrganization(new Sid(organizationSid));\n+                    } else {\n+                        return status(FORBIDDEN).build();\n+                    }\n+                } else {\n+                    organization = organizationsDao.getOrganization(new Sid(organizationSid));\n+                }\n+            } catch (Exception e) {\n+                return status(NOT_FOUND).build();\n+            }\n+        }\n+\n+        if (organization == null) {\n+            return status(NOT_FOUND).build();\n+        } else {\n+            if (APPLICATION_XML_TYPE == responseType) {\n+                final RestCommResponse response = new RestCommResponse(organization);\n+                return ok(xstream.toXML(response), APPLICATION_XML).build();\n+            } else if (APPLICATION_JSON_TYPE == responseType) {\n+                return ok(gson.toJson(organization), APPLICATION_JSON).build();\n+            } else {\n+                return null;\n+            }\n+        }\n+    }\n+\n+    /**\n+     * @param info\n+     * @param responseType\n+     * @return\n+     */\n+    protected Response getOrganizations(UriInfo info, final MediaType responseType) {\n+        checkAuthenticatedAccount();\n+        allowOnlySuperAdmin();\n+\n+        List<Organization> organizations = null;\n+\n+        String status = info.getQueryParameters().getFirst(\"Status\");\n+\n+        if(status != null && Organization.Status.getValueOf(status.toLowerCase()) != null){\n+            organizations = organizationsDao.getOrganizationsByStatus(Organization.Status.getValueOf(status.toLowerCase()));\n+        }else{\n+            organizations = organizationsDao.getAllOrganizations();\n+        }\n+        if (organizations == null || organizations.isEmpty()) {\n+            return status(NOT_FOUND).build();\n+        }\n+        if (APPLICATION_XML_TYPE == responseType) {\n+            final RestCommResponse response = new RestCommResponse(new OrganizationList(organizations));\n+            return ok(xstream.toXML(response), APPLICATION_XML).build();\n+        } else if (APPLICATION_JSON_TYPE == responseType) {\n+            return ok(gson.toJson(organizations), APPLICATION_JSON).build();\n+        } else {\n+            return null;\n+        }\n+    }\n+\n+    /**\n+     * putOrganization create new organization\n+     * @param domainName\n+     * @param data\n+     * @param applicationJsonType\n+     * @return\n+     */\n+    protected Response putOrganization(String domainName, MultivaluedMap<String, String> data,\n+            MediaType responseType) {\n+        if(domainName == null){\n+            return status(BAD_REQUEST).entity(MSG_EMPTY_DOMAIN_NAME ).build();\n+        }else{\n+            checkAuthenticatedAccount();\n+            allowOnlySuperAdmin();\n+\n+            //Character verification\n+            final Pattern pattern = Pattern.compile(SUB_DOMAIN_NAME_VALIDATION_PATTERN);\n+            if(!pattern.matcher(domainName).matches()){\n+                return status(BAD_REQUEST).entity(MSG_INVALID_DOMAIN_NAME_PATTERN).build();\n+            }\n+\n+            //Check if domain_name does not already taken inside restcomm by an organization.\n+            Organization organization = organizationsDao.getOrganizationByDomainName(domainName);\n+            if(organization != null){\n+                return status(CONFLICT)\n+                        .entity(MSG_DOMAIN_NAME_NOT_AVAILABLE)\n+                        .build();\n+            }\n+            if(dnsProvisioningManager == null) {\n+                logger.warn(\"No DNS provisioning Manager is configured, restcomm will not make any queries to DNS server.\");\n+                organization = new Organization(Sid.generate(Sid.Type.ORGANIZATION), domainName, DateTime.now(), DateTime.now(), Organization.Status.ACTIVE);\n+                organizationsDao.addOrganization(organization);\n+            }else {\n+                //for example hosted zone id of domain restcomm.com or others. if not provided then default will be used as per configuration\n+                String hostedZoneId = data.getFirst(\"HostedZoneId\");\n+                if(dnsProvisioningManager.doesResourceRecordAlreadyExists(domainName, hostedZoneId)){","path":"restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/OrganizationsEndpoint.java","position":228,"original_position":228,"commit_id":"7be28b69a32463c615037c6583e3f398c20e81e3","original_commit_id":"7be28b69a32463c615037c6583e3f398c20e81e3","user":{"login":"maria-farooq","id":17044714,"avatar_url":"https://avatars1.githubusercontent.com/u/17044714?v=4","gravatar_id":"","url":"https://api.github.com/users/maria-farooq","html_url":"https://github.com/maria-farooq","followers_url":"https://api.github.com/users/maria-farooq/followers","following_url":"https://api.github.com/users/maria-farooq/following{/other_user}","gists_url":"https://api.github.com/users/maria-farooq/gists{/gist_id}","starred_url":"https://api.github.com/users/maria-farooq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maria-farooq/subscriptions","organizations_url":"https://api.github.com/users/maria-farooq/orgs","repos_url":"https://api.github.com/users/maria-farooq/repos","events_url":"https://api.github.com/users/maria-farooq/events{/privacy}","received_events_url":"https://api.github.com/users/maria-farooq/received_events","type":"User","site_admin":false},"body":"This particular line is making sure if new domain name is available on dns/amazon-roue53 side","created_at":"2017-09-27T07:19:31Z","updated_at":"2017-09-27T07:19:31Z","html_url":"https://github.com/RestComm/Restcomm-Connect/pull/2522#discussion_r141260959","pull_request_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/comments/141260959"},"html":{"href":"https://github.com/RestComm/Restcomm-Connect/pull/2522#discussion_r141260959"},"pull_request":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522"}},"in_reply_to_id":141100148},"pull_request":{"url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522","id":143155556,"html_url":"https://github.com/RestComm/Restcomm-Connect/pull/2522","diff_url":"https://github.com/RestComm/Restcomm-Connect/pull/2522.diff","patch_url":"https://github.com/RestComm/Restcomm-Connect/pull/2522.patch","issue_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/2522","number":2522,"state":"open","locked":false,"title":"Issue 2493","user":{"login":"maria-farooq","id":17044714,"avatar_url":"https://avatars1.githubusercontent.com/u/17044714?v=4","gravatar_id":"","url":"https://api.github.com/users/maria-farooq","html_url":"https://github.com/maria-farooq","followers_url":"https://api.github.com/users/maria-farooq/followers","following_url":"https://api.github.com/users/maria-farooq/following{/other_user}","gists_url":"https://api.github.com/users/maria-farooq/gists{/gist_id}","starred_url":"https://api.github.com/users/maria-farooq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maria-farooq/subscriptions","organizations_url":"https://api.github.com/users/maria-farooq/orgs","repos_url":"https://api.github.com/users/maria-farooq/repos","events_url":"https://api.github.com/users/maria-farooq/events{/privacy}","received_events_url":"https://api.github.com/users/maria-farooq/received_events","type":"User","site_admin":false},"body":"#2493 \r\n\r\nThis PR also need to reviwed along side https://bitbucket.org/telestax/telscale-restcomm/pull-requests/37/issue-2493/diff","created_at":"2017-09-26T14:42:56Z","updated_at":"2017-09-27T07:19:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4a4cad268b773f02b37b9331ddc7ba092b3e065d","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522/commits","review_comments_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522/comments","review_comment_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/2522/comments","statuses_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/statuses/7be28b69a32463c615037c6583e3f398c20e81e3","head":{"label":"RestComm:issue-2493","ref":"issue-2493","sha":"7be28b69a32463c615037c6583e3f398c20e81e3","user":{"login":"RestComm","id":667380,"avatar_url":"https://avatars3.githubusercontent.com/u/667380?v=4","gravatar_id":"","url":"https://api.github.com/users/RestComm","html_url":"https://github.com/RestComm","followers_url":"https://api.github.com/users/RestComm/followers","following_url":"https://api.github.com/users/RestComm/following{/other_user}","gists_url":"https://api.github.com/users/RestComm/gists{/gist_id}","starred_url":"https://api.github.com/users/RestComm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RestComm/subscriptions","organizations_url":"https://api.github.com/users/RestComm/orgs","repos_url":"https://api.github.com/users/RestComm/repos","events_url":"https://api.github.com/users/RestComm/events{/privacy}","received_events_url":"https://api.github.com/users/RestComm/received_events","type":"Organization","site_admin":false},"repo":{"id":5455458,"name":"Restcomm-Connect","full_name":"RestComm/Restcomm-Connect","owner":{"login":"RestComm","id":667380,"avatar_url":"https://avatars3.githubusercontent.com/u/667380?v=4","gravatar_id":"","url":"https://api.github.com/users/RestComm","html_url":"https://github.com/RestComm","followers_url":"https://api.github.com/users/RestComm/followers","following_url":"https://api.github.com/users/RestComm/following{/other_user}","gists_url":"https://api.github.com/users/RestComm/gists{/gist_id}","starred_url":"https://api.github.com/users/RestComm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RestComm/subscriptions","organizations_url":"https://api.github.com/users/RestComm/orgs","repos_url":"https://api.github.com/users/RestComm/repos","events_url":"https://api.github.com/users/RestComm/events{/privacy}","received_events_url":"https://api.github.com/users/RestComm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RestComm/Restcomm-Connect","description":"The Open Source Cloud Communications Platform","fork":false,"url":"https://api.github.com/repos/RestComm/Restcomm-Connect","forks_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/forks","keys_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/teams","hooks_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/hooks","issue_events_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/events{/number}","events_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/events","assignees_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/assignees{/user}","branches_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/branches{/branch}","tags_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/tags","blobs_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/refs{/sha}","trees_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/statuses/{sha}","languages_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/languages","stargazers_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/stargazers","contributors_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/contributors","subscribers_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/subscribers","subscription_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/subscription","commits_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/commits{/sha}","git_commits_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/commits{/sha}","comments_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/comments{/number}","issue_comment_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/comments{/number}","contents_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/contents/{+path}","compare_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/merges","archive_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/downloads","issues_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues{/number}","pulls_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls{/number}","milestones_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/milestones{/number}","notifications_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/labels{/name}","releases_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/releases{/id}","deployments_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/deployments","created_at":"2012-08-17T17:47:44Z","updated_at":"2017-09-16T14:11:42Z","pushed_at":"2017-09-26T23:27:25Z","git_url":"git://github.com/RestComm/Restcomm-Connect.git","ssh_url":"git@github.com:RestComm/Restcomm-Connect.git","clone_url":"https://github.com/RestComm/Restcomm-Connect.git","svn_url":"https://github.com/RestComm/Restcomm-Connect","homepage":"http://www.restcomm.com/","size":155717,"stargazers_count":157,"watchers_count":157,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":157,"mirror_url":null,"open_issues_count":825,"forks":157,"open_issues":825,"watchers":157,"default_branch":"master"}},"base":{"label":"RestComm:master","ref":"master","sha":"9f910149547484f17c8eeceabb03a6fb3d1720d8","user":{"login":"RestComm","id":667380,"avatar_url":"https://avatars3.githubusercontent.com/u/667380?v=4","gravatar_id":"","url":"https://api.github.com/users/RestComm","html_url":"https://github.com/RestComm","followers_url":"https://api.github.com/users/RestComm/followers","following_url":"https://api.github.com/users/RestComm/following{/other_user}","gists_url":"https://api.github.com/users/RestComm/gists{/gist_id}","starred_url":"https://api.github.com/users/RestComm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RestComm/subscriptions","organizations_url":"https://api.github.com/users/RestComm/orgs","repos_url":"https://api.github.com/users/RestComm/repos","events_url":"https://api.github.com/users/RestComm/events{/privacy}","received_events_url":"https://api.github.com/users/RestComm/received_events","type":"Organization","site_admin":false},"repo":{"id":5455458,"name":"Restcomm-Connect","full_name":"RestComm/Restcomm-Connect","owner":{"login":"RestComm","id":667380,"avatar_url":"https://avatars3.githubusercontent.com/u/667380?v=4","gravatar_id":"","url":"https://api.github.com/users/RestComm","html_url":"https://github.com/RestComm","followers_url":"https://api.github.com/users/RestComm/followers","following_url":"https://api.github.com/users/RestComm/following{/other_user}","gists_url":"https://api.github.com/users/RestComm/gists{/gist_id}","starred_url":"https://api.github.com/users/RestComm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RestComm/subscriptions","organizations_url":"https://api.github.com/users/RestComm/orgs","repos_url":"https://api.github.com/users/RestComm/repos","events_url":"https://api.github.com/users/RestComm/events{/privacy}","received_events_url":"https://api.github.com/users/RestComm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RestComm/Restcomm-Connect","description":"The Open Source Cloud Communications Platform","fork":false,"url":"https://api.github.com/repos/RestComm/Restcomm-Connect","forks_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/forks","keys_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/teams","hooks_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/hooks","issue_events_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/events{/number}","events_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/events","assignees_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/assignees{/user}","branches_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/branches{/branch}","tags_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/tags","blobs_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/refs{/sha}","trees_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/statuses/{sha}","languages_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/languages","stargazers_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/stargazers","contributors_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/contributors","subscribers_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/subscribers","subscription_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/subscription","commits_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/commits{/sha}","git_commits_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/git/commits{/sha}","comments_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/comments{/number}","issue_comment_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/comments{/number}","contents_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/contents/{+path}","compare_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/merges","archive_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/downloads","issues_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues{/number}","pulls_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls{/number}","milestones_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/milestones{/number}","notifications_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/labels{/name}","releases_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/releases{/id}","deployments_url":"https://api.github.com/repos/RestComm/Restcomm-Connect/deployments","created_at":"2012-08-17T17:47:44Z","updated_at":"2017-09-16T14:11:42Z","pushed_at":"2017-09-26T23:27:25Z","git_url":"git://github.com/RestComm/Restcomm-Connect.git","ssh_url":"git@github.com:RestComm/Restcomm-Connect.git","clone_url":"https://github.com/RestComm/Restcomm-Connect.git","svn_url":"https://github.com/RestComm/Restcomm-Connect","homepage":"http://www.restcomm.com/","size":155717,"stargazers_count":157,"watchers_count":157,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":157,"mirror_url":null,"open_issues_count":825,"forks":157,"open_issues":825,"watchers":157,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522"},"html":{"href":"https://github.com/RestComm/Restcomm-Connect/pull/2522"},"issue":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/2522"},"comments":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/issues/2522/comments"},"review_comments":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522/comments"},"review_comment":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/pulls/2522/commits"},"statuses":{"href":"https://api.github.com/repos/RestComm/Restcomm-Connect/statuses/7be28b69a32463c615037c6583e3f398c20e81e3"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"maria-farooq"}}