{"action":"created","comment":{"url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/comments/50465324","id":50465324,"diff_hunk":"@@ -143,45 +150,79 @@ protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse\n \t\t\t\ttry {\n \t\t\t\t\tContext.addProxyPrivilege(PrivilegeConstants.GET_USERS);\n \t\t\t\t\tuser = Context.getUserService().getUserByUsername(username);\n-\t\t\t\t}\n-\t\t\t\tfinally {\n+\t\t\t\t} finally {\n \t\t\t\t\tContext.removeProxyPrivilege(PrivilegeConstants.GET_USERS);\n \t\t\t\t}\n \t\t\t\t\n \t\t\t\t// check the secret question again in case the user got here \"illegally\"\n-\t\t\t\tif (user == null /*|| StringUtils.isEmpty(user.getSecretQuestion())*/) {\n-\t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, \"auth.question.empty\");\n-\t\t\t\t} else if (/*user.getSecretQuestion() != null &&*/ Context.getUserService().isSecretAnswer(user, secretAnswer)) {\n-\t\t\t\t\t\n-\t\t\t\t\tStringBuilder randomPassword = new StringBuilder();\n-\t\t\t\t\tfor (int i = 0; i < 8; i++) {\n-\t\t\t\t\t\trandomPassword.append(String.valueOf((Math.random() * (127 - 48) + 48)));\n-\t\t\t\t\t}\n-\t\t\t\t\t\n-\t\t\t\t\ttry {\n-\t\t\t\t\t\tContext.addProxyPrivilege(PrivilegeConstants.EDIT_USER_PASSWORDS);\n-\t\t\t\t\t\t//Context.getUserService().changePassword(user, randomPassword.toString());\n-\t\t\t\t\t}\n-\t\t\t\t\tfinally {\n-\t\t\t\t\t\tContext.removeProxyPrivilege(PrivilegeConstants.EDIT_USER_PASSWORDS);\n-\t\t\t\t\t}\n-\t\t\t\t\t\n-\t\t\t\t\thttpSession.setAttribute(\"resetPassword\", randomPassword);\n-\t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_MSG_ATTR, \"auth.password.reset\");\n-\t\t\t\t\tContext.authenticate(username, randomPassword.toString());\n-\t\t\t\t\thttpSession.setAttribute(\"loginAttempts\", 0);\n-\t\t\t\t\treturn new ModelAndView(new RedirectView(request.getContextPath() + \"/options.form#Change Login Info\"));\n-\t\t\t\t} else {\n+\t\t\t\tif (user == null) {\n \t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, \"auth.answer.invalid\");\n \t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_MSG_ATTR, \"auth.question.fill\");\n-\t\t\t\t\t//request.setAttribute(\"secretQuestion\", user.getSecretQuestion());\n+\t\t\t\t\trequest.setAttribute(\"secretQuestion\", getRandomFakeSecretQuestion(username));\n+\t\t\t\t} else {\n+\t\t\t\t\tString secretQuestion = Context.getUserService().getSecretQuestion(user);\n+\t\t\t\t\tif (secretQuestion == null || secretQuestion.equals(\"\")) {\n+\t\t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, \"auth.question.empty\");\n+\t\t\t\t\t} else if (secretQuestion != null && Context.getUserService().isSecretAnswer(user, secretAnswer)) {\n+\t\t\t\t\t\t\n+\t\t\t\t\t\tString randomPassword = getRandomPassword();\n+\t\t\t\t\t\t\n+\t\t\t\t\t\ttry {\n+\t\t\t\t\t\t\tContext.addProxyPrivilege(PrivilegeConstants.EDIT_USER_PASSWORDS);\n+\t\t\t\t\t\t\tContext.getUserService().changePassword(user, randomPassword);\n+\t\t\t\t\t\t} finally {\n+\t\t\t\t\t\t\tContext.removeProxyPrivilege(PrivilegeConstants.EDIT_USER_PASSWORDS);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t\n+\t\t\t\t\t\thttpSession.setAttribute(\"resetPassword\", randomPassword);\n+\t\t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_MSG_ATTR, \"auth.password.reset\");\n+\t\t\t\t\t\tContext.authenticate(username, randomPassword);\n+\t\t\t\t\t\thttpSession.setAttribute(\"loginAttempts\", 0);\n+\t\t\t\t\t\t\n+\t\t\t\t\t\treturn new ModelAndView(new RedirectView(request.getContextPath() + \"/options.form#Change Login Info\"));\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, \"auth.answer.invalid\");\n+\t\t\t\t\t\thttpSession.setAttribute(WebConstants.OPENMRS_MSG_ATTR, \"auth.question.fill\");\n+\t\t\t\t\t\trequest.setAttribute(\"secretQuestion\", secretQuestion);\n+\t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t\t\n \t\tloginAttemptsByIP.put(ipAddress, forgotPasswordAttempts);\n+\t\t\n \t\trequest.setAttribute(\"uname\", username);\n+\t\t\n \t\treturn showForm(request, response, errors);\n \t}\n \t\n+\tpublic String getRandomPassword() {\n+\t\t\n+\t\tString randomString = RandomStringUtils.randomAlphabetic(1).toUpperCase() + RandomStringUtils.randomAlphanumeric(8)+ RandomStringUtils.randomNumeric(1);","path":"omod/src/main/java/org/openmrs/web/controller/ForgotPasswordFormController.java","position":148,"original_position":148,"commit_id":"9967c5707f625e99ec938fb7bcf2e475c7024242","original_commit_id":"9967c5707f625e99ec938fb7bcf2e475c7024242","user":{"login":"bholagabbar","id":11693595,"avatar_url":"https://avatars.githubusercontent.com/u/11693595?v=3","gravatar_id":"","url":"https://api.github.com/users/bholagabbar","html_url":"https://github.com/bholagabbar","followers_url":"https://api.github.com/users/bholagabbar/followers","following_url":"https://api.github.com/users/bholagabbar/following{/other_user}","gists_url":"https://api.github.com/users/bholagabbar/gists{/gist_id}","starred_url":"https://api.github.com/users/bholagabbar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bholagabbar/subscriptions","organizations_url":"https://api.github.com/users/bholagabbar/orgs","repos_url":"https://api.github.com/users/bholagabbar/repos","events_url":"https://api.github.com/users/bholagabbar/events{/privacy}","received_events_url":"https://api.github.com/users/bholagabbar/received_events","type":"User","site_admin":false},"body":"I'm telling you the tests are failing! How else can I convince you? I have even pasted the error log of the tests!","created_at":"2016-01-21T21:16:25Z","updated_at":"2016-01-21T21:16:25Z","html_url":"https://github.com/openmrs/openmrs-module-legacyui/pull/32#discussion_r50465324","pull_request_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32","_links":{"self":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/comments/50465324"},"html":{"href":"https://github.com/openmrs/openmrs-module-legacyui/pull/32#discussion_r50465324"},"pull_request":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32"}}},"pull_request":{"url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32","id":56672390,"html_url":"https://github.com/openmrs/openmrs-module-legacyui/pull/32","diff_url":"https://github.com/openmrs/openmrs-module-legacyui/pull/32.diff","patch_url":"https://github.com/openmrs/openmrs-module-legacyui/pull/32.patch","issue_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues/32","number":32,"state":"open","locked":false,"title":"Final fix for LUI-45 [Forgot Password Form Leaks Valid Usernames]","user":{"login":"bholagabbar","id":11693595,"avatar_url":"https://avatars.githubusercontent.com/u/11693595?v=3","gravatar_id":"","url":"https://api.github.com/users/bholagabbar","html_url":"https://github.com/bholagabbar","followers_url":"https://api.github.com/users/bholagabbar/followers","following_url":"https://api.github.com/users/bholagabbar/following{/other_user}","gists_url":"https://api.github.com/users/bholagabbar/gists{/gist_id}","starred_url":"https://api.github.com/users/bholagabbar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bholagabbar/subscriptions","organizations_url":"https://api.github.com/users/bholagabbar/orgs","repos_url":"https://api.github.com/users/bholagabbar/repos","events_url":"https://api.github.com/users/bholagabbar/events{/privacy}","received_events_url":"https://api.github.com/users/bholagabbar/received_events","type":"User","site_admin":false},"body":"\r\nThis is the Final Fix for the Leakage of Usernames that was occurring when a user clicked on the 'forgotPassword' link. \r\n\r\nhttps://issues.openmrs.org/browse/LUI-45\r\n\r\n**The Issue**: Whenever a hacker enters the name of a random user, and the user is valid, his/her secret question is shown. This is a major vulnerability that had to be addressed.\r\n\r\n**The Fix:** The solution is to ask ANY user a secret question. If the user is invalid, a random Fake Secret Question is asked whose answer is always false and will not the user pass, locking him out after 5 tries. This secret question is assigned on the basis of the hashvalue of the entered username.","created_at":"2016-01-20T21:49:17Z","updated_at":"2016-01-21T21:16:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8ce3866b728a3dfbf05ed15ab73556743ddbbf1e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32/commits","review_comments_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32/comments","review_comment_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues/32/comments","statuses_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/statuses/9967c5707f625e99ec938fb7bcf2e475c7024242","head":{"label":"bholagabbar:LUI-45-bholagabbar","ref":"LUI-45-bholagabbar","sha":"9967c5707f625e99ec938fb7bcf2e475c7024242","user":{"login":"bholagabbar","id":11693595,"avatar_url":"https://avatars.githubusercontent.com/u/11693595?v=3","gravatar_id":"","url":"https://api.github.com/users/bholagabbar","html_url":"https://github.com/bholagabbar","followers_url":"https://api.github.com/users/bholagabbar/followers","following_url":"https://api.github.com/users/bholagabbar/following{/other_user}","gists_url":"https://api.github.com/users/bholagabbar/gists{/gist_id}","starred_url":"https://api.github.com/users/bholagabbar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bholagabbar/subscriptions","organizations_url":"https://api.github.com/users/bholagabbar/orgs","repos_url":"https://api.github.com/users/bholagabbar/repos","events_url":"https://api.github.com/users/bholagabbar/events{/privacy}","received_events_url":"https://api.github.com/users/bholagabbar/received_events","type":"User","site_admin":false},"repo":{"id":48922960,"name":"openmrs-module-legacyui","full_name":"bholagabbar/openmrs-module-legacyui","owner":{"login":"bholagabbar","id":11693595,"avatar_url":"https://avatars.githubusercontent.com/u/11693595?v=3","gravatar_id":"","url":"https://api.github.com/users/bholagabbar","html_url":"https://github.com/bholagabbar","followers_url":"https://api.github.com/users/bholagabbar/followers","following_url":"https://api.github.com/users/bholagabbar/following{/other_user}","gists_url":"https://api.github.com/users/bholagabbar/gists{/gist_id}","starred_url":"https://api.github.com/users/bholagabbar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bholagabbar/subscriptions","organizations_url":"https://api.github.com/users/bholagabbar/orgs","repos_url":"https://api.github.com/users/bholagabbar/repos","events_url":"https://api.github.com/users/bholagabbar/events{/privacy}","received_events_url":"https://api.github.com/users/bholagabbar/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bholagabbar/openmrs-module-legacyui","description":"The legacy user interface for OpenMRS 1.9 is chiefly comprised of administrative functions and the patient dashboard. Apparently, a new and more contemporary UI has been introduced via a UI framework and the legacy UI is kept around for administrative functions that are not yet implemented in the new UI. To retire the Legacy UI as planned, it is required to move the implementations and modules that still rely on it in order to maintain backwards compatibility. The main idea behind this project is to move legacy UI functions into an OpenMRS module that these implementations can install until they are able to migrate away from it, since most of the implementations of OpenMRS around the world are running OpenMRS 1.9.","fork":true,"url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui","forks_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/forks","keys_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/teams","hooks_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/hooks","issue_events_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/issues/events{/number}","events_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/events","assignees_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/assignees{/user}","branches_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/branches{/branch}","tags_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/tags","blobs_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/git/refs{/sha}","trees_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/statuses/{sha}","languages_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/languages","stargazers_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/stargazers","contributors_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/contributors","subscribers_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/subscribers","subscription_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/subscription","commits_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/commits{/sha}","git_commits_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/git/commits{/sha}","comments_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/comments{/number}","issue_comment_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/issues/comments{/number}","contents_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/contents/{+path}","compare_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/merges","archive_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/downloads","issues_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/issues{/number}","pulls_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/pulls{/number}","milestones_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/milestones{/number}","notifications_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/labels{/name}","releases_url":"https://api.github.com/repos/bholagabbar/openmrs-module-legacyui/releases{/id}","created_at":"2016-01-02T20:32:01Z","updated_at":"2016-01-13T05:32:35Z","pushed_at":"2016-01-20T21:47:34Z","git_url":"git://github.com/bholagabbar/openmrs-module-legacyui.git","ssh_url":"git@github.com:bholagabbar/openmrs-module-legacyui.git","clone_url":"https://github.com/bholagabbar/openmrs-module-legacyui.git","svn_url":"https://github.com/bholagabbar/openmrs-module-legacyui","homepage":"","size":1715,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"openmrs:master","ref":"master","sha":"bed5c922ad81cc3a6de7693c01c69d517140d13f","user":{"login":"openmrs","id":860776,"avatar_url":"https://avatars.githubusercontent.com/u/860776?v=3","gravatar_id":"","url":"https://api.github.com/users/openmrs","html_url":"https://github.com/openmrs","followers_url":"https://api.github.com/users/openmrs/followers","following_url":"https://api.github.com/users/openmrs/following{/other_user}","gists_url":"https://api.github.com/users/openmrs/gists{/gist_id}","starred_url":"https://api.github.com/users/openmrs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openmrs/subscriptions","organizations_url":"https://api.github.com/users/openmrs/orgs","repos_url":"https://api.github.com/users/openmrs/repos","events_url":"https://api.github.com/users/openmrs/events{/privacy}","received_events_url":"https://api.github.com/users/openmrs/received_events","type":"Organization","site_admin":false},"repo":{"id":35045181,"name":"openmrs-module-legacyui","full_name":"openmrs/openmrs-module-legacyui","owner":{"login":"openmrs","id":860776,"avatar_url":"https://avatars.githubusercontent.com/u/860776?v=3","gravatar_id":"","url":"https://api.github.com/users/openmrs","html_url":"https://github.com/openmrs","followers_url":"https://api.github.com/users/openmrs/followers","following_url":"https://api.github.com/users/openmrs/following{/other_user}","gists_url":"https://api.github.com/users/openmrs/gists{/gist_id}","starred_url":"https://api.github.com/users/openmrs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openmrs/subscriptions","organizations_url":"https://api.github.com/users/openmrs/orgs","repos_url":"https://api.github.com/users/openmrs/repos","events_url":"https://api.github.com/users/openmrs/events{/privacy}","received_events_url":"https://api.github.com/users/openmrs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openmrs/openmrs-module-legacyui","description":"The legacy user interface for OpenMRS 1.9 is chiefly comprised of administrative functions and the patient dashboard. Apparently, a new and more contemporary UI has been introduced via a UI framework and the legacy UI is kept around for administrative functions that are not yet implemented in the new UI. To retire the Legacy UI as planned, it is required to move the implementations and modules that still rely on it in order to maintain backwards compatibility. The main idea behind this project is to move legacy UI functions into an OpenMRS module that these implementations can install until they are able to migrate away from it, since most of the implementations of OpenMRS around the world are running OpenMRS 1.9.","fork":false,"url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui","forks_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/forks","keys_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/teams","hooks_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/hooks","issue_events_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues/events{/number}","events_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/events","assignees_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/assignees{/user}","branches_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/branches{/branch}","tags_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/tags","blobs_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/git/refs{/sha}","trees_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/statuses/{sha}","languages_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/languages","stargazers_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/stargazers","contributors_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/contributors","subscribers_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/subscribers","subscription_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/subscription","commits_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/commits{/sha}","git_commits_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/git/commits{/sha}","comments_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/comments{/number}","issue_comment_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues/comments{/number}","contents_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/contents/{+path}","compare_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/merges","archive_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/downloads","issues_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues{/number}","pulls_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls{/number}","milestones_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/milestones{/number}","notifications_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/labels{/name}","releases_url":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/releases{/id}","created_at":"2015-05-04T16:12:32Z","updated_at":"2016-01-19T14:07:06Z","pushed_at":"2016-01-21T20:07:08Z","git_url":"git://github.com/openmrs/openmrs-module-legacyui.git","ssh_url":"git@github.com:openmrs/openmrs-module-legacyui.git","clone_url":"https://github.com/openmrs/openmrs-module-legacyui.git","svn_url":"https://github.com/openmrs/openmrs-module-legacyui","homepage":"","size":1837,"stargazers_count":3,"watchers_count":3,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"open_issues_count":2,"forks":25,"open_issues":2,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32"},"html":{"href":"https://github.com/openmrs/openmrs-module-legacyui/pull/32"},"issue":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues/32"},"comments":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/issues/32/comments"},"review_comments":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32/comments"},"review_comment":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/pulls/32/commits"},"statuses":{"href":"https://api.github.com/repos/openmrs/openmrs-module-legacyui/statuses/9967c5707f625e99ec938fb7bcf2e475c7024242"}}}}