Changeset 22
- Timestamp:
- 2008年07月28日 01时08分10秒 (4 years ago)
- Location:
- trunk
- Files:
-
- 16 modified
-
pysvnmanager/config/svn.passwd.in (modified) (1 diff)
-
pysvnmanager/controllers/authz.py (modified) (5 diffs)
-
pysvnmanager/controllers/role.py (modified) (6 diffs)
-
pysvnmanager/controllers/security.py (modified) (1 diff)
-
pysvnmanager/i18n/en/LC_MESSAGES/pysvnmanager.po (modified) (12 diffs)
-
pysvnmanager/i18n/pysvnmanager.pot (modified) (8 diffs)
-
pysvnmanager/i18n/zh/LC_MESSAGES/pysvnmanager.po (modified) (11 diffs)
-
pysvnmanager/model/auth/http.py (modified) (2 diffs)
-
pysvnmanager/model/svnauthz.py (modified) (9 diffs)
-
pysvnmanager/templates/role/index.mako (modified) (8 diffs)
-
pysvnmanager/tests/__init__.py (modified) (2 diffs)
-
pysvnmanager/tests/functional/test_authz.py (modified) (2 diffs)
-
pysvnmanager/tests/functional/test_check.py (modified) (1 diff)
-
pysvnmanager/tests/functional/test_role.py (modified) (5 diffs)
-
pysvnmanager/tests/test_models.py (modified) (2 diffs)
-
test.ini (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pysvnmanager/config/svn.passwd.in
r2 r22 7 7 user2:giShzi.a1DcJg 8 8 badboy:OY24/4nS/3Yg. 9 蒋鑫:58EvOwQjOEvWc -
trunk/pysvnmanager/controllers/authz.py
r21 r22 76 76 select = d.get('select') 77 77 repos = self.authz.get_repos(select) 78 if not repos: 79 return msg; 80 81 # get javascript code for top_form's role_selector 82 msg += 'id[0]="%s";' % '...' 83 msg += 'name[0]="%s";\n' % _("Please choose...") 84 total += 1; 85 for path in repos.path_list: 86 msg += 'id[%d]="%s";' % (total, path) 87 msg += 'name[%d]="%s";\n' % (total, path) 78 79 if repos: 80 # get javascript code for top_form's role_selector 81 msg += 'id[0]="%s";' % '...' 82 msg += 'name[0]="%s";\n' % _("Please choose...") 88 83 total += 1; 89 msg += 'total=%d;\n' % total 90 msg += 'admin_users="%s";\n' % repos.admins 91 msg += 'revision="%s";\n' % self.authz.version 84 for path in repos.path_list: 85 msg += 'id[%d]="%s";' % (total, path) 86 msg += 'name[%d]="%s";\n' % (total, path) 87 total += 1; 88 msg += 'total=%d;\n' % total 89 msg += 'admin_users="%s";\n' % repos.admins 90 msg += 'revision="%s";\n' % self.authz.version 92 91 93 92 return msg … … 132 131 path = d.get('path') 133 132 rules = d.get('rules') 133 revision = d.get('revision', self.authz.version) 134 134 135 # mode1: new or edit repository 135 136 mode1 = d.get('mode1') 137 if mode1 == "new": 138 isAddRepos = True 139 else: 140 isAddRepos = False 141 136 142 # mode2: new or edit module 137 143 mode2 = d.get('mode2') 138 revision = d.get('revision', self.authz.version) 139 144 if mode2 == "new": 145 isAddModule = True 146 else: 147 isAddModule = False 148 140 149 try: 141 if mode1 == "new":150 if isAddRepos: 142 151 repos = self.authz.add_repos(reposname) 143 152 else: … … 147 156 148 157 if path: 149 if mode2 == "new":150 module = self.authz.add_module(reposname,path)158 if isAddModule: 159 module = repos.add_module(path) 151 160 else: 152 module = self.authz.get_module(reposname,path)161 module = repos.get_module(path) 153 162 if not module: 154 163 raise Exception, _("Module %s not exist.") % path … … 165 174 self.authz.set_rules(reposname, path, rules); 166 175 self.authz.save(revision) 167 except Exception, e:168 msg = unicode(e) 169 170 log.info(_( "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)") % \176 except Exception, (e,): 177 msg = unicode(e).encode('utf-8') 178 179 log.info(_(u"User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)") % \ 171 180 {'user':session.get('user'), 'rev': revision, 'msg': msg} ) 172 181 … … 189 198 self.authz.del_module(reposname, path); 190 199 self.authz.save(revision) 191 except Exception, e:192 msg = unicode(e) 193 194 log.info(_( "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)") % \200 except Exception, (e,): 201 msg = unicode(e).encode('utf-8') 202 203 log.info(_(u"User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)") % \ 195 204 {'user':session.get('user'), 'rev': revision, 'msg': msg} ) 196 205 -
trunk/pysvnmanager/controllers/role.py
r21 r22 52 52 continue 53 53 msg += 'id[%d]="%s";' % (members_count, uname) 54 if uname[0] == '@': 55 msg += 'name[%d]="%s";\n' % (members_count, _("Group:")+uname[1:]) 56 else: 57 msg += 'name[%d]="%s";\n' % (members_count, uname) 54 assert uname[0] == '@' 55 msg += 'name[%d]="%s";\n' % (members_count, _("Group:")+uname[1:]) 58 56 members_count += 1; 59 57 for uname in self.aliaslist: 60 58 msg += 'id[%d]="%s";' % (members_count, uname) 61 if uname[0] == '&': 62 msg += 'name[%d]="%s";\n' % (members_count, _("Alias:")+uname[1:]) 63 else: 64 msg += 'name[%d]="%s";\n' % (members_count, uname) 59 assert uname[0] == '&' 60 msg += 'name[%d]="%s";\n' % (members_count, _("Alias:")+uname[1:]) 65 61 members_count += 1; 66 62 msg += 'members_count=%d;\n' % members_count … … 73 69 for i in roleobj: 74 70 uname = i.uname 75 if uname == '*' or uname[0] == '$':76 continue71 #if uname == '*' or uname[0] == '$': 72 # continue 77 73 msg += 'id[%d]="%s";' % (members_count, uname) 78 74 if uname[0] == '@': … … 116 112 self.authz.set_group(rolename, member_list, autodrop=autodrop) 117 113 self.authz.save(revision) 118 except Exception, e:114 except Exception, (e,): 119 115 msg = unicode(e) 120 116 … … 136 132 self.authz.del_group(rolename) 137 133 self.authz.save(revision) 138 except Exception, e:134 except Exception, (e,): 139 135 msg = unicode(e) 140 136 141 log.info(_( "User %(user)s delete group: %(grp)s. (rev:%(rev)s,%(msg)s)") % \137 log.info(_(u"User %(user)s delete group: %(grp)s. (rev:%(rev)s,%(msg)s)") % \ 142 138 {'user':session.get('user'), 'grp': rolename, 'rev': revision, 'msg': msg} ) 143 139 … … 156 152 self.authz.add_alias(aliasname, username) 157 153 self.authz.save(revision) 158 except Exception, e:154 except Exception, (e,): 159 155 msg = unicode(e) 160 156 161 log.info(_( "User %(user)s changed alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \157 log.info(_(u"User %(user)s changed alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \ 162 158 {'user':session.get('user'), 'alias': aliasname, 'rev': revision, 'msg': msg} ) 163 159 … … 176 172 self.authz.del_alias(aliasname) 177 173 self.authz.save(revision) 178 except Exception, e:174 except Exception, (e,): 179 175 msg = unicode(e) 180 176 181 log.info(_( "User %(user)s delete alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \177 log.info(_(u"User %(user)s delete alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \ 182 178 {'user':session.get('user'), 'alias': aliasname, 'rev': revision, 'msg': msg} ) 183 179 -
trunk/pysvnmanager/controllers/security.py
r9 r22 21 21 auth_passed = False 22 22 # Both fields filled? 23 username = str(request.params.get('username'))24 password = str(request.params.get('password'))23 username = request.params.get('username') 24 password = request.params.get('password') 25 25 26 26 for auth in cfg.auth: -
trunk/pysvnmanager/i18n/en/LC_MESSAGES/pysvnmanager.po
r20 r22 10 10 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 11 11 "POT-Creation-Date: 2008-07-03 22:14+0800\n" 12 "PO-Revision-Date: 2008-07-2 6 11:16+0800\n"12 "PO-Revision-Date: 2008-07-27 13:21+0800\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: en <LL@li.org>\n" … … 19 19 "Generated-By: Babel 0.9.2\n" 20 20 21 #: pysvnmanager/controllers/authz.py:3 321 #: pysvnmanager/controllers/authz.py:31 22 22 #: pysvnmanager/templates/authz/index.mako:159 23 23 #: pysvnmanager/templates/check/index.mako:10 … … 25 25 msgstr "" 26 26 27 #: pysvnmanager/controllers/authz.py:3 427 #: pysvnmanager/controllers/authz.py:32 28 28 #: pysvnmanager/templates/authz/index.mako:161 29 29 #: pysvnmanager/templates/check/index.mako:11 … … 31 31 msgstr "" 32 32 33 #: pysvnmanager/controllers/authz.py:3 533 #: pysvnmanager/controllers/authz.py:33 34 34 #: pysvnmanager/templates/authz/index.mako:163 35 35 #: pysvnmanager/templates/check/index.mako:12 … … 37 37 msgstr "" 38 38 39 #: pysvnmanager/controllers/authz.py: 41pysvnmanager/controllers/role.py:5539 #: pysvnmanager/controllers/authz.py:38 pysvnmanager/controllers/role.py:55 40 40 #: pysvnmanager/controllers/role.py:79 41 41 #: pysvnmanager/templates/authz/index.mako:155 … … 48 48 msgstr "" 49 49 50 #: pysvnmanager/controllers/authz.py:4 7pysvnmanager/controllers/role.py:6250 #: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:62 51 51 #: pysvnmanager/controllers/role.py:81 52 52 #: pysvnmanager/templates/authz/index.mako:157 … … 59 59 msgstr "" 60 60 61 #: pysvnmanager/controllers/authz.py: 67 pysvnmanager/controllers/authz.py:9162 #: pysvnmanager/controllers/check.py:9 3pysvnmanager/controllers/role.py:4861 #: pysvnmanager/controllers/authz.py:59 pysvnmanager/controllers/authz.py:83 62 #: pysvnmanager/controllers/check.py:91 pysvnmanager/controllers/role.py:48 63 63 #: pysvnmanager/templates/check/index.mako:9 64 64 #: pysvnmanager/templates/check/index.mako:23 … … 68 68 msgstr "" 69 69 70 #: pysvnmanager/controllers/authz.py:1 5570 #: pysvnmanager/controllers/authz.py:146 71 71 #, python-format 72 72 msgid "Repository %s not exist." 73 73 msgstr "" 74 74 75 #: pysvnmanager/controllers/authz.py:1 6375 #: pysvnmanager/controllers/authz.py:154 76 76 #, python-format 77 77 msgid "Module %s not exist." 78 78 msgstr "" 79 79 80 #: pysvnmanager/controllers/authz.py:16 980 #: pysvnmanager/controllers/authz.py:160 81 81 msgid "You can not delete yourself from admin list." 82 82 msgstr "" 83 83 84 #: pysvnmanager/controllers/authz.py:17 984 #: pysvnmanager/controllers/authz.py:170 85 85 #, python-format 86 86 msgid "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)" 87 87 msgstr "" 88 88 89 #: pysvnmanager/controllers/authz.py: 20389 #: pysvnmanager/controllers/authz.py:194 90 90 #, python-format 91 91 msgid "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)" 92 92 msgstr "" 93 93 94 #: pysvnmanager/controllers/check.py: 7095 #: pysvnmanager/templates/auth_failed.mako: 494 #: pysvnmanager/controllers/check.py:68 95 #: pysvnmanager/templates/auth_failed.mako:3 96 96 msgid "Permission denied." 97 97 msgstr "" … … 132 132 msgstr "" 133 133 134 #: pysvnmanager/model/svnauthz.py:5 8134 #: pysvnmanager/model/svnauthz.py:59 135 135 msgid "Name is not given." 136 136 msgstr "" 137 137 138 #: pysvnmanager/model/svnauthz.py:6 0138 #: pysvnmanager/model/svnauthz.py:61 139 139 msgid "Name is not string." 140 140 msgstr "" 141 141 142 #: pysvnmanager/model/svnauthz.py:6 4142 #: pysvnmanager/model/svnauthz.py:65 143 143 #, python-format 144 144 msgid "Name (%s) contains invalid characters." 145 145 msgstr "" 146 146 147 #: pysvnmanager/model/svnauthz.py:222 148 msgid "Aliasname is not provided." 149 msgstr "" 150 151 #: pysvnmanager/model/svnauthz.py:224 152 msgid "Aliasname should not begin with &." 153 msgstr "" 154 155 #: pysvnmanager/model/svnauthz.py:397 156 msgid "Group name is not provided." 157 msgstr "" 158 159 #: pysvnmanager/model/svnauthz.py:399 160 msgid "Group name should not begin with @." 161 msgstr "" 162 163 #: pysvnmanager/model/svnauthz.py:469 147 #: pysvnmanager/model/svnauthz.py:473 164 148 #, python-format 165 149 msgid "Recursive group membership for %s" 166 150 msgstr "" 167 151 168 #: pysvnmanager/model/svnauthz.py:56 1152 #: pysvnmanager/model/svnauthz.py:567 169 153 #, python-format 170 154 msgid "Not a valid username: %s" 171 155 msgstr "" 172 156 173 #: pysvnmanager/model/svnauthz.py:68 6157 #: pysvnmanager/model/svnauthz.py:684 174 158 #, python-format 175 159 msgid "Group %s is referenced by group %s." 176 160 msgstr "" 177 161 178 #: pysvnmanager/model/svnauthz.py:122 9162 #: pysvnmanager/model/svnauthz.py:1224 179 163 msgid "Update failed! You are working on a out-of-date revision." 180 164 msgstr "" 181 165 182 #: pysvnmanager/model/svnauthz.py:14 61 pysvnmanager/model/svnauthz.py:1468183 #: pysvnmanager/model/svnauthz.py:14 72166 #: pysvnmanager/model/svnauthz.py:1458 pysvnmanager/model/svnauthz.py:1465 167 #: pysvnmanager/model/svnauthz.py:1469 184 168 #, python-format 185 169 msgid "Unknown rule format: %s" 186 170 msgstr "" 187 171 188 #: pysvnmanager/model/svnauthz.py:148 6172 #: pysvnmanager/model/svnauthz.py:1483 189 173 #, python-format 190 174 msgid "No module exist for %s:%s" 191 175 msgstr "" 192 176 193 #: pysvnmanager/model/svnauthz.py:159 7177 #: pysvnmanager/model/svnauthz.py:1592 194 178 #, python-format 195 179 msgid "Alias %s is referenced by group %s." 196 180 msgstr "" 197 181 198 #: pysvnmanager/model/svnauthz.py:160 9182 #: pysvnmanager/model/svnauthz.py:1604 199 183 #, python-format 200 184 msgid "%s is referenced by [%s]." 201 185 msgstr "" 202 186 203 #: pysvnmanager/model/svnauthz.py:174 6187 #: pysvnmanager/model/svnauthz.py:1741 204 188 #, python-format 205 189 msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 206 190 msgstr "" 207 191 208 #: pysvnmanager/model/svnauthz.py:174 8192 #: pysvnmanager/model/svnauthz.py:1743 209 193 #, python-format 210 194 msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 211 195 msgstr "" 212 196 213 #: pysvnmanager/model/svnauthz.py:17 50197 #: pysvnmanager/model/svnauthz.py:1745 214 198 #, python-format 215 199 msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 216 200 msgstr "" 217 201 218 #: pysvnmanager/model/svnauthz.py:178 8202 #: pysvnmanager/model/svnauthz.py:1783 219 203 #, python-format 220 204 msgid "" … … 228 212 msgstr "" 229 213 230 #: pysvnmanager/model/svnauthz.py:180 7214 #: pysvnmanager/model/svnauthz.py:1802 231 215 #, python-format 232 216 msgid "" … … 457 441 msgstr "" 458 442 443 #: pysvnmanager/templates/role/index.mako:420 444 msgid "Update group failed:" 445 msgstr "" 446 447 #: pysvnmanager/templates/role/index.mako:427 448 msgid "Update group successfully." 449 msgstr "" 450 459 451 #: pysvnmanager/templates/role/index.mako:448 460 452 msgid "Are you sure to delete group:" 461 453 msgstr "" 462 454 455 #: pysvnmanager/templates/role/index.mako:471 456 msgid "Delete group failed:" 457 msgstr "" 458 459 #: pysvnmanager/templates/role/index.mako:478 460 msgid "Delete group successfully." 461 msgstr "" 462 463 #: pysvnmanager/templates/role/index.mako:512 464 msgid "Update alias failed:" 465 msgstr "" 466 467 #: pysvnmanager/templates/role/index.mako:519 468 msgid "Update alias successfully." 469 msgstr "" 470 463 471 #: pysvnmanager/templates/role/index.mako:539 464 472 msgid "Are you sure to delete alias:" 465 473 msgstr "" 466 474 475 #: pysvnmanager/templates/role/index.mako:562 476 msgid "Delete alias failed:" 477 msgstr "" 478 479 #: pysvnmanager/templates/role/index.mako:569 480 msgid "Delete alias successfully." 481 msgstr "" 482 467 483 #: pysvnmanager/templates/role/index.mako:645 468 484 msgid "Select a role name:" … … 501 517 msgstr "" 502 518 503 #~ msgid " Name contains invalid characters."519 #~ msgid "Aliasname is not provided." 504 520 #~ msgstr "" 505 521 506 #~ msgid " Not a valide username: %s"522 #~ msgid "Aliasname should not begin with &." 507 523 #~ msgstr "" 508 524 509 #~ msgid " Alias %s is used by rules."525 #~ msgid "Group name is not provided." 510 526 #~ msgstr "" 511 527 528 #~ msgid "Group name should not begin with @." 529 #~ msgstr "" 530 -
trunk/pysvnmanager/i18n/pysvnmanager.pot
r20 r22 9 9 "Project-Id-Version: pySvnManager 0.1.2\n" 10 10 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 11 "POT-Creation-Date: 2008-07-2 6 11:15+0800\n"11 "POT-Creation-Date: 2008-07-27 13:21+0800\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 18 18 "Generated-By: Babel 0.9.2\n" 19 19 20 #: pysvnmanager/controllers/authz.py:3 3pysvnmanager/templates/authz/index.mako:15920 #: pysvnmanager/controllers/authz.py:31 pysvnmanager/templates/authz/index.mako:159 21 21 #: pysvnmanager/templates/check/index.mako:10 22 22 msgid "All users(with anon)" 23 23 msgstr "" 24 24 25 #: pysvnmanager/controllers/authz.py:3 4pysvnmanager/templates/authz/index.mako:16125 #: pysvnmanager/controllers/authz.py:32 pysvnmanager/templates/authz/index.mako:161 26 26 #: pysvnmanager/templates/check/index.mako:11 27 27 msgid "Known users" 28 28 msgstr "" 29 29 30 #: pysvnmanager/controllers/authz.py:3 5pysvnmanager/templates/authz/index.mako:16330 #: pysvnmanager/controllers/authz.py:33 pysvnmanager/templates/authz/index.mako:163 31 31 #: pysvnmanager/templates/check/index.mako:12 32 32 msgid "Anonymous" 33 33 msgstr "" 34 34 35 #: pysvnmanager/controllers/authz.py: 41pysvnmanager/controllers/role.py:5535 #: pysvnmanager/controllers/authz.py:38 pysvnmanager/controllers/role.py:55 36 36 #: pysvnmanager/controllers/role.py:79 pysvnmanager/templates/authz/index.mako:155 37 37 #: pysvnmanager/templates/check/index.mako:17 … … 43 43 msgstr "" 44 44 45 #: pysvnmanager/controllers/authz.py:4 7pysvnmanager/controllers/role.py:6245 #: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:62 46 46 #: pysvnmanager/controllers/role.py:81 pysvnmanager/templates/authz/index.mako:157 47 47 #: pysvnmanager/templates/check/index.mako:19 … … 53 53 msgstr "" 54 54 55 #: pysvnmanager/controllers/authz.py: 67 pysvnmanager/controllers/authz.py:9156 #: pysvnmanager/controllers/check.py:9 3pysvnmanager/controllers/role.py:4855 #: pysvnmanager/controllers/authz.py:59 pysvnmanager/controllers/authz.py:83 56 #: pysvnmanager/controllers/check.py:91 pysvnmanager/controllers/role.py:48 57 57 #: pysvnmanager/templates/check/index.mako:9 58 58 #: pysvnmanager/templates/check/index.mako:23 … … 62 62 msgstr "" 63 63 64 #: pysvnmanager/controllers/authz.py:1 5564 #: pysvnmanager/controllers/authz.py:146 65 65 #, python-format 66 66 msgid "Repository %s not exist." 67 67 msgstr "" 68 68 69 #: pysvnmanager/controllers/authz.py:1 6369 #: pysvnmanager/controllers/authz.py:154 70 70 #, python-format 71 71 msgid "Module %s not exist." 72 72 msgstr "" 73 73 74 #: pysvnmanager/controllers/authz.py:16 974 #: pysvnmanager/controllers/authz.py:160 75 75 msgid "You can not delete yourself from admin list." 76 76 msgstr "" 77 77 78 #: pysvnmanager/controllers/authz.py:17 978 #: pysvnmanager/controllers/authz.py:170 79 79 #, python-format 80 80 msgid "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)" 81 81 msgstr "" 82 82 83 #: pysvnmanager/controllers/authz.py: 20383 #: pysvnmanager/controllers/authz.py:194 84 84 #, python-format 85 85 msgid "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)" 86 86 msgstr "" 87 87 88 #: pysvnmanager/controllers/check.py: 70 pysvnmanager/templates/auth_failed.mako:488 #: pysvnmanager/controllers/check.py:68 pysvnmanager/templates/auth_failed.mako:3 89 89 msgid "Permission denied." 90 90 msgstr "" … … 125 125 msgstr "" 126 126 127 #: pysvnmanager/model/svnauthz.py:5 8127 #: pysvnmanager/model/svnauthz.py:59 128 128 msgid "Name is not given." 129 129 msgstr "" 130 130 131 #: pysvnmanager/model/svnauthz.py:6 0131 #: pysvnmanager/model/svnauthz.py:61 132 132 msgid "Name is not string." 133 133 msgstr "" 134 134 135 #: pysvnmanager/model/svnauthz.py:6 4135 #: pysvnmanager/model/svnauthz.py:65 136 136 #, python-format 137 137 msgid "Name (%s) contains invalid characters." 138 138 msgstr "" 139 139 140 #: pysvnmanager/model/svnauthz.py:222 141 msgid "Aliasname is not provided." 142 msgstr "" 143 144 #: pysvnmanager/model/svnauthz.py:224 145 msgid "Aliasname should not begin with &." 146 msgstr "" 147 148 #: pysvnmanager/model/svnauthz.py:397 149 msgid "Group name is not provided." 150 msgstr "" 151 152 #: pysvnmanager/model/svnauthz.py:399 153 msgid "Group name should not begin with @." 154 msgstr "" 155 156 #: pysvnmanager/model/svnauthz.py:469 140 #: pysvnmanager/model/svnauthz.py:473 157 141 #, python-format 158 142 msgid "Recursive group membership for %s" 159 143 msgstr "" 160 144 161 #: pysvnmanager/model/svnauthz.py:56 1145 #: pysvnmanager/model/svnauthz.py:567 162 146 #, python-format 163 147 msgid "Not a valid username: %s" 164 148 msgstr "" 165 149 166 #: pysvnmanager/model/svnauthz.py:68 6150 #: pysvnmanager/model/svnauthz.py:684 167 151 #, python-format 168 152 msgid "Group %s is referenced by group %s." 169 153 msgstr "" 170 154 171 #: pysvnmanager/model/svnauthz.py:122 9155 #: pysvnmanager/model/svnauthz.py:1224 172 156 msgid "Update failed! You are working on a out-of-date revision." 173 157 msgstr "" 174 158 175 #: pysvnmanager/model/svnauthz.py:14 61 pysvnmanager/model/svnauthz.py:1468176 #: pysvnmanager/model/svnauthz.py:14 72159 #: pysvnmanager/model/svnauthz.py:1458 pysvnmanager/model/svnauthz.py:1465 160 #: pysvnmanager/model/svnauthz.py:1469 177 161 #, python-format 178 162 msgid "Unknown rule format: %s" 179 163 msgstr "" 180 164 181 #: pysvnmanager/model/svnauthz.py:148 6165 #: pysvnmanager/model/svnauthz.py:1483 182 166 #, python-format 183 167 msgid "No module exist for %s:%s" 184 168 msgstr "" 185 169 186 #: pysvnmanager/model/svnauthz.py:159 7170 #: pysvnmanager/model/svnauthz.py:1592 187 171 #, python-format 188 172 msgid "Alias %s is referenced by group %s." 189 173 msgstr "" 190 174 191 #: pysvnmanager/model/svnauthz.py:160 9175 #: pysvnmanager/model/svnauthz.py:1604 192 176 #, python-format 193 177 msgid "%s is referenced by [%s]." 194 178 msgstr "" 195 179 196 #: pysvnmanager/model/svnauthz.py:174 6180 #: pysvnmanager/model/svnauthz.py:1741 197 181 #, python-format 198 182 msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 199 183 msgstr "" 200 184 201 #: pysvnmanager/model/svnauthz.py:174 8185 #: pysvnmanager/model/svnauthz.py:1743 202 186 #, python-format 203 187 msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 204 188 msgstr "" 205 189 206 #: pysvnmanager/model/svnauthz.py:17 50190 #: pysvnmanager/model/svnauthz.py:1745 207 191 #, python-format 208 192 msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 209 193 msgstr "" 210 194 211 #: pysvnmanager/model/svnauthz.py:178 8195 #: pysvnmanager/model/svnauthz.py:1783 212 196 #, python-format 213 197 msgid "" … … 221 205 msgstr "" 222 206 223 #: pysvnmanager/model/svnauthz.py:180 7207 #: pysvnmanager/model/svnauthz.py:1802 224 208 #, python-format 225 209 msgid "" … … 449 433 msgstr "" 450 434 435 #: pysvnmanager/templates/role/index.mako:420 436 msgid "Update group failed:" 437 msgstr "" 438 439 #: pysvnmanager/templates/role/index.mako:427 440 msgid "Update group successfully." 441 msgstr "" 442 451 443 #: pysvnmanager/templates/role/index.mako:448 452 444 msgid "Are you sure to delete group:" 453 445 msgstr "" 454 446 447 #: pysvnmanager/templates/role/index.mako:471 448 msgid "Delete group failed:" 449 msgstr "" 450 451 #: pysvnmanager/templates/role/index.mako:478 452 msgid "Delete group successfully." 453 msgstr "" 454 455 #: pysvnmanager/templates/role/index.mako:512 456 msgid "Update alias failed:" 457 msgstr "" 458 459 #: pysvnmanager/templates/role/index.mako:519 460 msgid "Update alias successfully." 461 msgstr "" 462 455 463 #: pysvnmanager/templates/role/index.mako:539 456 464 msgid "Are you sure to delete alias:" 457 465 msgstr "" 458 466 467 #: pysvnmanager/templates/role/index.mako:562 468 msgid "Delete alias failed:" 469 msgstr "" 470 471 #: pysvnmanager/templates/role/index.mako:569 472 msgid "Delete alias successfully." 473 msgstr "" 474 459 475 #: pysvnmanager/templates/role/index.mako:645 460 476 msgid "Select a role name:" -
trunk/pysvnmanager/i18n/zh/LC_MESSAGES/pysvnmanager.po
r20 r22 12 12 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 13 13 "POT-Creation-Date: 2008-07-03 22:14+0800\n" 14 "PO-Revision-Date: 2008-07-2 6 11:19+0800\n"14 "PO-Revision-Date: 2008-07-27 13:23+0800\n" 15 15 "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" 16 16 "Language-Team: <zh@li.org>\n" … … 22 22 "X-Generator: KBabel 1.11.4\n" 23 23 24 #: pysvnmanager/controllers/authz.py:3 324 #: pysvnmanager/controllers/authz.py:31 25 25 #: pysvnmanager/templates/authz/index.mako:159 26 26 #: pysvnmanager/templates/check/index.mako:10 … … 28 28 msgstr "所有用户(含匿名)" 29 29 30 #: pysvnmanager/controllers/authz.py:3 430 #: pysvnmanager/controllers/authz.py:32 31 31 #: pysvnmanager/templates/authz/index.mako:161 32 32 #: pysvnmanager/templates/check/index.mako:11 … … 34 34 msgstr "注册用户" 35 35 36 #: pysvnmanager/controllers/authz.py:3 536 #: pysvnmanager/controllers/authz.py:33 37 37 #: pysvnmanager/templates/authz/index.mako:163 38 38 #: pysvnmanager/templates/check/index.mako:12 … … 40 40 msgstr "匿名用户" 41 41 42 #: pysvnmanager/controllers/authz.py: 41pysvnmanager/controllers/role.py:5542 #: pysvnmanager/controllers/authz.py:38 pysvnmanager/controllers/role.py:55 43 43 #: pysvnmanager/controllers/role.py:79 44 44 #: pysvnmanager/templates/authz/index.mako:155 … … 51 51 msgstr "团队:" 52 52 53 #: pysvnmanager/controllers/authz.py:4 7pysvnmanager/controllers/role.py:6253 #: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:62 54 54 #: pysvnmanager/controllers/role.py:81 55 55 #: pysvnmanager/templates/authz/index.mako:157 … … 62 62 msgstr "别名:" 63 63 64 #: pysvnmanager/controllers/authz.py: 67 pysvnmanager/controllers/authz.py:9165 #: pysvnmanager/controllers/check.py:9 3pysvnmanager/controllers/role.py:4864 #: pysvnmanager/controllers/authz.py:59 pysvnmanager/controllers/authz.py:83 65 #: pysvnmanager/controllers/check.py:91 pysvnmanager/controllers/role.py:48 66 66 #: pysvnmanager/templates/check/index.mako:9 67 67 #: pysvnmanager/templates/check/index.mako:23 … … 71 71 msgstr "请选择..." 72 72 73 #: pysvnmanager/controllers/authz.py:1 5573 #: pysvnmanager/controllers/authz.py:146 74 74 #, python-format 75 75 msgid "Repository %s not exist." 76 76 msgstr "版本库 %s 不存在。" 77 77 78 #: pysvnmanager/controllers/authz.py:1 6378 #: pysvnmanager/controllers/authz.py:154 79 79 #, python-format 80 80 msgid "Module %s not exist." 81 81 msgstr "模组 %s 不存在。" 82 82 83 #: pysvnmanager/controllers/authz.py:16 983 #: pysvnmanager/controllers/authz.py:160 84 84 msgid "You can not delete yourself from admin list." 85 85 msgstr "您不能将自己从管理员列表中删除。" 86 86 87 #: pysvnmanager/controllers/authz.py:17 987 #: pysvnmanager/controllers/authz.py:170 88 88 #, python-format 89 89 msgid "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)" 90 90 msgstr "用户 %(user)s 修改了授权策略。(rev:%(rev)s,%(msg)s)" 91 91 92 #: pysvnmanager/controllers/authz.py: 20392 #: pysvnmanager/controllers/authz.py:194 93 93 #, python-format 94 94 msgid "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)" 95 95 msgstr "用户 %(user)s 删除了授权策略。(rev:%(rev)s,%(msg)s)" 96 96 97 #: pysvnmanager/controllers/check.py: 7098 #: pysvnmanager/templates/auth_failed.mako: 497 #: pysvnmanager/controllers/check.py:68 98 #: pysvnmanager/templates/auth_failed.mako:3 99 99 msgid "Permission denied." 100 100 msgstr "没有权限。" … … 135 135 msgstr "用户 %s 登出" 136 136 137 #: pysvnmanager/model/svnauthz.py:5 8137 #: pysvnmanager/model/svnauthz.py:59 138 138 msgid "Name is not given." 139 139 msgstr "未能提供名称。" 140 140 141 #: pysvnmanager/model/svnauthz.py:6 0141 #: pysvnmanager/model/svnauthz.py:61 142 142 msgid "Name is not string." 143 143 msgstr "名称不是字符串" 144 144 145 #: pysvnmanager/model/svnauthz.py:64 146 #, python-format 147 #| msgid "Name contains invalid characters." 145 #: pysvnmanager/model/svnauthz.py:65 146 #, python-format 148 147 msgid "Name (%s) contains invalid characters." 149 148 msgstr "名称(%s)中包含非法字符。" 150 149 151 #: pysvnmanager/model/svnauthz.py:222 152 msgid "Aliasname is not provided." 153 msgstr "未能提供别名。" 154 155 #: pysvnmanager/model/svnauthz.py:224 156 msgid "Aliasname should not begin with &." 157 msgstr "别名的首字符不能是 &。" 158 159 #: pysvnmanager/model/svnauthz.py:397 160 msgid "Group name is not provided." 161 msgstr "未能提供团队名称。" 162 163 #: pysvnmanager/model/svnauthz.py:399 164 msgid "Group name should not begin with @." 165 msgstr "团队名称的首字符不能是 @。" 166 167 #: pysvnmanager/model/svnauthz.py:469 150 #: pysvnmanager/model/svnauthz.py:473 168 151 #, python-format 169 152 msgid "Recursive group membership for %s" 170 153 msgstr "%s 出现了循环组引用。" 171 154 172 #: pysvnmanager/model/svnauthz.py:561 173 #, python-format 174 #| msgid "Not a valide username: %s" 155 #: pysvnmanager/model/svnauthz.py:567 156 #, python-format 175 157 msgid "Not a valid username: %s" 176 158 msgstr "非法用户名: %s" 177 159 178 #: pysvnmanager/model/svnauthz.py:68 6160 #: pysvnmanager/model/svnauthz.py:684 179 161 #, python-format 180 162 msgid "Group %s is referenced by group %s." 181 163 msgstr "用户组 %s 被组 %s 引用。" 182 164 183 #: pysvnmanager/model/svnauthz.py:122 9165 #: pysvnmanager/model/svnauthz.py:1224 184 166 msgid "Update failed! You are working on a out-of-date revision." 185 167 msgstr "更新失败!您的更改是基于一个过期的版本,请先刷新再更改。" 186 168 187 #: pysvnmanager/model/svnauthz.py:14 61 pysvnmanager/model/svnauthz.py:1468188 #: pysvnmanager/model/svnauthz.py:14 72169 #: pysvnmanager/model/svnauthz.py:1458 pysvnmanager/model/svnauthz.py:1465 170 #: pysvnmanager/model/svnauthz.py:1469 189 171 #, python-format 190 172 msgid "Unknown rule format: %s" 191 173 msgstr "未知策略格式: %s" 192 174 193 #: pysvnmanager/model/svnauthz.py:148 6175 #: pysvnmanager/model/svnauthz.py:1483 194 176 #, python-format 195 177 msgid "No module exist for %s:%s" 196 178 msgstr "模块不存在: %s:%s" 197 179 198 #: pysvnmanager/model/svnauthz.py:159 7180 #: pysvnmanager/model/svnauthz.py:1592 199 181 #, python-format 200 182 msgid "Alias %s is referenced by group %s." 201 183 msgstr "别名 %s 为用户组 %s 引用。" 202 184 203 #: pysvnmanager/model/svnauthz.py:160 9185 #: pysvnmanager/model/svnauthz.py:1604 204 186 #, python-format 205 187 msgid "%s is referenced by [%s]." 206 188 msgstr "%s 在 [%s] 中被引用。" 207 189 208 #: pysvnmanager/model/svnauthz.py:174 6190 #: pysvnmanager/model/svnauthz.py:1741 209 191 #, python-format 210 192 msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 211 193 msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有完全权限 (RW)" 212 194 213 #: pysvnmanager/model/svnauthz.py:174 8195 #: pysvnmanager/model/svnauthz.py:1743 214 196 #, python-format 215 197 msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 216 198 msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有只读权限 (RO)" 217 199 218 #: pysvnmanager/model/svnauthz.py:17 50200 #: pysvnmanager/model/svnauthz.py:1745 219 201 #, python-format 220 202 msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 221 203 msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 没有访问权限 (XX)" 222 204 223 #: pysvnmanager/model/svnauthz.py:178 8205 #: pysvnmanager/model/svnauthz.py:1783 224 206 #, python-format 225 207 msgid "" … … 240 222 "\n" 241 223 242 #: pysvnmanager/model/svnauthz.py:180 7224 #: pysvnmanager/model/svnauthz.py:1802 243 225 #, python-format 244 226 msgid "" … … 482 464 msgstr "角色管理" 483 465 466 #: pysvnmanager/templates/role/index.mako:420 467 #| msgid "Update ACL failed:" 468 msgid "Update group failed:" 469 msgstr "更新用户组失败:" 470 471 #: pysvnmanager/templates/role/index.mako:427 472 #| msgid "Update ACL successfully." 473 msgid "Update group successfully." 474 msgstr "成功更新用户组。" 475 484 476 #: pysvnmanager/templates/role/index.mako:448 485 477 msgid "Are you sure to delete group:" 486 478 msgstr "您确认要删除用户组:" 487 479 480 #: pysvnmanager/templates/role/index.mako:471 481 #| msgid "Update ACL failed:" 482 msgid "Delete group failed:" 483 msgstr "更新用户组失败:" 484 485 #: pysvnmanager/templates/role/index.mako:478 486 #| msgid "Update ACL successfully." 487 msgid "Delete group successfully." 488 msgstr "成功删除用户组。" 489 490 #: pysvnmanager/templates/role/index.mako:512 491 #| msgid "Update ACL failed:" 492 msgid "Update alias failed:" 493 msgstr "更新别名失败:" 494 495 #: pysvnmanager/templates/role/index.mako:519 496 #| msgid "Update ACL successfully." 497 msgid "Update alias successfully." 498 msgstr "成功更新别名。" 499 488 500 #: pysvnmanager/templates/role/index.mako:539 489 501 msgid "Are you sure to delete alias:" 490 502 msgstr "您确认要删除别名:" 491 503 504 #: pysvnmanager/templates/role/index.mako:562 505 #| msgid "Update ACL failed:" 506 msgid "Delete alias failed:" 507 msgstr "删除别名失败:" 508 509 #: pysvnmanager/templates/role/index.mako:569 510 #| msgid "Update ACL successfully." 511 msgid "Delete alias successfully." 512 msgstr "成功删除别名。" 513 492 514 #: pysvnmanager/templates/role/index.mako:645 493 515 msgid "Select a role name:" -
trunk/pysvnmanager/model/auth/http.py
r21 r22 5 5 def htpasswd_login(username, password, config): 6 6 authn_file = getattr(config, 'authn_file', '') 7 if isinstance(username, str): 8 username = unicode(username, 'utf-8') 7 9 8 10 if authn_file: … … 10 12 for line in pwdfile: 11 13 user, pwdhash = line.strip().split(':',1) 12 if username == u ser:14 if username == unicode(user,'utf-8'): 13 15 if pwdhash == crypt(password, pwdhash[:2]): 14 16 return True -
trunk/pysvnmanager/model/svnauthz.py
r21 r22 629 629 for alias in sorted(self.alias_list): 630 630 buff += unicode(alias) 631 buff += '\n'631 buff += u'\n' 632 632 return buff 633 633 … … 690 690 691 691 def __str__(self): 692 buff = "[groups]\n"692 buff = u"[groups]\n" 693 693 for group in sorted(self.group_list): 694 694 if group.name[0] != '$' and group.name != '*': 695 695 buff += unicode(group) 696 buff += '\n'696 buff += u'\n' 697 697 return buff 698 698 … … 753 753 754 754 def __str__(self): 755 rstr = ''755 rstr = u'' 756 756 rbit = self.__rights 757 757 if rbit & RIGHTS_R: 758 rstr += 'r'758 rstr += u'r' 759 759 if rbit & RIGHTS_W: 760 rstr += 'w'761 return "%s = %s" % (self.userobj.uname, rstr)760 rstr += u'w' 761 return u"%s = %s" % (self.userobj.uname, rstr) 762 762 763 763 def __cmp__(self, obj): … … 835 835 def __str__(self): 836 836 if not self.__rule_list: 837 return ''837 return u'' 838 838 if self.repos == '/' or not self.repos: 839 buff = "[%s]\n" % self.path840 else: 841 buff = "[%s:%s]\n" % (self.repos, self.path)839 buff = u"[%s]\n" % self.path 840 else: 841 buff = u"[%s:%s]\n" % (self.repos, self.path) 842 842 for rule in sorted(self.__rule_list): 843 843 tmp = unicode(rule) 844 844 if tmp: 845 845 buff += tmp 846 buff += '\n'846 buff += u'\n' 847 847 return buff 848 848 … … 1024 1024 1025 1025 def __str__(self): 1026 buff = ''1026 buff = u'' 1027 1027 for i in sorted(self.module_list): 1028 1028 tmp = unicode(i) 1029 1029 if tmp: 1030 1030 buff += tmp 1031 buff += '\n'1031 buff += u'\n' 1032 1032 return buff 1033 1033 … … 1101 1101 1102 1102 def __str__(self): 1103 buff = ''1103 buff = u'' 1104 1104 for repos in sorted(self.repos_list): 1105 1105 tmp = unicode(repos) … … 1242 1242 buff += self.compose_version() 1243 1243 buff += self.compose_acl() 1244 buff += '\n'1244 buff += u'\n' 1245 1245 buff += unicode(self.__grouplist) 1246 buff += '\n'1246 buff += u'\n' 1247 1247 buff += unicode(self.__aliaslist) 1248 buff += '\n'1248 buff += u'\n' 1249 1249 buff += unicode(self.__reposlist) 1250 1250 return buff … … 1326 1326 buff = "" 1327 1327 if self.__version: 1328 buff = "# version : %s\n" % self.__version1328 buff = u"# version : %s\n" % self.__version 1329 1329 return buff 1330 1330 1331 1331 def compose_acl(self): 1332 buff = ""1332 buff = u"" 1333 1333 for repos in self.__reposlist: 1334 1334 admins = repos.admins … … 1574 1574 if isinstance(user, basestring): 1575 1575 user = self.userlist.get_or_set(user) 1576 alias.user = user 1576 if user: 1577 alias.user = user 1577 1578 return alias 1578 1579 -
trunk/pysvnmanager/templates/role/index.mako
r2 r22 418 418 if (message) 419 419 { 420 message = '${ "Update group failed:"}' + message;420 message = '${_("Update group failed:")}' + message; 421 421 alert(message); 422 422 document.getElementById('result').innerHTML = message; … … 425 425 else 426 426 { 427 message = '${ "Update group successfully."}';427 message = '${_("Update group successfully.")}'; 428 428 document.getElementById('result').innerHTML = message; 429 429 alert(message); … … 469 469 if (message) 470 470 { 471 message = '${ "Delete group failed:"}' + message;471 message = '${_("Delete group failed:")}' + message; 472 472 alert(message); 473 473 document.getElementById('result').innerHTML = message; … … 476 476 else 477 477 { 478 message = '${ "Delete group successfully."}';478 message = '${_("Delete group successfully.")}'; 479 479 document.getElementById('result').innerHTML = message; 480 480 alert(message); … … 510 510 if (message) 511 511 { 512 message = '${ "Update alias failed:"}' + message;512 message = '${_("Update alias failed:")}' + message; 513 513 alert(message); 514 514 document.getElementById('result').innerHTML = message; … … 517 517 else 518 518 { 519 message = '${ "Update alias successfully."}';519 message = '${_("Update alias successfully.")}'; 520 520 document.getElementById('result').innerHTML = message; 521 521 alert(message); … … 560 560 if (message) 561 561 { 562 message = '${ "Delete alias failed:"}' + message;562 message = '${_("Delete alias failed:")}' + message; 563 563 alert(message); 564 564 document.getElementById('result').innerHTML = message; … … 567 567 else 568 568 { 569 message = '${ "Delete alias successfully."}';569 message = '${_("Delete alias successfully.")}'; 570 570 document.getElementById('result').innerHTML = message; 571 571 alert(message); -
trunk/pysvnmanager/tests/__init__.py
r8 r22 39 39 40 40 def __init__(self, *args, **kwargs): 41 self.authz_file = os.path.dirname(__file__) + '/../../config/svn.access.test' 41 42 wsgiapp = loadapp('config:test.ini', relative_to=conf_dir) 42 43 self.app = paste.fixture.TestApp(wsgiapp) … … 45 46 def rollback(self): 46 47 src = os.path.dirname(__file__) + '/../config/svn.access.in' 47 dest = os.path.dirname(__file__) + '/../../config/svn.access.test'48 dest = self.authz_file 48 49 copyfile(src, dest) 49 50 51 def load_authz(self): 52 from pysvnmanager.model import svnauthz 53 return svnauthz.SvnAuthz(self.authz_file) 54 50 55 def login(self, username, password=""): 51 56 res = self.app.get(url_for(controller='security')) -
trunk/pysvnmanager/tests/functional/test_authz.py
r21 r22 143 143 144 144 145 def test_save_authz(self): 146 # authn test 147 res = self.app.get(url_for(controller='authz', action='save_authz')) 148 assert res.status == 302 149 self.assertEqual(res.header('location'), '/security') 150 151 # authz test 152 self.login('nobody') 153 res = self.app.get(url_for(controller='authz', action='save_authz')) 154 assert res.status == 200, res.status 155 self.assert_('Permission denied.' in res.body, res.body) 156 157 # Login as superuser 158 self.login('root') 159 params = {'reposname':'/', 'admins':''} 160 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 161 assert res.status == 200 162 assert "You can not delete yourself from admin list." == res.body, res.body 163 self.rollback() 164 165 params = {'reposname':'/', 'admins':'root, @some'} 166 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 167 assert res.status == 200 168 assert "" == res.body, res.body 169 self.rollback() 170 171 self.login('jiangxin') 172 params = {'reposname':'/', 'admins':'&admin'} 173 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 174 assert res.status == 200 175 assert "" == res.body, res.body 176 self.rollback() 177 178 self.login('jiangxin') 179 params = {'reposname':'/', 'admins':'root'} 180 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 181 assert res.status == 200 182 assert "You can not delete yourself from admin list." == res.body, res.body 183 self.rollback() 184 185 self.login('root') 186 params = {'reposname':'/repos1', 'admins':'user1'} 187 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 188 assert res.status == 200 189 assert "" == res.body, res.body 190 self.rollback() 191 192 self.login('root') 193 params = {'reposname':'/repos1', 'admins':'user1, root'} 194 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 195 assert res.status == 200 196 assert "" == res.body, res.body 197 self.rollback() 198 199 self.login('admin1') 200 params = {'reposname':'/repos1', 'admins':'user1, root'} 201 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 202 assert res.status == 200 203 assert "You can not delete yourself from admin list." == res.body, res.body 204 205 self.login('admin1') 206 params = {'reposname':'/repos1', 'admins':'admin1, admin2'} 207 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 208 assert res.status == 200 209 assert "" == res.body, res.body 210 self.rollback() 211 145 def test_set_repos_admin(self): 146 # authn test 147 try: 148 res = self.app.get(url_for(controller='authz', action='save_authz')) 149 assert res.status == 302 150 self.assertEqual(res.header('location'), '/security') 151 152 # authz test 153 self.login('nobody') 154 res = self.app.get(url_for(controller='authz', action='save_authz')) 155 assert res.status == 200, res.status 156 self.assert_('Permission denied.' in res.body, res.body) 157 158 # Login as superuser 159 self.login('root') 160 params = {'reposname':'/', 'admins':''} 161 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 162 assert res.status == 200 163 assert "You can not delete yourself from admin list." == res.body, res.body 164 finally: 165 self.rollback() 166 167 try: 168 params = {'reposname':'/', 'admins':'root, @some'} 169 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 170 assert res.status == 200 171 assert "" == res.body, res.body 172 finally: 173 self.rollback() 174 175 try: 176 self.login('jiangxin') 177 params = {'reposname':'/', 'admins':'&admin'} 178 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 179 assert res.status == 200 180 assert "" == res.body, res.body 181 finally: 182 self.rollback() 183 184 try: 185 self.login('jiangxin') 186 params = {'reposname':'/', 'admins':'root'} 187 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 188 assert res.status == 200 189 assert "You can not delete yourself from admin list." == res.body, res.body 190 finally: 191 self.rollback() 192 193 try: 194 self.login('root') 195 params = {'reposname':'/repos1', 'admins':'user1'} 196 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 197 assert res.status == 200 198 assert "" == res.body, res.body 199 finally: 200 self.rollback() 201 202 try: 203 self.login('root') 204 params = {'reposname':'/repos1', 'admins':'user1, root'} 205 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 206 assert res.status == 200 207 assert "" == res.body, res.body 208 finally: 209 self.rollback() 210 211 try: 212 self.login('admin1') 213 params = {'reposname':'/repos1', 'admins':'user1, root'} 214 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 215 assert res.status == 200 216 assert "You can not delete yourself from admin list." == res.body, res.body 217 218 self.login('admin1') 219 params = {'reposname':'/repos1', 'admins':'admin1, admin2'} 220 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 221 assert res.status == 200 222 assert "" == res.body, res.body 223 finally: 224 self.rollback() 225 226 def test_set_rules(self): 227 # Modify rules for repos 228 try: 229 authz = self.load_authz() 230 module1 = authz.get_module('repos1', u'trunk/src') 231 self.assert_(module1 != None, type(module1)) 232 self.assert_(unicode(module1)=='[repos1:/trunk/src]\nuser1 = \n', unicode(module1).encode('utf-8')) 233 234 self.login('root') 235 params = {'reposname':'/repos1', 'path':'/trunk/src', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 236 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 237 assert res.status == 200 238 assert "" == res.body, res.body 239 240 authz = self.load_authz() 241 module1 = authz.get_module('repos1', u'trunk/src') 242 self.assert_(module1 != None, type(module1)) 243 self.assert_(unicode(module1)==u'[repos1:/trunk/src]\n&别名1 = r\n* = \n@管理员 = rw\nuser2 = r\n', unicode(module1).encode('utf-8')) 244 245 # Test login using chinese username 246 self.login('蒋鑫') 247 params = {'reposname':'/repos1', 'path':'/trunk/src', 'admins':'其他', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 248 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 249 assert res.status == 200, res.headers 250 assert "You can not delete yourself from admin list." in res.body, res.body 251 finally: 252 self.rollback() 253 254 # Add New Repos 255 try: 256 authz = self.load_authz() 257 repos1 = authz.get_repos('reposX') 258 self.assert_(repos1 == None, type(repos1)) 259 260 self.login('root') 261 params = {'reposname':'reposX', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'new', 'mode2':'new' } 262 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 263 assert res.status == 200 264 assert "" == res.body, res.body 265 266 authz = self.load_authz() 267 repos1 = authz.get_repos('reposX') 268 self.assert_(repos1 != None, type(repos1)) 269 self.assert_(unicode(repos1)==u'', unicode(repos1).encode('utf-8')) 270 self.assert_(repos1.admins==u'蒋鑫', repos1.admins.encode('utf-8')) 271 finally: 272 self.rollback() 273 274 # Add New Repos with Module/Rules 275 try: 276 authz = self.load_authz() 277 repos1 = authz.get_repos('reposX') 278 self.assert_(repos1 == None, type(repos1)) 279 280 self.login('root') 281 params = {'reposname':'reposX', 'admins':'蒋鑫', 'path':'/项目a', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'new', 'mode2':'new' } 282 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 283 assert res.status == 200 284 assert "" == res.body, res.body 285 286 authz = self.load_authz() 287 repos1 = authz.get_repos('reposX') 288 self.assert_(unicode(repos1)==u'[reposX:/项目a]\n&别名1 = r\n* = \n@管理员 = rw\nuser2 = r\n\n', unicode(repos1).encode('utf-8')) 289 self.assert_(repos1.admins==u'蒋鑫', repos1.admins.encode('utf-8')) 290 finally: 291 self.rollback() 292 293 # Test Repos/Module not exist Exception 294 try: 295 self.login('root') 296 params = {'reposname':'reposX', 'path':'/trunk/src', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 297 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 298 assert res.status == 200 299 assert "Repository reposX not exist." == res.body, res.body 300 finally: 301 self.rollback() 302 303 # Test Repos/Module not exist Exception 304 try: 305 self.login('root') 306 params = {'reposname':'repos1', 'path':'/trunk/myproject', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 307 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 308 assert res.status == 200 309 assert "Module /trunk/myproject not exist." == res.body, res.body 310 finally: 311 self.rollback() 312 313 212 314 def test_delete_authz(self): 213 315 # authn test … … 221 323 assert res.status == 200, res.status 222 324 self.assert_('Permission denied.' in res.body, res.body) 325 326 authz = self.load_authz() 327 module1 = authz.get_module('document', u'/trunk/行政部') 328 self.assert_(module1 != None, type(module1)) 329 330 self.login('root') 331 params = {'reposname':'document', 'path':'/trunk/行政部'} 332 res = self.app.get(url_for(controller='authz', action='delete_authz'), params) 333 334 authz = self.load_authz() 335 module1 = authz.get_module('document', u'/trunk/行政部') 336 self.assert_(module1 == None, type(module1)) 337 338 try: 339 self.login('root') 340 params = {'reposname':'document', 'path':'/trunk/行政部', 'revision':'123'} 341 res = self.app.get(url_for(controller='authz', action='delete_authz'), params) 342 assert res.status == 200 343 assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 344 finally: 345 self.rollback() -
trunk/pysvnmanager/tests/functional/test_check.py
r21 r22 63 63 assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user1 =</div>''' in res.body, res.body 64 64 65 params['userinput'] = 'select' 66 params['reposinput'] = 'select' 67 params['pathinput'] = 'select' 68 params['userselector'] = 'user1' 69 params['reposselector'] = 'reposX' 70 params['pathselector'] = '/trunk/src/test' 71 res = self.app.get(url_for(controller='check', action='access_map'), params) 72 assert '''<div id='acl_path_msg'>[reposX:/trunk/src/test] user1 = r</div>''' in res.body, res.body 73 74 params['userinput'] = 'manual' 75 params['reposinput'] = 'manual' 76 params['pathinput'] = 'manual' 77 params['username'] = 'user2' 78 params['reposname'] = 'repos1' 79 params['pathname'] = '/trunk/src/test' 65 params = { 66 'userinput':'select', 67 'reposinput':'select', 68 'pathinput':'select', 69 'userselector':'user1', 70 'reposselector':'reposX', 71 'pathselector':'/trunk/src/test', 72 'abbr':'False', 73 } 74 res = self.app.get(url_for(controller='check', action='access_map'), params) 75 assert '''<div id='acl_path_msg'>User user1 has ReadOnly (RO) rights for module reposX:/trunk/src/test</div><pre> 76 ================================================== 77 Access map on 'reposX' for user 'user1' 78 ================================================== 79 * Writable: 80 81 ---------------------------------------- 82 * Readable: 83 /branches 84 /tags 85 /trunk/src 86 ---------------------------------------- 87 * Denied: 88 / 89 /trunk 90 ---------------------------------------- 91 ''' in res.body, res.body 92 93 params = { 94 'userinput':'manual', 95 'reposinput':'manual', 96 'pathinput':'manual', 97 'username':'user2', 98 'reposname':'repos1', 99 'pathname':'/trunk/src/test', 100 'abbr':'1', 101 } 80 102 res = self.app.get(url_for(controller='check', action='access_map'), params) 81 103 assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user2 = r</div>''' in res.body, res.body 82 104 83 params['userinput'] = 'select' 84 params['reposinput'] = 'select' 85 params['pathinput'] = 'manual' 86 params['userselector'] = 'user2' 87 params['reposselector'] = 'reposX' 88 params['pathname'] = '/trunk/' 105 params = { 106 'userinput':'select', 107 'reposinput':'select', 108 'pathinput':'manual', 109 'userselector':'user2', 110 'reposselector':'reposX', 111 'pathname':'/trunk/', 112 'abbr':'1', 113 } 89 114 res = self.app.get(url_for(controller='check', action='access_map'), params) 90 115 assert '''<div id='acl_path_msg'>[reposX:/trunk] user2 =</div>''' in res.body, res.body 91 116 92 params['userinput'] = 'select' 93 params['reposinput'] = 'select' 94 params['pathinput'] = 'select' 95 params['userselector'] = 'user3' 96 params['reposselector'] = 'repos1' 97 params['pathselector'] = '/trunk' 117 params = { 118 'userinput':'select', 119 'reposinput':'select', 120 'pathinput':'select', 121 'userselector':'user3', 122 'reposselector':'repos1', 123 'pathselector':'/trunk', 124 'abbr':'1', 125 } 98 126 res = self.app.get(url_for(controller='check', action='access_map'), params) 99 127 assert '''<div id='acl_path_msg'>[repos1:/trunk] user3 =</div>''' in res.body, res.body 100 128 101 params['userselector'] = 'user4' 102 params['reposselector'] = 'repos1' 103 params['pathselector'] = '/trunk' 129 params = { 130 'userinput':'select', 131 'reposinput':'select', 132 'pathinput':'select', 133 'userselector':'user4', 134 'reposselector':'repos1', 135 'pathselector':'/trunk', 136 'abbr':'1', 137 } 104 138 res = self.app.get(url_for(controller='check', action='access_map'), params) 105 139 assert '''<div id='acl_path_msg'>[repos1:/trunk] user4 = r</div>''' in res.body, res.body 106 140 107 params['userselector'] = 'user4' 108 params['reposselector'] = 'reposX' 109 params['pathselector'] = '/trunk' 141 params = { 142 'userinput':'select', 143 'reposinput':'select', 144 'pathinput':'select', 145 'userselector':'user4', 146 'reposselector':'reposX', 147 'pathselector':'/trunk', 148 'abbr':'1', 149 } 110 150 res = self.app.get(url_for(controller='check', action='access_map'), params) 111 151 assert '''<div id='acl_path_msg'>[reposX:/trunk] user4 = r</div>''' in res.body, res.body 112 152 113 params['userselector'] = 'user5' 114 params['reposselector'] = 'reposX' 115 params['pathselector'] = '/trunk' 153 params = { 154 'userinput':'select', 155 'reposinput':'select', 156 'pathinput':'select', 157 'userselector':'user5', 158 'reposselector':'reposX', 159 'pathselector':'/trunk', 160 'abbr':'1', 161 } 116 162 res = self.app.get(url_for(controller='check', action='access_map'), params) 117 163 assert '''<div id='acl_path_msg'>[reposX:/trunk] user5 =</div>''' in res.body, res.body 118 164 165 # Repos = * 166 self.login('admin2') 167 params = { 168 'userinput':'select', 169 'userselector':'user1', 170 'reposinput':'select', 171 'reposselector':'*', 172 'pathinput':'select', 173 'pathselector':'/trunk/src/test', 174 'abbr':'True', 175 } 176 res = self.app.get(url_for(controller='check', action='access_map'), params) 177 assert res.status == 200, res.status 178 assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user1 =<br> 179 [repos2:/trunk/src/test] user1 = r</div><pre> 180 user1 => [repos1] 181 ---------------------------------------- 182 RW: 183 RO: /branches, /tags, /trunk 184 XX: /, /trunk/src 185 186 187 188 user1 => [repos2] 189 ---------------------------------------- 190 RW: /, /trunk 191 RO: /branches, /tags, /trunk/src 192 XX: 193 194 </pre>''' in res.body, repr(res.body) 195 196 # permision deny test 197 self.login('admin2') 198 params = { 199 'userinput':'select', 200 'reposinput':'select', 201 'pathinput':'select', 202 'userselector':'user1', 203 'reposselector':'repos3', 204 'pathselector':'/trunk/src/test', 205 'abbr':'True', 206 } 207 res = self.app.get(url_for(controller='check', action='access_map'), params) 208 assert res.status == 200 209 assert 'Permission denied.' in res.body, res.body 119 210 120 211 def test_authz_path(self): -
trunk/pysvnmanager/tests/functional/test_role.py
r21 r22 76 76 """ == res.body, res.body 77 77 78 params = {'role':'@group1',} 79 res = self.app.get(url_for(controller='role', action='get_role_info'), params) 80 assert res.status == 200 81 assert """id[0]="@group2";name[0]="Group:group2"; 82 id[1]="@group3";name[1]="Group:group3"; 83 id[2]="user1";name[2]="user1"; 84 id[3]="user11";name[3]="user11"; 85 id[4]="user12";name[4]="user12"; 86 members_count=5; 87 revision="0.2.1"; 88 """ == res.body, res.body 89 78 90 params = {'role':'@group3',} 79 91 res = self.app.get(url_for(controller='role', action='get_role_info'), params) … … 105 117 self.assert_('Permission denied.' in res.body, res.body) 106 118 119 # Change group members, autodrop=no 120 try: 121 authz = self.load_authz() 122 userobj = authz.get_userobj('@group3') 123 self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 124 125 self.login('root') 126 params = {'rolename':'group3', 'members':'蒋鑫, user3,@group1', 'autodrop':'no', } 127 res = self.app.get(url_for(controller='role', action='save_group'), params) 128 assert res.status == 200 129 assert "Recursive group membership for @group1" in res.body, res.body 130 131 authz = self.load_authz() 132 userobj = authz.get_userobj('@group3') 133 self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 134 finally: 135 self.rollback() 136 137 # Change group members, autodrop=yes 138 try: 139 authz = self.load_authz() 140 userobj = authz.get_userobj('@group3') 141 self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 142 143 self.login('root') 144 params = {'rolename':'group3', 'members':'蒋鑫, user3,@group1', 'autodrop':'yes', } 145 res = self.app.get(url_for(controller='role', action='save_group'), params) 146 assert res.status == 200 147 assert "" == res.body, res.body 148 149 authz = self.load_authz() 150 userobj = authz.get_userobj('@group3') 151 self.assert_(unicode(userobj) == u'group3 = user3, 蒋鑫', unicode(userobj).encode('utf-8')) 152 finally: 153 self.rollback() 154 155 # Add New Group 156 try: 157 authz = self.load_authz() 158 userobj = authz.get_userobj('@管理员组') 159 self.assert_(userobj == None) 160 161 self.login('root') 162 params = {'rolename':'管理员组', 'members':'蒋鑫, user3,@group1' } 163 res = self.app.get(url_for(controller='role', action='save_group'), params) 164 assert res.status == 200 165 assert "" == res.body, res.body 166 167 authz = self.load_authz() 168 userobj = authz.get_userobj('@管理员组') 169 self.assert_(unicode(userobj) == u'管理员组 = @group1, user3, 蒋鑫', unicode(userobj).encode('utf-8')) 170 finally: 171 self.rollback() 172 173 # Add New Group, out-of-date 174 try: 175 authz = self.load_authz() 176 userobj = authz.get_userobj('@管理员组') 177 self.assert_(userobj == None) 178 179 self.login('root') 180 params = {'rolename':'管理员组', 'members':'蒋鑫, user3,@group1', 'revision':'' } 181 res = self.app.get(url_for(controller='role', action='save_group'), params) 182 assert res.status == 200 183 assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 184 185 authz = self.load_authz() 186 userobj = authz.get_userobj('@管理员组') 187 self.assert_(userobj == None) 188 finally: 189 self.rollback() 190 107 191 def test_delete_group(self): 108 192 # authn test … … 117 201 self.assert_('Permission denied.' in res.body, res.body) 118 202 203 # Delete group failed, ref by other group. 204 try: 205 authz = self.load_authz() 206 userobj = authz.get_userobj('@group3') 207 self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 208 209 self.login('root') 210 params = {'role':'group3',} 211 res = self.app.get(url_for(controller='role', action='delete_group'), params) 212 assert res.status == 200 213 assert "Group group3 is referenced by group @group1." in res.body, res.body 214 finally: 215 self.rollback() 216 217 # Delete group failed, ref by rules. 218 try: 219 authz = self.load_authz() 220 userobj = authz.get_userobj('@dev') 221 self.assert_(unicode(userobj) == u'dev = dev1, dev2, dev3', unicode(userobj).encode('utf-8')) 222 223 self.login('root') 224 params = {'role':'@dev',} 225 res = self.app.get(url_for(controller='role', action='delete_group'), params) 226 assert res.status == 200 227 assert "@dev is referenced by [/:/trunk]." in res.body, res.body 228 229 authz = self.load_authz() 230 userobj = authz.get_userobj('@dev') 231 self.assert_(unicode(userobj) == u'dev = dev1, dev2, dev3', unicode(userobj).encode('utf-8')) 232 finally: 233 self.rollback() 234 235 # Delete group successful. 236 try: 237 authz = self.load_authz() 238 userobj = authz.get_userobj('@all') 239 self.assert_(unicode(userobj) == 'all = @admin, @dev, @test', unicode(userobj).encode('utf-8')) 240 241 self.login('root') 242 params = {'role':'all',} 243 res = self.app.get(url_for(controller='role', action='delete_group'), params) 244 assert res.status == 200 245 assert "" == res.body, res.body 246 247 authz = self.load_authz() 248 userobj = authz.get_userobj('@all') 249 self.assert_(userobj==None) 250 finally: 251 self.rollback() 252 119 253 def test_save_alias(self): 120 254 # authn test … … 129 263 self.assert_('Permission denied.' in res.body, res.body) 130 264 265 # Change alias successfully 266 try: 267 authz = self.load_authz() 268 userobj = authz.get_userobj('&admin') 269 self.assert_(unicode(userobj) == u'admin = jiangxin', unicode(userobj).encode('utf-8')) 270 271 self.login('root') 272 params = {'aliasname':'admin', 'username':'蒋鑫',} 273 res = self.app.get(url_for(controller='role', action='save_alias'), params) 274 assert res.status == 200 275 assert "" == res.body, res.body 276 277 authz = self.load_authz() 278 userobj = authz.get_userobj('&admin') 279 self.assert_(unicode(userobj) == u'admin = 蒋鑫', unicode(userobj).encode('utf-8')) 280 finally: 281 self.rollback() 282 283 # Add new alias successfully 284 try: 285 authz = self.load_authz() 286 userobj = authz.get_userobj('&管理员') 287 self.assert_(userobj == None) 288 289 self.login('root') 290 params = {'aliasname':'管理员', 'username':'蒋鑫',} 291 res = self.app.get(url_for(controller='role', action='save_alias'), params) 292 assert res.status == 200 293 assert "" == res.body, res.body 294 295 authz = self.load_authz() 296 userobj = authz.get_userobj('&管理员') 297 self.assert_(unicode(userobj) == u'管理员 = 蒋鑫', unicode(userobj).encode('utf-8')) 298 finally: 299 self.rollback() 300 301 # Change alias failed, out-of-date 302 try: 303 authz = self.load_authz() 304 userobj = authz.get_userobj('&admin') 305 self.assert_(unicode(userobj) == u'admin = jiangxin', unicode(userobj).encode('utf-8')) 306 307 self.login('root') 308 params = {'aliasname':'admin', 'username':'蒋鑫', 'revision':'123'} 309 res = self.app.get(url_for(controller='role', action='save_alias'), params) 310 assert res.status == 200 311 assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 312 313 authz = self.load_authz() 314 userobj = authz.get_userobj('&admin') 315 self.assert_(unicode(userobj) == u'admin = jiangxin', unicode(userobj).encode('utf-8')) 316 finally: 317 self.rollback() 318 319 131 320 def test_delete_alias(self): 132 321 # authn test … … 140 329 assert res.status == 200, res.status 141 330 self.assert_('Permission denied.' in res.body, res.body) 331 332 # Delete alias successfully 333 try: 334 authz = self.load_authz() 335 userobj = authz.get_userobj('&tm') 336 self.assert_(unicode(userobj) == u'tm = test1', unicode(userobj).encode('utf-8')) 337 338 self.login('root') 339 params = {'aliasname':'tm'} 340 res = self.app.get(url_for(controller='role', action='delete_alias'), params) 341 assert res.status == 200 342 assert "" == res.body, res.body 343 344 authz = self.load_authz() 345 userobj = authz.get_userobj('&tm') 346 self.assert_(userobj == None) 347 finally: 348 self.rollback() 349 350 # Delete alias failed. out of date 351 try: 352 authz = self.load_authz() 353 userobj = authz.get_userobj('&tm') 354 self.assert_(unicode(userobj) == u'tm = test1', unicode(userobj).encode('utf-8')) 355 356 self.login('root') 357 params = {'aliasname':'tm', 'revision':''} 358 res = self.app.get(url_for(controller='role', action='delete_alias'), params) 359 assert res.status == 200 360 assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 361 362 authz = self.load_authz() 363 userobj = authz.get_userobj('&tm') 364 self.assert_(unicode(userobj) == u'tm = test1', unicode(userobj).encode('utf-8')) 365 finally: 366 self.rollback() 367 368 369 # Delete alias failed. refenced by rules. 370 try: 371 authz = self.load_authz() 372 userobj = authz.get_userobj('&pm') 373 self.assert_(unicode(userobj) == u'pm = dev1', unicode(userobj).encode('utf-8')) 374 375 self.login('root') 376 params = {'aliasname':'pm', 'revision':''} 377 res = self.app.get(url_for(controller='role', action='delete_alias'), params) 378 assert res.status == 200 379 assert "&pm is referenced by [/:/trunk]." in res.body, res.body 380 381 authz = self.load_authz() 382 userobj = authz.get_userobj('&pm') 383 self.assert_(unicode(userobj) == u'pm = dev1', unicode(userobj).encode('utf-8')) 384 finally: 385 self.rollback() -
trunk/pysvnmanager/tests/test_models.py
r21 r22 331 331 332 332 def testModule(self): 333 module = self.authz.get_module(u'版本库1', u'/项目1') 334 self.assert_(module.fullname==u'版本库1:/项目1', module.fullname.encode('utf8')) 335 self.assert_(unicode(module)==u'[版本库1:/项目1]\n* = \n@组1 = rw\n用户3 = r\n', unicode(module).encode('utf8')) 336 333 337 module = Module('/', '/trunk') 334 338 self.assert_(module.path == '/trunk') … … 397 401 398 402 def testRepos(self): 403 repos1 = self.authz.get_repos(u'版本库1') 404 self.assert_(repos1.name==u'版本库1', repos1.name.encode('utf8')) 405 399 406 user1=User('user1') 400 407 user2=User('user2') -
trunk/test.ini
r10 r22 47 47 48 48 # Login test: user account and password 49 test_users = {'root':'guess', 'jiangxin':'guess', 'nobody':'guess', 'admin1':'guess', 'admin2':'guess' }49 test_users = {'root':'guess', 'jiangxin':'guess', 'nobody':'guess', 'admin1':'guess', 'admin2':'guess', '蒋鑫':'guess'} 50 50 51 51 # authn_file: a .htpasswd style password file, used for pysvnmanager authentication.
![(please configure the [header_logo] section in trac.ini)](/trac/pysvnmanager/chrome/common/trac_banner.png)