{"action":"created","comment":{"url":"https://api.github.com/repos/privacyidea/privacyidea/pulls/comments/58764609","id":58764609,"diff_hunk":"@@ -638,6 +651,64 @@ def testconnection(cls, param):\n         \n         return success, desc\n \n+    def _attributes_to_ldap_attributes(self, attributes, uid):\n+        \"\"\"\n+        takes the attributes and maps them to the LDAP attributes\n+        :param attributes: Attributes to be updated\n+        :type attributes: dict\n+        :param uid: The uid of the user object in the resolver\n+        :type uid: basestring\n+        :return: dict with attribute name as keys and values\n+        \"\"\"\n+        ldap_attributes = {}\n+        for fieldname, value in attributes.iteritems():\n+            if self.map.get(fieldname):\n+                if fieldname == \"password\":\n+                    password = value \n+                    # Create a {SSHA} password\n+                    salt = geturandom(4)\n+                    hr = hashlib.sha1(password)\n+                    hr.update(salt)\n+                    ldap_attributes[self.map.get(fieldname)] = \\\n+                        [MODIFY_REPLACE, [\"{SSHA}\" + hr.digest() + salt]]\n+                else:\n+                    if value:\n+                        if fieldname in self.getUserInfo(uid):\n+                            ldap_attributes[self.map.get(fieldname)] = \\\n+                                 [MODIFY_REPLACE, [value]]\n+                        else:\n+                            ldap_attributes[self.map.get(fieldname)] = \\\n+                                 [MODIFY_ADD, [value]]\n+                    else:\n+                        ldap_attributes[self.map.get(fieldname)] = \\\n+                             [MODIFY_DELETE, [value]]\n+\n+        return ldap_attributes\n+\n+    def update_user(self, uid, attributes=None):\n+        \"\"\"\n+        Update an existing user.\n+        This function is also used to update the password. Since the\n+        attribute mapping know, which field contains the password,\n+        this function can also take care for password changing.\n+\n+        Attributes that are not contained in the dict attributes are not\n+        modified.\n+\n+        :param uid: The uid of the user object in the resolver.\n+        :type uid: basestring\n+        :param attributes: Attributes to be updated.\n+        :type attributes: dict\n+        :return: True in case of success\n+        \"\"\"\n+        attributes = attributes or {}\n+        self._bind()\n+\n+        params = self._attributes_to_ldap_attributes(attributes, uid)\n+        self.l.modify(uid, params)","path":"privacyidea/lib/resolvers/LDAPIdResolver.py","position":119,"original_position":119,"commit_id":"55a243e1cf19e4b7002acff93c78213d83046577","original_commit_id":"55a243e1cf19e4b7002acff93c78213d83046577","user":{"login":"cornelinux","id":1908620,"avatar_url":"https://avatars.githubusercontent.com/u/1908620?v=3","gravatar_id":"","url":"https://api.github.com/users/cornelinux","html_url":"https://github.com/cornelinux","followers_url":"https://api.github.com/users/cornelinux/followers","following_url":"https://api.github.com/users/cornelinux/following{/other_user}","gists_url":"https://api.github.com/users/cornelinux/gists{/gist_id}","starred_url":"https://api.github.com/users/cornelinux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cornelinux/subscriptions","organizations_url":"https://api.github.com/users/cornelinux/orgs","repos_url":"https://api.github.com/users/cornelinux/repos","events_url":"https://api.github.com/users/cornelinux/events{/privacy}","received_events_url":"https://api.github.com/users/cornelinux/received_events","type":"User","site_admin":false},"body":"We should figure out and evaluate the result of \r\n\r\n   self.l.result\r\n\r\nand do the return value of this method accordingly.\r\n\r\n...but I can do this later!","created_at":"2016-04-06T19:13:55Z","updated_at":"2016-04-06T19:13:55Z","html_url":"https://github.com/privacyidea/privacyidea/pull/365#discussion_r58764609","pull_request_url":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365","_links":{"self":{"href":"https://api.github.com/repos/privacyidea/privacyidea/pulls/comments/58764609"},"html":{"href":"https://github.com/privacyidea/privacyidea/pull/365#discussion_r58764609"},"pull_request":{"href":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365"}}},"pull_request":{"url":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365","id":65494892,"html_url":"https://github.com/privacyidea/privacyidea/pull/365","diff_url":"https://github.com/privacyidea/privacyidea/pull/365.diff","patch_url":"https://github.com/privacyidea/privacyidea/pull/365.patch","issue_url":"https://api.github.com/repos/privacyidea/privacyidea/issues/365","number":365,"state":"open","locked":false,"title":"Add ability to modify LDAP user addributes","user":{"login":"wheldom01","id":15330084,"avatar_url":"https://avatars.githubusercontent.com/u/15330084?v=3","gravatar_id":"","url":"https://api.github.com/users/wheldom01","html_url":"https://github.com/wheldom01","followers_url":"https://api.github.com/users/wheldom01/followers","following_url":"https://api.github.com/users/wheldom01/following{/other_user}","gists_url":"https://api.github.com/users/wheldom01/gists{/gist_id}","starred_url":"https://api.github.com/users/wheldom01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wheldom01/subscriptions","organizations_url":"https://api.github.com/users/wheldom01/orgs","repos_url":"https://api.github.com/users/wheldom01/repos","events_url":"https://api.github.com/users/wheldom01/events{/privacy}","received_events_url":"https://api.github.com/users/wheldom01/received_events","type":"User","site_admin":false},"body":"Hi,\r\nI've added the ability to edit existing ldap users details.\r\nUnfortunately I haven't had a chance to test it against a live ldap server yet, but I have updated the mock3ldap and it passes those tests.\r\nPlease have a look and see what you think.\r\n\r\nBest Regards\r\n\r\nMartin\n<a href='#crh-start'></a><a href='#crh-data-%7B%22processed%22%3A%20%5B%22https%3A//github.com/privacyidea/privacyidea/pull/365%23issuecomment-206463126%22%2C%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23issuecomment-206503505%22%2C%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761519%22%2C%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761578%22%2C%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761879%22%2C%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761991%22%2C%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23issuecomment-206514909%22%5D%2C%20%22comments%22%3A%20%7B%22General%20Comment%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23issuecomment-206463126%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22Nice%21%21%5Cr%5CnBut%20I%20think%20you%20are%20missing%20some%20files%3F%5Cr%5Cnldap3mock%20and%20the%20ldapresolver%3F%5Cr%5CnThe%20ldap%20resolver%20needs%20the%20methods%20add_user%2C%20update_user%2C%20delete_user.%5Cr%5Cn%5Cr%5CnYou%20probably%20would%20use%20these%3A%5Cr%5Cn%5Cr%5Cnhttp%3A//ldap3.readthedocs.org/add.html%5Cr%5Cnhttp%3A//ldap3.readthedocs.org/delete.html%5Cr%5Cnhttp%3A//ldap3.readthedocs.org/modify.html%5Cr%5Cn%5Cr%5CnAlso%2C%20you%20might%20want%20to%20add%20your%20name/email%20at%20the%20beginning%20of%20files%20in%20the%20changelog.%5Cr%5Cn%5Cr%5CnThanks%20a%20lot%5Cr%5CnCornelius%5Cr%5Cn%22%2C%20%22created_at%22%3A%20%222016-04-06T16%3A55%3A18Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1908620%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/cornelinux%22%7D%7D%2C%20%7B%22body%22%3A%20%22Hopefully%20that%20helps%2C%20I%27d%20only%20merged%20part%20of%20the%20change%20set%2C%20sorry.%5Cr%5CnAt%20the%20moment%20I%27ve%20only%20added%20update_user%20I%27m%20afraid%2C%20add_user%20and%20delete_user%20are%20on%20my%20todo%20list.%5Cr%5CnI%20just%20wanted%20to%20let%20you%20have%20a%20look%20to%20see%20if%20you%20had%20any%20comment/suggestions%3F%5Cr%5Cn%5Cr%5CnGlad%20you%20like%20the%20bit%20you%20have%20seen%20so%20far.%5Cr%5CnMartin%22%2C%20%22created_at%22%3A%20%222016-04-06T18%3A25%3A14Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/15330084%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/wheldom01%22%7D%7D%2C%20%7B%22body%22%3A%20%22%3A%2B1%3A%22%2C%20%22created_at%22%3A%20%222016-04-06T19%3A02%3A37Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1908620%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/cornelinux%22%7D%7D%5D%2C%20%22title%22%3A%20%22General%20Comment%22%7D%2C%20%22Pull%2055a243e1cf19e4b7002acff93c78213d83046577%20privacyidea/static/components/config/controllers/ldapMachineResolverController.js%204%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761879%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22The%20machine%20resolver%20is%20not%20editable.%20%5Cr%5CnPlease%20remove%20the%20line%5Cr%5Cn%24scope.params.EDITABLE%22%2C%20%22created_at%22%3A%20%222016-04-06T18%3A56%3A43Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1908620%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/cornelinux%22%7D%7D%5D%2C%20%22title%22%3A%20%22File%3A%20privacyidea/static/components/config/controllers/ldapMachineResolverController.js%3AL38-45%22%7D%2C%20%22Pull%2055a243e1cf19e4b7002acff93c78213d83046577%20privacyidea/static/components/config/controllers/configControllers.js%2021%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761519%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22I%20would%20preset%20editable%3Dfalse%21%22%2C%20%22created_at%22%3A%20%222016-04-06T18%3A54%3A24Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1908620%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/cornelinux%22%7D%7D%5D%2C%20%22title%22%3A%20%22File%3A%20privacyidea/static/components/config/controllers/configControllers.js%3AL844-851%22%7D%2C%20%22Pull%2055a243e1cf19e4b7002acff93c78213d83046577%20privacyidea/static/components/config/controllers/configControllers.js%2029%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761578%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22I%20would%20preset%20editable%3Dfalse%2C%20to%20keep%20backward%20compat.%22%2C%20%22created_at%22%3A%20%222016-04-06T18%3A54%3A47Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1908620%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/cornelinux%22%7D%7D%5D%2C%20%22title%22%3A%20%22File%3A%20privacyidea/static/components/config/controllers/configControllers.js%3AL857-864%22%7D%2C%20%22Pull%2055a243e1cf19e4b7002acff93c78213d83046577%20privacyidea/static/components/config/views/config.mresolvers.ldap.html%203%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/privacyidea/privacyidea/pull/365%23discussion_r58761991%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22You%20can%20remove%20the%20complete%20change%20in%20this%20file%2C%20since%20the%20machine%20resolver%20is%20not%20editable.%5Cr%5CnWe%20do%20not%20support%20adding%20machine%20objects%20to%20ldap%20%3A-%29%22%2C%20%22created_at%22%3A%20%222016-04-06T18%3A57%3A22Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1908620%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/cornelinux%22%7D%7D%5D%2C%20%22title%22%3A%20%22File%3A%20privacyidea/static/components/config/views/config.mresolvers.ldap.html%3AL94-115%22%7D%7D%7D'></a>\n<a href='https://www.codereviewhub.com/'><img src='http://www.codereviewhub.com/site/github-bar.png' height=40></a>\n- [ ] <a href='#crh-comment-Pull 55a243e1cf19e4b7002acff93c78213d83046577 privacyidea/static/components/config/controllers/configControllers.js 21'></a> <img src='http://www.codereviewhub.com/site/github-remaining.png' height=16 width=60>&nbsp;<b><a href='https://github.com/privacyidea/privacyidea/pull/365#discussion_r58761519'>File: privacyidea/static/components/config/controllers/configControllers.js:L844-851</a></b>\n- <a href='https://github.com/cornelinux'><img border=0 src='https://avatars.githubusercontent.com/u/1908620?v=3' height=16 width=16'></a> I would preset editable=false!\n- [ ] <a href='#crh-comment-Pull 55a243e1cf19e4b7002acff93c78213d83046577 privacyidea/static/components/config/controllers/configControllers.js 29'></a> <img src='http://www.codereviewhub.com/site/github-remaining.png' height=16 width=60>&nbsp;<b><a href='https://github.com/privacyidea/privacyidea/pull/365#discussion_r58761578'>File: privacyidea/static/components/config/controllers/configControllers.js:L857-864</a></b>\n- <a href='https://github.com/cornelinux'><img border=0 src='https://avatars.githubusercontent.com/u/1908620?v=3' height=16 width=16'></a> I would preset editable=false, to keep backward compat.\n- [ ] <a href='#crh-comment-Pull 55a243e1cf19e4b7002acff93c78213d83046577 privacyidea/static/components/config/controllers/ldapMachineResolverController.js 4'></a> <img src='http://www.codereviewhub.com/site/github-remaining.png' height=16 width=60>&nbsp;<b><a href='https://github.com/privacyidea/privacyidea/pull/365#discussion_r58761879'>File: privacyidea/static/components/config/controllers/ldapMachineResolverController.js:L38-45</a></b>\n- <a href='https://github.com/cornelinux'><img border=0 src='https://avatars.githubusercontent.com/u/1908620?v=3' height=16 width=16'></a> The machine resolver is not editable.\nPlease remove the line\n$scope.params.EDITABLE\n- [ ] <a href='#crh-comment-Pull 55a243e1cf19e4b7002acff93c78213d83046577 privacyidea/static/components/config/views/config.mresolvers.ldap.html 3'></a> <img src='http://www.codereviewhub.com/site/github-remaining.png' height=16 width=60>&nbsp;<b><a href='https://github.com/privacyidea/privacyidea/pull/365#discussion_r58761991'>File: privacyidea/static/components/config/views/config.mresolvers.ldap.html:L94-115</a></b>\n- <a href='https://github.com/cornelinux'><img border=0 src='https://avatars.githubusercontent.com/u/1908620?v=3' height=16 width=16'></a> You can remove the complete change in this file, since the machine resolver is not editable.\nWe do not support adding machine objects to ldap :-)\n- [x] <a href='#crh-comment-General Comment'></a> <img src='http://www.codereviewhub.com/site/github-completed.png' height=16 width=60>&nbsp;<b><a href='https://github.com/privacyidea/privacyidea/pull/365#issuecomment-206463126'>General Comment</a></b>\n- <a href='https://github.com/cornelinux'><img border=0 src='https://avatars.githubusercontent.com/u/1908620?v=3' height=16 width=16'></a> Nice!!\nBut I think you are missing some files?\nldap3mock and the ldapresolver?\nThe ldap resolver needs the methods add_user, update_user, delete_user.\nYou probably would use these:\nhttp://ldap3.readthedocs.org/add.html\nhttp://ldap3.readthedocs.org/delete.html\nhttp://ldap3.readthedocs.org/modify.html\nAlso, you might want to add your name/email at the beginning of files in the changelog.\nThanks a lot\nCornelius\n- <a href='https://github.com/wheldom01'><img border=0 src='https://avatars.githubusercontent.com/u/15330084?v=3' height=16 width=16'></a> Hopefully that helps, I'd only merged part of the change set, sorry.\nAt the moment I've only added update_user I'm afraid, add_user and delete_user are on my todo list.\nI just wanted to let you have a look to see if you had any comment/suggestions?\nGlad you like the bit you have seen so far.\nMartin\n\n\n<a href='https://www.codereviewhub.com/privacyidea/privacyidea/pull/365?mark_as_completed=1'><img src='http://www.codereviewhub.com/site/github-mark-as-completed.png' height=26></a>&nbsp;<a href='https://www.codereviewhub.com/privacyidea/privacyidea/pull/365?approve=1'><img src='http://www.codereviewhub.com/site/github-approve.png' height=26></a>&nbsp;<a href='https://github.com/privacyidea/privacyidea/pull/365'><img src='http://www.codereviewhub.com/site/github-refresh.png' height=26></a>\n<a href='#crh-end'></a>","created_at":"2016-04-06T16:18:52Z","updated_at":"2016-04-06T19:13:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5be1ff0cb8033b23a46940306b8aa20782809017","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365/commits","review_comments_url":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365/comments","review_comment_url":"https://api.github.com/repos/privacyidea/privacyidea/pulls/comments{/number}","comments_url":"https://api.github.com/repos/privacyidea/privacyidea/issues/365/comments","statuses_url":"https://api.github.com/repos/privacyidea/privacyidea/statuses/55a243e1cf19e4b7002acff93c78213d83046577","head":{"label":"wheldom01:master","ref":"master","sha":"55a243e1cf19e4b7002acff93c78213d83046577","user":{"login":"wheldom01","id":15330084,"avatar_url":"https://avatars.githubusercontent.com/u/15330084?v=3","gravatar_id":"","url":"https://api.github.com/users/wheldom01","html_url":"https://github.com/wheldom01","followers_url":"https://api.github.com/users/wheldom01/followers","following_url":"https://api.github.com/users/wheldom01/following{/other_user}","gists_url":"https://api.github.com/users/wheldom01/gists{/gist_id}","starred_url":"https://api.github.com/users/wheldom01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wheldom01/subscriptions","organizations_url":"https://api.github.com/users/wheldom01/orgs","repos_url":"https://api.github.com/users/wheldom01/repos","events_url":"https://api.github.com/users/wheldom01/events{/privacy}","received_events_url":"https://api.github.com/users/wheldom01/received_events","type":"User","site_admin":false},"repo":{"id":54635262,"name":"privacyidea","full_name":"wheldom01/privacyidea","owner":{"login":"wheldom01","id":15330084,"avatar_url":"https://avatars.githubusercontent.com/u/15330084?v=3","gravatar_id":"","url":"https://api.github.com/users/wheldom01","html_url":"https://github.com/wheldom01","followers_url":"https://api.github.com/users/wheldom01/followers","following_url":"https://api.github.com/users/wheldom01/following{/other_user}","gists_url":"https://api.github.com/users/wheldom01/gists{/gist_id}","starred_url":"https://api.github.com/users/wheldom01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wheldom01/subscriptions","organizations_url":"https://api.github.com/users/wheldom01/orgs","repos_url":"https://api.github.com/users/wheldom01/repos","events_url":"https://api.github.com/users/wheldom01/events{/privacy}","received_events_url":"https://api.github.com/users/wheldom01/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/wheldom01/privacyidea","description":"authentication system for two factor authentication (2FA, OTP)","fork":true,"url":"https://api.github.com/repos/wheldom01/privacyidea","forks_url":"https://api.github.com/repos/wheldom01/privacyidea/forks","keys_url":"https://api.github.com/repos/wheldom01/privacyidea/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wheldom01/privacyidea/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wheldom01/privacyidea/teams","hooks_url":"https://api.github.com/repos/wheldom01/privacyidea/hooks","issue_events_url":"https://api.github.com/repos/wheldom01/privacyidea/issues/events{/number}","events_url":"https://api.github.com/repos/wheldom01/privacyidea/events","assignees_url":"https://api.github.com/repos/wheldom01/privacyidea/assignees{/user}","branches_url":"https://api.github.com/repos/wheldom01/privacyidea/branches{/branch}","tags_url":"https://api.github.com/repos/wheldom01/privacyidea/tags","blobs_url":"https://api.github.com/repos/wheldom01/privacyidea/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wheldom01/privacyidea/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wheldom01/privacyidea/git/refs{/sha}","trees_url":"https://api.github.com/repos/wheldom01/privacyidea/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wheldom01/privacyidea/statuses/{sha}","languages_url":"https://api.github.com/repos/wheldom01/privacyidea/languages","stargazers_url":"https://api.github.com/repos/wheldom01/privacyidea/stargazers","contributors_url":"https://api.github.com/repos/wheldom01/privacyidea/contributors","subscribers_url":"https://api.github.com/repos/wheldom01/privacyidea/subscribers","subscription_url":"https://api.github.com/repos/wheldom01/privacyidea/subscription","commits_url":"https://api.github.com/repos/wheldom01/privacyidea/commits{/sha}","git_commits_url":"https://api.github.com/repos/wheldom01/privacyidea/git/commits{/sha}","comments_url":"https://api.github.com/repos/wheldom01/privacyidea/comments{/number}","issue_comment_url":"https://api.github.com/repos/wheldom01/privacyidea/issues/comments{/number}","contents_url":"https://api.github.com/repos/wheldom01/privacyidea/contents/{+path}","compare_url":"https://api.github.com/repos/wheldom01/privacyidea/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wheldom01/privacyidea/merges","archive_url":"https://api.github.com/repos/wheldom01/privacyidea/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wheldom01/privacyidea/downloads","issues_url":"https://api.github.com/repos/wheldom01/privacyidea/issues{/number}","pulls_url":"https://api.github.com/repos/wheldom01/privacyidea/pulls{/number}","milestones_url":"https://api.github.com/repos/wheldom01/privacyidea/milestones{/number}","notifications_url":"https://api.github.com/repos/wheldom01/privacyidea/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wheldom01/privacyidea/labels{/name}","releases_url":"https://api.github.com/repos/wheldom01/privacyidea/releases{/id}","deployments_url":"https://api.github.com/repos/wheldom01/privacyidea/deployments","created_at":"2016-03-24T10:56:34Z","updated_at":"2016-03-24T10:56:37Z","pushed_at":"2016-04-06T18:20:50Z","git_url":"git://github.com/wheldom01/privacyidea.git","ssh_url":"git@github.com:wheldom01/privacyidea.git","clone_url":"https://github.com/wheldom01/privacyidea.git","svn_url":"https://github.com/wheldom01/privacyidea","homepage":"http://www.privacyidea.org","size":21494,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"privacyidea:master","ref":"master","sha":"e571a22ce253982ca281c87e91ae2b9ab0c931e8","user":{"login":"privacyidea","id":7519615,"avatar_url":"https://avatars.githubusercontent.com/u/7519615?v=3","gravatar_id":"","url":"https://api.github.com/users/privacyidea","html_url":"https://github.com/privacyidea","followers_url":"https://api.github.com/users/privacyidea/followers","following_url":"https://api.github.com/users/privacyidea/following{/other_user}","gists_url":"https://api.github.com/users/privacyidea/gists{/gist_id}","starred_url":"https://api.github.com/users/privacyidea/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privacyidea/subscriptions","organizations_url":"https://api.github.com/users/privacyidea/orgs","repos_url":"https://api.github.com/users/privacyidea/repos","events_url":"https://api.github.com/users/privacyidea/events{/privacy}","received_events_url":"https://api.github.com/users/privacyidea/received_events","type":"Organization","site_admin":false},"repo":{"id":20446681,"name":"privacyidea","full_name":"privacyidea/privacyidea","owner":{"login":"privacyidea","id":7519615,"avatar_url":"https://avatars.githubusercontent.com/u/7519615?v=3","gravatar_id":"","url":"https://api.github.com/users/privacyidea","html_url":"https://github.com/privacyidea","followers_url":"https://api.github.com/users/privacyidea/followers","following_url":"https://api.github.com/users/privacyidea/following{/other_user}","gists_url":"https://api.github.com/users/privacyidea/gists{/gist_id}","starred_url":"https://api.github.com/users/privacyidea/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privacyidea/subscriptions","organizations_url":"https://api.github.com/users/privacyidea/orgs","repos_url":"https://api.github.com/users/privacyidea/repos","events_url":"https://api.github.com/users/privacyidea/events{/privacy}","received_events_url":"https://api.github.com/users/privacyidea/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/privacyidea/privacyidea","description":"authentication system for two factor authentication (2FA, OTP)","fork":false,"url":"https://api.github.com/repos/privacyidea/privacyidea","forks_url":"https://api.github.com/repos/privacyidea/privacyidea/forks","keys_url":"https://api.github.com/repos/privacyidea/privacyidea/keys{/key_id}","collaborators_url":"https://api.github.com/repos/privacyidea/privacyidea/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/privacyidea/privacyidea/teams","hooks_url":"https://api.github.com/repos/privacyidea/privacyidea/hooks","issue_events_url":"https://api.github.com/repos/privacyidea/privacyidea/issues/events{/number}","events_url":"https://api.github.com/repos/privacyidea/privacyidea/events","assignees_url":"https://api.github.com/repos/privacyidea/privacyidea/assignees{/user}","branches_url":"https://api.github.com/repos/privacyidea/privacyidea/branches{/branch}","tags_url":"https://api.github.com/repos/privacyidea/privacyidea/tags","blobs_url":"https://api.github.com/repos/privacyidea/privacyidea/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/privacyidea/privacyidea/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/privacyidea/privacyidea/git/refs{/sha}","trees_url":"https://api.github.com/repos/privacyidea/privacyidea/git/trees{/sha}","statuses_url":"https://api.github.com/repos/privacyidea/privacyidea/statuses/{sha}","languages_url":"https://api.github.com/repos/privacyidea/privacyidea/languages","stargazers_url":"https://api.github.com/repos/privacyidea/privacyidea/stargazers","contributors_url":"https://api.github.com/repos/privacyidea/privacyidea/contributors","subscribers_url":"https://api.github.com/repos/privacyidea/privacyidea/subscribers","subscription_url":"https://api.github.com/repos/privacyidea/privacyidea/subscription","commits_url":"https://api.github.com/repos/privacyidea/privacyidea/commits{/sha}","git_commits_url":"https://api.github.com/repos/privacyidea/privacyidea/git/commits{/sha}","comments_url":"https://api.github.com/repos/privacyidea/privacyidea/comments{/number}","issue_comment_url":"https://api.github.com/repos/privacyidea/privacyidea/issues/comments{/number}","contents_url":"https://api.github.com/repos/privacyidea/privacyidea/contents/{+path}","compare_url":"https://api.github.com/repos/privacyidea/privacyidea/compare/{base}...{head}","merges_url":"https://api.github.com/repos/privacyidea/privacyidea/merges","archive_url":"https://api.github.com/repos/privacyidea/privacyidea/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/privacyidea/privacyidea/downloads","issues_url":"https://api.github.com/repos/privacyidea/privacyidea/issues{/number}","pulls_url":"https://api.github.com/repos/privacyidea/privacyidea/pulls{/number}","milestones_url":"https://api.github.com/repos/privacyidea/privacyidea/milestones{/number}","notifications_url":"https://api.github.com/repos/privacyidea/privacyidea/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/privacyidea/privacyidea/labels{/name}","releases_url":"https://api.github.com/repos/privacyidea/privacyidea/releases{/id}","deployments_url":"https://api.github.com/repos/privacyidea/privacyidea/deployments","created_at":"2014-06-03T14:47:02Z","updated_at":"2016-04-04T06:59:29Z","pushed_at":"2016-04-06T18:20:50Z","git_url":"git://github.com/privacyidea/privacyidea.git","ssh_url":"git@github.com:privacyidea/privacyidea.git","clone_url":"https://github.com/privacyidea/privacyidea.git","svn_url":"https://github.com/privacyidea/privacyidea","homepage":"http://www.privacyidea.org","size":21984,"stargazers_count":104,"watchers_count":104,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":32,"mirror_url":null,"open_issues_count":19,"forks":32,"open_issues":19,"watchers":104,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365"},"html":{"href":"https://github.com/privacyidea/privacyidea/pull/365"},"issue":{"href":"https://api.github.com/repos/privacyidea/privacyidea/issues/365"},"comments":{"href":"https://api.github.com/repos/privacyidea/privacyidea/issues/365/comments"},"review_comments":{"href":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365/comments"},"review_comment":{"href":"https://api.github.com/repos/privacyidea/privacyidea/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/privacyidea/privacyidea/pulls/365/commits"},"statuses":{"href":"https://api.github.com/repos/privacyidea/privacyidea/statuses/55a243e1cf19e4b7002acff93c78213d83046577"}}}}