{"action":"created","comment":{"url":"https://api.github.com/repos/dotCMS/core/pulls/comments/158714543","pull_request_review_id":85563032,"id":158714543,"diff_hunk":"@@ -0,0 +1,391 @@\n+package com.dotcms.rendering.velocity.servlet;\n+\n+import com.dotcms.business.CloseDB;\n+import com.dotcms.enterprise.LicenseUtil;\n+import com.dotcms.enterprise.license.LicenseLevel;\n+import com.dotcms.rendering.velocity.services.VelocityType;\n+import com.dotcms.rendering.velocity.util.VelocityUtil;\n+import com.dotcms.rendering.velocity.viewtools.RequestWrapper;\n+import com.dotcms.visitor.business.VisitorAPI;\n+import com.dotcms.visitor.domain.Visitor;\n+\n+import com.dotmarketing.beans.Host;\n+import com.dotmarketing.beans.Identifier;\n+import com.dotmarketing.beans.UserProxy;\n+import com.dotmarketing.business.APILocator;\n+import com.dotmarketing.business.BlockPageCache;\n+import com.dotmarketing.business.BlockPageCache.PageCacheParameters;\n+import com.dotmarketing.business.CacheLocator;\n+import com.dotmarketing.business.web.HostWebAPI;\n+import com.dotmarketing.business.web.LanguageWebAPI;\n+import com.dotmarketing.business.web.WebAPILocator;\n+import com.dotmarketing.db.DbConnectionFactory;\n+import com.dotmarketing.exception.DotDataException;\n+import com.dotmarketing.factories.ClickstreamFactory;\n+import com.dotmarketing.filters.CMSFilter;\n+import com.dotmarketing.filters.CMSUrlUtil;\n+import com.dotmarketing.filters.Constants;\n+import com.dotmarketing.portlets.htmlpageasset.model.IHTMLPage;\n+import com.dotmarketing.portlets.rules.business.RulesEngine;\n+import com.dotmarketing.portlets.rules.model.Rule;\n+import com.dotmarketing.util.Config;\n+import com.dotmarketing.util.Logger;\n+import com.dotmarketing.util.PageMode;\n+import com.dotmarketing.util.UtilMethods;\n+import com.dotmarketing.util.WebKeys;\n+\n+import java.io.File;\n+import java.io.FilterWriter;\n+import java.io.IOException;\n+import java.io.StringWriter;\n+import java.io.Writer;\n+import java.net.URLDecoder;\n+import java.util.Optional;\n+\n+import javax.servlet.ServletConfig;\n+import javax.servlet.ServletException;\n+import javax.servlet.http.HttpServlet;\n+import javax.servlet.http.HttpServletRequest;\n+import javax.servlet.http.HttpServletResponse;\n+import javax.servlet.http.HttpSession;\n+\n+import org.apache.velocity.context.Context;\n+import org.apache.velocity.exception.MethodInvocationException;\n+import org.apache.velocity.exception.ParseErrorException;\n+import org.apache.velocity.exception.ResourceNotFoundException;\n+\n+import com.liferay.portal.language.LanguageException;\n+import com.liferay.portal.language.LanguageUtil;\n+import com.liferay.portal.model.User;\n+\n+public class VelocityLiveServlet extends HttpServlet {\n+\n+    private static final long serialVersionUID = 1L;\n+    private static HostWebAPI hostWebAPI = WebAPILocator.getHostWebAPI();\n+    private static VisitorAPI visitorAPI = APILocator.getVisitorAPI();\n+    private String CHARSET = \"UTF-8\";\n+\n+\n+\n+    @Override\n+    @CloseDB\n+    protected void service(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {\n+\n+        final String uri = URLDecoder.decode((req.getAttribute(Constants.CMS_FILTER_URI_OVERRIDE) != null)\n+                ? (String) req.getAttribute(Constants.CMS_FILTER_URI_OVERRIDE)\n+                : req.getRequestURI(), \"UTF-8\");\n+\n+\n+\n+        RequestWrapper request = new RequestWrapper(req);\n+        request.setRequestUri(uri);\n+\n+\n+        Host host = hostWebAPI.getCurrentHostNoThrow(request);\n+\n+\n+        // Checking if host is active\n+        boolean hostlive;\n+\n+\n+        try {\n+            hostlive = APILocator.getVersionableAPI()\n+                .hasLiveVersion(host);\n+        } catch (Exception e1) {\n+            UtilMethods.closeDbSilently();\n+            throw new ServletException(e1);\n+        }\n+        if (!hostlive) {\n+            try {\n+                response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,\n+                        LanguageUtil.get(\"server-unavailable-error-message\"));\n+            } catch (LanguageException e) {\n+                Logger.error(CMSFilter.class, e.getMessage(), e);\n+                response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);\n+            }\n+            return;\n+        }\n+\n+\n+        if (DbConnectionFactory.isMsSql() && LicenseUtil.getLevel() < LicenseLevel.PROFESSIONAL.level) {\n+            request.getRequestDispatcher(\"/portal/no_license.jsp\")\n+                .forward(request, response);\n+            return;\n+        }\n+\n+        if (DbConnectionFactory.isOracle() && LicenseUtil.getLevel() < LicenseLevel.PRIME.level) {\n+            request.getRequestDispatcher(\"/portal/no_license.jsp\")\n+                .forward(request, response);\n+            return;\n+        }\n+        if (!LicenseUtil.isASAllowed()) {\n+            request.getRequestDispatcher(\"/portal/no_license.jsp\")\n+                .forward(request, response);\n+            return;\n+\n+        }\n+\n+        try {\n+\n+\n+            if (uri == null) {\n+                response.sendError(500, \"VelocityServlet called without running through the CMS Filter\");\n+                Logger.error(this.getClass(),\n+                        \"You cannot call the VelocityServlet without passing the requested url via a  requestAttribute called  \"\n+                                + Constants.CMS_FILTER_URI_OVERRIDE);\n+                return;\n+            }\n+\n+\n+            // we will always need a visitor in admin mode\n+            if (PageMode.get(request).isAdmin) {\n+                visitorAPI.getVisitor(request, true);\n+            }\n+            LanguageWebAPI langWebAPI = WebAPILocator.getLanguageWebAPI();\n+            langWebAPI.checkSessionLocale(request);\n+\n+            doLiveMode(request, response);\n+\n+\n+        } catch (ResourceNotFoundException rnfe) {\n+            Logger.error(this, \"ResourceNotFoundException\" + rnfe.toString(), rnfe);\n+            response.sendError(404);\n+            return;\n+        } catch (ParseErrorException pee) {\n+            Logger.error(this, \"Template Parse Exception : \" + pee.toString(), pee);\n+            response.sendError(500, \"Template Parse Exception\");\n+        } catch (MethodInvocationException mie) {\n+            Logger.error(this, \"MethodInvocationException\" + mie.toString(), mie);\n+            response.sendError(500, \"MethodInvocationException Error on template\");\n+        } catch (Throwable e) {\n+            Logger.error(this, \"Exception\" + e.toString(), e);\n+            response.sendError(500, \"Exception Error on template\");\n+\n+        } finally {\n+            DbConnectionFactory.closeSilently();\n+        }\n+\n+    }\n+\n+    public void init(ServletConfig config) throws ServletException {\n+\n+        Logger.info(this.getClass(), \"VelocityLiveServlet\");\n+    }\n+\n+\n+    /**\n+     * \n+     * @param request\n+     * @param response\n+     * @throws Exception\n+     */\n+    public void doLiveMode(HttpServletRequest request, HttpServletResponse response) throws Exception {\n+        LicenseUtil.startLiveMode();\n+        try {\n+\n+            String uri = URLDecoder.decode(request.getRequestURI(), UtilMethods.getCharsetConfiguration());\n+            Host host = hostWebAPI.getCurrentHostNoThrow(request);\n+\n+\n+            // Find the current language\n+            long currentLanguageId = VelocityUtil.getLanguageId(request);\n+\n+\n+            // now we check identifier cache first (which DOES NOT have a 404 cache )\n+            Identifier ident = APILocator.getIdentifierAPI()\n+                .find(host, uri);\n+            if (ident == null || ident.getId() == null) {\n+                throw new ResourceNotFoundException(String.format(\"Resource %s not found in Live mode!\", uri));\n+            }\n+            response.setContentType(CHARSET);\n+            request.setAttribute(\"idInode\", String.valueOf(ident.getId()));\n+            Logger.debug(VelocityLiveServlet.class, \"VELOCITY HTML INODE=\" + ident.getId());\n+\n+            RulesEngine.fireRules(request, response);\n+\n+            if (response.isCommitted()) {\n+                /*\n+                 * Some form of redirect, error, or the request has already been fulfilled in some\n+                 * fashion by one or more of the actionlets.\n+                 */\n+                Logger.debug(VelocityLiveServlet.class, \"An EVERY_PAGE RuleEngine Action has committed the response.\");\n+                return;\n+            }\n+\n+\n+            User user = null;\n+            HttpSession session = request.getSession(false);\n+            try {\n+                if (session != null)\n+                    user = (User) session.getAttribute(com.dotmarketing.util.WebKeys.CMS_USER);\n+            } catch (Exception nsue) {\n+                Logger.warn(this, \"Exception trying to getUser: \" + nsue.getMessage(), nsue);\n+            }\n+\n+            Logger.debug(VelocityLiveServlet.class, \"Page Permissions for URI=\" + uri);\n+\n+\n+            IHTMLPage page;\n+\n+            try {\n+                page = VelocityUtil.getPage(ident, request, true, null);\n+            } catch (DotDataException e) {\n+                Logger.info(VelocityLiveServlet.class, \"Unable to find live version of page. Identifier: \" + ident.getId());\n+                throw new ResourceNotFoundException(String.format(\"Resource %s not found in Live mode!\", uri));\n+            }\n+\n+            // Verify and handle the case for unauthorized access of this contentlet\n+            Boolean unauthorized = CMSUrlUtil.getInstance()\n+                .isUnauthorizedAndHandleError(page, uri, user, request, response);\n+            if (unauthorized) {\n+                return;\n+            }\n+\n+            // Fire the page rules until we know we have permission.\n+            RulesEngine.fireRules(request, response, page, Rule.FireOn.EVERY_PAGE);\n+\n+            Logger.debug(VelocityLiveServlet.class, \"Recording the ClickStream\");\n+            if (Config.getBooleanProperty(\"ENABLE_CLICKSTREAM_TRACKING\", false)) {\n+                if (user != null) {\n+                    UserProxy userProxy = com.dotmarketing.business.APILocator.getUserProxyAPI()\n+                        .getUserProxy(user, APILocator.getUserAPI()\n+                            .getSystemUser(), false);\n+                    if (!userProxy.isNoclicktracking()) {\n+                        ClickstreamFactory.addRequest((HttpServletRequest) request, ((HttpServletResponse) response), host);\n+                    }\n+                } else {\n+                    ClickstreamFactory.addRequest((HttpServletRequest) request, ((HttpServletResponse) response), host);\n+                }\n+            }\n+\n+            // Begin page caching\n+            String userId = (user != null) ? user.getUserId()\n+                    : APILocator.getUserAPI()\n+                        .getAnonymousUser()\n+                        .getUserId();\n+            String language = String.valueOf(currentLanguageId);\n+            String urlMap = (String) request.getAttribute(WebKeys.WIKI_CONTENTLET_INODE);\n+            String queryString = request.getQueryString();\n+            String persona = null;\n+            Optional<Visitor> v = visitorAPI.getVisitor(request, false);\n+            if (v.isPresent() && v.get()\n+                .getPersona() != null) {\n+                persona = v.get()\n+                    .getPersona()\n+                    .getKeyTag();\n+            }\n+\n+\n+            PageCacheParameters cacheParameters =\n+                    new BlockPageCache.PageCacheParameters(userId, language, urlMap, queryString, persona);\n+\n+            boolean buildCache = false;\n+            String key = VelocityUtil.getPageCacheKey(request, response);\n+            if (key != null) {\n+                String cachedPage = CacheLocator.getBlockPageCache()\n+                    .get(page, cacheParameters);\n+                if (cachedPage == null || \"refresh\".equals(request.getParameter(\"dotcache\"))\n+                        || \"refresh\".equals(request.getAttribute(\"dotcache\"))\n+                        || (request.getSession(false) != null && \"refresh\".equals(request.getSession(true)\n+                            .getAttribute(\"dotcache\")))) {\n+                    // build cached response\n+                    buildCache = true;\n+                } else {\n+                    // have cached response and are not refreshing, send it\n+                    response.getWriter()\n+                        .write(cachedPage);\n+                    return;\n+                }\n+            }\n+\n+            Writer out = (buildCache) ? new StringWriter(4096) : new VelocityFilterWriter(response.getWriter());\n+            // get the context from the requst if possible\n+            Context context = VelocityUtil.getWebContext(request, response);","path":"dotCMS/src/main/java/com/dotcms/rendering/velocity/servlet/VelocityLiveServlet.java","position":303,"original_position":303,"commit_id":"f306c3f2cf3d5b73dfbf42d2e1b6c1ede7456f1c","original_commit_id":"f306c3f2cf3d5b73dfbf42d2e1b6c1ede7456f1c","user":{"login":"codacy-bot","id":19940114,"avatar_url":"https://avatars1.githubusercontent.com/u/19940114?v=4","gravatar_id":"","url":"https://api.github.com/users/codacy-bot","html_url":"https://github.com/codacy-bot","followers_url":"https://api.github.com/users/codacy-bot/followers","following_url":"https://api.github.com/users/codacy-bot/following{/other_user}","gists_url":"https://api.github.com/users/codacy-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/codacy-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codacy-bot/subscriptions","organizations_url":"https://api.github.com/users/codacy-bot/orgs","repos_url":"https://api.github.com/users/codacy-bot/repos","events_url":"https://api.github.com/users/codacy-bot/events{/privacy}","received_events_url":"https://api.github.com/users/codacy-bot/received_events","type":"User","site_admin":false},"body":"![Codacy](https://www.codacy.com/assets/images/favicon.png) Issue found: [Local variable 'context' could be declared final](https://www.codacy.com/app/dotCMS/core/pullRequest?prid=1141237)","created_at":"2017-12-26T15:22:46Z","updated_at":"2017-12-26T15:22:46Z","html_url":"https://github.com/dotCMS/core/pull/13193#discussion_r158714543","pull_request_url":"https://api.github.com/repos/dotCMS/core/pulls/13193","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/dotCMS/core/pulls/comments/158714543"},"html":{"href":"https://github.com/dotCMS/core/pull/13193#discussion_r158714543"},"pull_request":{"href":"https://api.github.com/repos/dotCMS/core/pulls/13193"}}},"pull_request":{"url":"https://api.github.com/repos/dotCMS/core/pulls/13193","id":157140265,"html_url":"https://github.com/dotCMS/core/pull/13193","diff_url":"https://github.com/dotCMS/core/pull/13193.diff","patch_url":"https://github.com/dotCMS/core/pull/13193.patch","issue_url":"https://api.github.com/repos/dotCMS/core/issues/13193","number":13193,"state":"open","locked":false,"title":"Issue 13192 edit mode cleanup","user":{"login":"wezell","id":934364,"avatar_url":"https://avatars2.githubusercontent.com/u/934364?v=4","gravatar_id":"","url":"https://api.github.com/users/wezell","html_url":"https://github.com/wezell","followers_url":"https://api.github.com/users/wezell/followers","following_url":"https://api.github.com/users/wezell/following{/other_user}","gists_url":"https://api.github.com/users/wezell/gists{/gist_id}","starred_url":"https://api.github.com/users/wezell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wezell/subscriptions","organizations_url":"https://api.github.com/users/wezell/orgs","repos_url":"https://api.github.com/users/wezell/repos","events_url":"https://api.github.com/users/wezell/events{/privacy}","received_events_url":"https://api.github.com/users/wezell/received_events","type":"User","site_admin":false},"body":"This replaced the nasty code we have everywhere\r\n```\r\nboolean live = true;\r\nboolean ADMIN_MODE = (session.getAttribute(com.dotmarketing.util.WebKeys.ADMIN_MODE_SESSION) != null);\r\nboolean PREVIEW_MODE = ((session.getAttribute(com.dotmarketing.util.WebKeys.PREVIEW_MODE_SESSION) != null) && ADMIN_MODE);\r\nboolean EDIT_MODE = ((session.getAttribute(com.dotmarketing.util.WebKeys.EDIT_MODE_SESSION) != null) && ADMIN_MODE);\r\nif (EDIT_MODE || PREVIEW_MODE) {\r\n\tlive = false;\r\n}\r\n```\r\nwith\r\n```\r\nPageMode mode = PageMode.get(request);\r\nPageMode mode = PageMode.get(session);\r\n\r\nmode.isAdmin ; \r\nmode.showLive ; \r\nmode.respectAnonPerms ;\r\n\r\nif( PageMode.get(request).isAdmin){ doAdminStuff(); }\r\n\r\ncontentAPI.find(\"sad\", user, mode.respectAnonPerms);\r\n\r\ncontentAPI.findByIdentifier(\"id\", 1, mode.showLive, user, mode.respectAnonPerms);\r\n\r\nPageMode.setPageMode(request, PageMode.PREVIEW_MODE);\r\n```\r\netc....\r\n\r\n","created_at":"2017-12-08T00:56:47Z","updated_at":"2017-12-26T15:22:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"81418ab29de55691d395fcd1eabaec64aba168b6","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotCMS/core/pulls/13193/commits","review_comments_url":"https://api.github.com/repos/dotCMS/core/pulls/13193/comments","review_comment_url":"https://api.github.com/repos/dotCMS/core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotCMS/core/issues/13193/comments","statuses_url":"https://api.github.com/repos/dotCMS/core/statuses/f306c3f2cf3d5b73dfbf42d2e1b6c1ede7456f1c","head":{"label":"dotCMS:issue-13192-edit-mode-cleanup","ref":"issue-13192-edit-mode-cleanup","sha":"f306c3f2cf3d5b73dfbf42d2e1b6c1ede7456f1c","user":{"login":"dotCMS","id":1005263,"avatar_url":"https://avatars3.githubusercontent.com/u/1005263?v=4","gravatar_id":"","url":"https://api.github.com/users/dotCMS","html_url":"https://github.com/dotCMS","followers_url":"https://api.github.com/users/dotCMS/followers","following_url":"https://api.github.com/users/dotCMS/following{/other_user}","gists_url":"https://api.github.com/users/dotCMS/gists{/gist_id}","starred_url":"https://api.github.com/users/dotCMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotCMS/subscriptions","organizations_url":"https://api.github.com/users/dotCMS/orgs","repos_url":"https://api.github.com/users/dotCMS/repos","events_url":"https://api.github.com/users/dotCMS/events{/privacy}","received_events_url":"https://api.github.com/users/dotCMS/received_events","type":"Organization","site_admin":false},"repo":{"id":3729629,"name":"core","full_name":"dotCMS/core","owner":{"login":"dotCMS","id":1005263,"avatar_url":"https://avatars3.githubusercontent.com/u/1005263?v=4","gravatar_id":"","url":"https://api.github.com/users/dotCMS","html_url":"https://github.com/dotCMS","followers_url":"https://api.github.com/users/dotCMS/followers","following_url":"https://api.github.com/users/dotCMS/following{/other_user}","gists_url":"https://api.github.com/users/dotCMS/gists{/gist_id}","starred_url":"https://api.github.com/users/dotCMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotCMS/subscriptions","organizations_url":"https://api.github.com/users/dotCMS/orgs","repos_url":"https://api.github.com/users/dotCMS/repos","events_url":"https://api.github.com/users/dotCMS/events{/privacy}","received_events_url":"https://api.github.com/users/dotCMS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotCMS/core","description":"Source Code for dotCMS Java Enterprise Content Management System","fork":false,"url":"https://api.github.com/repos/dotCMS/core","forks_url":"https://api.github.com/repos/dotCMS/core/forks","keys_url":"https://api.github.com/repos/dotCMS/core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotCMS/core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotCMS/core/teams","hooks_url":"https://api.github.com/repos/dotCMS/core/hooks","issue_events_url":"https://api.github.com/repos/dotCMS/core/issues/events{/number}","events_url":"https://api.github.com/repos/dotCMS/core/events","assignees_url":"https://api.github.com/repos/dotCMS/core/assignees{/user}","branches_url":"https://api.github.com/repos/dotCMS/core/branches{/branch}","tags_url":"https://api.github.com/repos/dotCMS/core/tags","blobs_url":"https://api.github.com/repos/dotCMS/core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotCMS/core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotCMS/core/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotCMS/core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotCMS/core/statuses/{sha}","languages_url":"https://api.github.com/repos/dotCMS/core/languages","stargazers_url":"https://api.github.com/repos/dotCMS/core/stargazers","contributors_url":"https://api.github.com/repos/dotCMS/core/contributors","subscribers_url":"https://api.github.com/repos/dotCMS/core/subscribers","subscription_url":"https://api.github.com/repos/dotCMS/core/subscription","commits_url":"https://api.github.com/repos/dotCMS/core/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotCMS/core/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotCMS/core/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotCMS/core/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotCMS/core/contents/{+path}","compare_url":"https://api.github.com/repos/dotCMS/core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotCMS/core/merges","archive_url":"https://api.github.com/repos/dotCMS/core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotCMS/core/downloads","issues_url":"https://api.github.com/repos/dotCMS/core/issues{/number}","pulls_url":"https://api.github.com/repos/dotCMS/core/pulls{/number}","milestones_url":"https://api.github.com/repos/dotCMS/core/milestones{/number}","notifications_url":"https://api.github.com/repos/dotCMS/core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotCMS/core/labels{/name}","releases_url":"https://api.github.com/repos/dotCMS/core/releases{/id}","deployments_url":"https://api.github.com/repos/dotCMS/core/deployments","created_at":"2012-03-15T15:24:14Z","updated_at":"2017-12-21T13:50:53Z","pushed_at":"2017-12-26T15:11:18Z","git_url":"git://github.com/dotCMS/core.git","ssh_url":"git@github.com:dotCMS/core.git","clone_url":"https://github.com/dotCMS/core.git","svn_url":"https://github.com/dotCMS/core","homepage":"http://dotcms.com","size":289318,"stargazers_count":349,"watchers_count":349,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":305,"mirror_url":null,"archived":false,"open_issues_count":1764,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":305,"open_issues":1764,"watchers":349,"default_branch":"master"}},"base":{"label":"dotCMS:master","ref":"master","sha":"0181383425302047fc96189ccff171114cb08b77","user":{"login":"dotCMS","id":1005263,"avatar_url":"https://avatars3.githubusercontent.com/u/1005263?v=4","gravatar_id":"","url":"https://api.github.com/users/dotCMS","html_url":"https://github.com/dotCMS","followers_url":"https://api.github.com/users/dotCMS/followers","following_url":"https://api.github.com/users/dotCMS/following{/other_user}","gists_url":"https://api.github.com/users/dotCMS/gists{/gist_id}","starred_url":"https://api.github.com/users/dotCMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotCMS/subscriptions","organizations_url":"https://api.github.com/users/dotCMS/orgs","repos_url":"https://api.github.com/users/dotCMS/repos","events_url":"https://api.github.com/users/dotCMS/events{/privacy}","received_events_url":"https://api.github.com/users/dotCMS/received_events","type":"Organization","site_admin":false},"repo":{"id":3729629,"name":"core","full_name":"dotCMS/core","owner":{"login":"dotCMS","id":1005263,"avatar_url":"https://avatars3.githubusercontent.com/u/1005263?v=4","gravatar_id":"","url":"https://api.github.com/users/dotCMS","html_url":"https://github.com/dotCMS","followers_url":"https://api.github.com/users/dotCMS/followers","following_url":"https://api.github.com/users/dotCMS/following{/other_user}","gists_url":"https://api.github.com/users/dotCMS/gists{/gist_id}","starred_url":"https://api.github.com/users/dotCMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotCMS/subscriptions","organizations_url":"https://api.github.com/users/dotCMS/orgs","repos_url":"https://api.github.com/users/dotCMS/repos","events_url":"https://api.github.com/users/dotCMS/events{/privacy}","received_events_url":"https://api.github.com/users/dotCMS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotCMS/core","description":"Source Code for dotCMS Java Enterprise Content Management System","fork":false,"url":"https://api.github.com/repos/dotCMS/core","forks_url":"https://api.github.com/repos/dotCMS/core/forks","keys_url":"https://api.github.com/repos/dotCMS/core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotCMS/core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotCMS/core/teams","hooks_url":"https://api.github.com/repos/dotCMS/core/hooks","issue_events_url":"https://api.github.com/repos/dotCMS/core/issues/events{/number}","events_url":"https://api.github.com/repos/dotCMS/core/events","assignees_url":"https://api.github.com/repos/dotCMS/core/assignees{/user}","branches_url":"https://api.github.com/repos/dotCMS/core/branches{/branch}","tags_url":"https://api.github.com/repos/dotCMS/core/tags","blobs_url":"https://api.github.com/repos/dotCMS/core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotCMS/core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotCMS/core/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotCMS/core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotCMS/core/statuses/{sha}","languages_url":"https://api.github.com/repos/dotCMS/core/languages","stargazers_url":"https://api.github.com/repos/dotCMS/core/stargazers","contributors_url":"https://api.github.com/repos/dotCMS/core/contributors","subscribers_url":"https://api.github.com/repos/dotCMS/core/subscribers","subscription_url":"https://api.github.com/repos/dotCMS/core/subscription","commits_url":"https://api.github.com/repos/dotCMS/core/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotCMS/core/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotCMS/core/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotCMS/core/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotCMS/core/contents/{+path}","compare_url":"https://api.github.com/repos/dotCMS/core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotCMS/core/merges","archive_url":"https://api.github.com/repos/dotCMS/core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotCMS/core/downloads","issues_url":"https://api.github.com/repos/dotCMS/core/issues{/number}","pulls_url":"https://api.github.com/repos/dotCMS/core/pulls{/number}","milestones_url":"https://api.github.com/repos/dotCMS/core/milestones{/number}","notifications_url":"https://api.github.com/repos/dotCMS/core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotCMS/core/labels{/name}","releases_url":"https://api.github.com/repos/dotCMS/core/releases{/id}","deployments_url":"https://api.github.com/repos/dotCMS/core/deployments","created_at":"2012-03-15T15:24:14Z","updated_at":"2017-12-21T13:50:53Z","pushed_at":"2017-12-26T15:11:18Z","git_url":"git://github.com/dotCMS/core.git","ssh_url":"git@github.com:dotCMS/core.git","clone_url":"https://github.com/dotCMS/core.git","svn_url":"https://github.com/dotCMS/core","homepage":"http://dotcms.com","size":289318,"stargazers_count":349,"watchers_count":349,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":305,"mirror_url":null,"archived":false,"open_issues_count":1764,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":305,"open_issues":1764,"watchers":349,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotCMS/core/pulls/13193"},"html":{"href":"https://github.com/dotCMS/core/pull/13193"},"issue":{"href":"https://api.github.com/repos/dotCMS/core/issues/13193"},"comments":{"href":"https://api.github.com/repos/dotCMS/core/issues/13193/comments"},"review_comments":{"href":"https://api.github.com/repos/dotCMS/core/pulls/13193/comments"},"review_comment":{"href":"https://api.github.com/repos/dotCMS/core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotCMS/core/pulls/13193/commits"},"statuses":{"href":"https://api.github.com/repos/dotCMS/core/statuses/f306c3f2cf3d5b73dfbf42d2e1b6c1ede7456f1c"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"codacy-bot"}}