annotate rhodecode/model/forms.py @ 2025:7e979933ffec beta

more work on improving info logging
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 23 Feb 2012 03:39:35 +0200
parents 87f0800abc7b
children 82a88013a3fd e121e10d4142
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 """ this is forms validation classes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2 http://formencode.org/module-formencode.validators.html
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3 for list off all availible validators
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5 we can create our own validators
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 The table below outlines the options which can be used in a schema in addition to the validators themselves
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
8 pre_validators [] These validators will be applied before the schema
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
9 chained_validators [] These validators will be applied after the schema
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
10 allow_extra_fields False If True, then it is not an error when keys that aren't associated with a validator are present
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
11 filter_extra_fields False If True, then keys that aren't associated with a validator are removed
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12 if_key_missing NoDefault If this is given, then any keys that aren't available but are expected will be replaced with this value (and then validated). This does not override a present .if_missing attribute on validators. NoDefault is a special FormEncode class to mean that no default values has been specified and therefore missing keys shouldn't take a default value.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
13 ignore_key_missing False If True, then missing keys will be missing in the result, if the validator doesn't have .if_missing on it already
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
14
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
15
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16 <name> = formencode.validators.<name of validator>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 <name> must equal form name
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18 list=[1,2,3,4,5]
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
19 for SELECT use formencode.All(OneOf(list), Int())
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
20
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21 """
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
22 import os
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
23 import re
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
24 import logging
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
25 import traceback
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
26
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
27 import formencode
242
5da4ef115006 Added lastlogin to user after login, model db update
Marcin Kuzminski <marcin@python-works.com>
parents: 238
diff changeset
28 from formencode import All
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
29 from formencode.validators import UnicodeString, OneOf, Int, Number, Regex, \
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
30 Email, Bool, StringBoolean, Set
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
31
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
32 from pylons.i18n.translation import _
1022
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1015
diff changeset
33 from webhelpers.pylonslib.secure_form import authentication_token
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
34
1533
c0e6057543ff fixed hardcoded admin prefix check in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
35 from rhodecode.config.routing import ADMIN_PREFIX
1022
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1015
diff changeset
36 from rhodecode.lib.utils import repo_name_slug
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
37 from rhodecode.lib.auth import authenticate, get_crypt_password
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
38 from rhodecode.lib.exceptions import LdapImportError
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1742
diff changeset
39 from rhodecode.model.db import User, UsersGroup, RepoGroup, Repository
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
40 from rhodecode import BACKENDS
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
41
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
42 log = logging.getLogger(__name__)
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
43
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
44
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
45 #this is needed to translate the messages using _() in validators
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
46 class State_obj(object):
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
47 _ = staticmethod(_)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
48
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
49
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
50 #==============================================================================
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
51 # VALIDATORS
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
52 #==============================================================================
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
53 class ValidAuthToken(formencode.validators.FancyValidator):
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
54 messages = {'invalid_token': _('Token mismatch')}
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
55
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
56 def validate_python(self, value, state):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
57
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
58 if value != authentication_token():
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
59 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
60 self.message('invalid_token',
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
61 state, search_number=value),
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
62 value,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
63 state
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
64 )
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
65
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
66
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
67 def ValidUsername(edit, old_data):
357
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
68 class _ValidUsername(formencode.validators.FancyValidator):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
69
357
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
70 def validate_python(self, value, state):
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
71 if value in ['default', 'new_user']:
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
72 raise formencode.Invalid(_('Invalid username'), value, state)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
73 #check if user is unique
357
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
74 old_un = None
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
75 if edit:
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1742
diff changeset
76 old_un = User.get(old_data.get('user_id')).username
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
77
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
78 if old_un != value or not edit:
1530
04027bdb876c Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1514
diff changeset
79 if User.get_by_username(value, case_insensitive=True):
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
80 raise formencode.Invalid(_('This username already '
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
81 'exists') , value, state)
745
c366b237c91d added test for username and email case senstitive validators,
Marcin Kuzminski <marcin@python-works.com>
parents: 743
diff changeset
82
960
029e69f0d21d fixed #102 allowed '.' character in username
Marcin Kuzminski <marcin@python-works.com>
parents: 959
diff changeset
83 if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None:
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
84 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
85 _('Username may only contain alphanumeric characters '
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
86 'underscores, periods or dashes and must begin with '
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
87 'alphanumeric character'),
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
88 value,
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
89 state
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
90 )
745
c366b237c91d added test for username and email case senstitive validators,
Marcin Kuzminski <marcin@python-works.com>
parents: 743
diff changeset
91
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
92 return _ValidUsername
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
93
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
94
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
95 def ValidUsersGroup(edit, old_data):
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
96
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
97 class _ValidUsersGroup(formencode.validators.FancyValidator):
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
98
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
99 def validate_python(self, value, state):
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
100 if value in ['default']:
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
101 raise formencode.Invalid(_('Invalid group name'), value, state)
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
102 #check if group is unique
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
103 old_ugname = None
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
104 if edit:
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
105 old_ugname = UsersGroup.get(
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
106 old_data.get('users_group_id')).users_group_name
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
107
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
108 if old_ugname != value or not edit:
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
109 if UsersGroup.get_by_group_name(value, cache=False,
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
110 case_insensitive=True):
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
111 raise formencode.Invalid(_('This users group '
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
112 'already exists'), value,
1271
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1261
diff changeset
113 state)
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
114
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
115 if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None:
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
116 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
117 _('RepoGroup name may only contain alphanumeric characters '
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
118 'underscores, periods or dashes and must begin with '
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
119 'alphanumeric character'),
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
120 value,
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
121 state
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
122 )
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
123
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
124 return _ValidUsersGroup
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
125
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
126
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
127 def ValidReposGroup(edit, old_data):
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
128 class _ValidReposGroup(formencode.validators.FancyValidator):
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
129
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
130 def validate_python(self, value, state):
1735
344ddfeecce2 small fixes for detection of groups that already exists
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
131 # TODO WRITE VALIDATIONS
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
132 group_name = value.get('group_name')
1735
344ddfeecce2 small fixes for detection of groups that already exists
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
133 group_parent_id = value.get('group_parent_id')
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
134
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
135 # slugify repo group just in case :)
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
136 slug = repo_name_slug(group_name)
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
137
1349
526120c77a38 #47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1347
diff changeset
138 # check for parent of self
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
139 parent_of_self = lambda: (
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
140 old_data['group_id'] == int(group_parent_id)
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
141 if group_parent_id else False
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
142 )
1735
344ddfeecce2 small fixes for detection of groups that already exists
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
143 if edit and parent_of_self():
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
144 e_dict = {
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
145 'group_parent_id': _('Cannot assign this group as parent')
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
146 }
1349
526120c77a38 #47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1347
diff changeset
147 raise formencode.Invalid('', value, state,
526120c77a38 #47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1347
diff changeset
148 error_dict=e_dict)
526120c77a38 #47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1347
diff changeset
149
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
150 old_gname = None
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
151 if edit:
1735
344ddfeecce2 small fixes for detection of groups that already exists
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
152 old_gname = RepoGroup.get(old_data.get('group_id')).group_name
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
153
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
154 if old_gname != group_name or not edit:
1735
344ddfeecce2 small fixes for detection of groups that already exists
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
155
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
156 # check group
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
157 gr = RepoGroup.query()\
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
158 .filter(RepoGroup.group_name == slug)\
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
159 .filter(RepoGroup.group_parent_id == group_parent_id)\
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
160 .scalar()
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
161
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
162 if gr:
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
163 e_dict = {
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
164 'group_name': _('This group already exists')
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
165 }
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
166 raise formencode.Invalid('', value, state,
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
167 error_dict=e_dict)
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
168
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
169 # check for same repo
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
170 repo = Repository.query()\
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
171 .filter(Repository.repo_name == slug)\
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
172 .scalar()
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
173
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
174 if repo:
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
175 e_dict = {
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
176 'group_name': _('Repository with this name already exists')
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
177 }
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
178 raise formencode.Invalid('', value, state,
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
179 error_dict=e_dict)
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
180
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
181 return _ValidReposGroup
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
182
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
183
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
184 class ValidPassword(formencode.validators.FancyValidator):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
185
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
186 def to_python(self, value, state):
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
187
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
188 if not value:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
189 return
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
190
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
191 if value.get('password'):
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
192 try:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
193 value['password'] = get_crypt_password(value['password'])
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
194 except UnicodeEncodeError:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
195 e_dict = {'password': _('Invalid characters in password')}
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
196 raise formencode.Invalid('', value, state, error_dict=e_dict)
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
197
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
198 if value.get('password_confirmation'):
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
199 try:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
200 value['password_confirmation'] = \
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
201 get_crypt_password(value['password_confirmation'])
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
202 except UnicodeEncodeError:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
203 e_dict = {
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
204 'password_confirmation': _('Invalid characters in password')
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
205 }
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
206 raise formencode.Invalid('', value, state, error_dict=e_dict)
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
207
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
208 if value.get('new_password'):
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
209 try:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
210 value['new_password'] = \
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
211 get_crypt_password(value['new_password'])
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
212 except UnicodeEncodeError:
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
213 e_dict = {'new_password': _('Invalid characters in password')}
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
214 raise formencode.Invalid('', value, state, error_dict=e_dict)
728
f1629c0c28cc fixed bug in forms found due to testing,
Marcin Kuzminski <marcin@python-works.com>
parents: 722
diff changeset
215
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
216 return value
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
217
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
218
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
219 class ValidPasswordsMatch(formencode.validators.FancyValidator):
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
220
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
221 def validate_python(self, value, state):
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
222
1597
019026a8cf67 implements #237 added password confirmation for my account and admin edit user.
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
223 pass_val = value.get('password') or value.get('new_password')
019026a8cf67 implements #237 added password confirmation for my account and admin edit user.
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
224 if pass_val != value['password_confirmation']:
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
225 e_dict = {'password_confirmation':
1472
aaec08ad9daf Added pt_BR localization, added i18n wrappers on some places missing, fixed css in settings screen for longer labels.
Augusto Herrmann <augusto.herrmann@planejamento.gov.br>
parents: 1366
diff changeset
226 _('Passwords do not match')}
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
227 raise formencode.Invalid('', value, state, error_dict=e_dict)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
228
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
229
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
230 class ValidAuth(formencode.validators.FancyValidator):
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
231 messages = {
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
232 'invalid_password':_('invalid password'),
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
233 'invalid_login':_('invalid user name'),
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
234 'disabled_account':_('Your account is disabled')
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
235 }
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
236
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
237 # error mapping
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
238 e_dict = {'username': messages['invalid_login'],
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
239 'password': messages['invalid_password']}
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
240 e_dict_disable = {'username': messages['disabled_account']}
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
241
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
242 def validate_python(self, value, state):
415
04e8b31fb245 Changed password crypting scheme to bcrypt, added dependency for setup
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
243 password = value['password']
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
244 username = value['username']
1530
04027bdb876c Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1514
diff changeset
245 user = User.get_by_username(username)
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
246
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 746
diff changeset
247 if authenticate(username, password):
699
52da7cba88a6 Code refactor for auth func, preparing for ldap support
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
248 return value
52da7cba88a6 Code refactor for auth func, preparing for ldap support
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
249 else:
52da7cba88a6 Code refactor for auth func, preparing for ldap support
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
250 if user and user.active is False:
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1963
diff changeset
251 log.warning('user %s is disabled' % username)
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
252 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
253 self.message('disabled_account',
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
254 state=State_obj),
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
255 value, state,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
256 error_dict=self.e_dict_disable
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
257 )
699
52da7cba88a6 Code refactor for auth func, preparing for ldap support
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
258 else:
2025
7e979933ffec more work on improving info logging
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
259 log.warning('user %s failed to authenticate' % username)
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
260 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
261 self.message('invalid_password',
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
262 state=State_obj), value, state,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
263 error_dict=self.e_dict
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
264 )
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
265
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
266
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
267 class ValidRepoUser(formencode.validators.FancyValidator):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
268
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
269 def to_python(self, value, state):
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
270 try:
1361
87ca17540603 fixed #47 adding a new repo that have a group chosen had wrong paths.
Marcin Kuzminski <marcin@python-works.com>
parents: 1357
diff changeset
271 User.query().filter(User.active == True)\
328
cec5cbc956c0 Repository managment permissions, fixed found bugs updated js, added extra checks for doubled users and non active ones
Marcin Kuzminski <marcin@python-works.com>
parents: 320
diff changeset
272 .filter(User.username == value).one()
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
273 except Exception:
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
274 raise formencode.Invalid(_('This username is not valid'),
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
275 value, state)
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
276 return value
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
277
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
278
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
279 def ValidRepoName(edit, old_data):
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
280 class _ValidRepoName(formencode.validators.FancyValidator):
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
281 def to_python(self, value, state):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
282
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
283 repo_name = value.get('repo_name')
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
284
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
285 slug = repo_name_slug(repo_name)
1533
c0e6057543ff fixed hardcoded admin prefix check in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
286 if slug in [ADMIN_PREFIX, '']:
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
287 e_dict = {'repo_name': _('This repository name is disallowed')}
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
288 raise formencode.Invalid('', value, state, error_dict=e_dict)
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
289
1324
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
290 if value.get('repo_group'):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
291 gr = RepoGroup.get(value.get('repo_group'))
1324
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
292 group_path = gr.full_path
1346
cf78d302d441 #47 implemented deleting of empty groups. Fixed problem with full paths on nested groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1345
diff changeset
293 # value needs to be aware of group name in order to check
1550
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
294 # db key This is an actual just the name to store in the
1361
87ca17540603 fixed #47 adding a new repo that have a group chosen had wrong paths.
Marcin Kuzminski <marcin@python-works.com>
parents: 1357
diff changeset
295 # database
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
296 repo_name_full = group_path + RepoGroup.url_sep() + repo_name
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
297
1324
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
298 else:
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
299 group_path = ''
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
300 repo_name_full = repo_name
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
301
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
302 value['repo_name_full'] = repo_name_full
1550
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
303 rename = old_data.get('repo_name') != repo_name_full
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
304 create = not edit
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
305 if rename or create:
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
306
1324
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
307 if group_path != '':
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1742
diff changeset
308 if Repository.get_by_repo_name(repo_name_full):
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
309 e_dict = {
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
310 'repo_name': _('This repository already exists in '
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
311 'a group "%s"') % gr.group_name
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
312 }
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
313 raise formencode.Invalid('', value, state,
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
314 error_dict=e_dict)
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
315 elif RepoGroup.get_by_group_name(repo_name_full):
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
316 e_dict = {
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
317 'repo_name': _('There is a group with this name '
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
318 'already "%s"') % repo_name_full
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
319 }
1550
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
320 raise formencode.Invalid('', value, state,
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
321 error_dict=e_dict)
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
322
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1742
diff changeset
323 elif Repository.get_by_repo_name(repo_name_full):
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
324 e_dict = {'repo_name': _('This repository '
1324
e272be3244f0 fixed regresion made in previos commit, that introduced bug in handling regular repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1323
diff changeset
325 'already exists')}
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
326 raise formencode.Invalid('', value, state,
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
327 error_dict=e_dict)
1550
6f468ba37650 fixes #266 Rhodecode allows to create repo with the same name and in the same parent as group
Marcin Kuzminski <marcin@python-works.com>
parents: 1539
diff changeset
328
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
329 return value
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
330
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
331 return _ValidRepoName
296
29370bb76fa6 first permissions commit: added permission managment on repository edit. Changed db rmissions, validators.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
332
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
333
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
334 def ValidForkName(*args, **kwargs):
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
335 return ValidRepoName(*args, **kwargs)
1366
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1364
diff changeset
336
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1364
diff changeset
337
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
338 def SlugifyName():
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
339 class _SlugifyName(formencode.validators.FancyValidator):
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
340
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
341 def to_python(self, value, state):
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
342 return repo_name_slug(value)
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
343
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
344 return _SlugifyName
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
345
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
346
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
347 def ValidCloneUri():
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
348 from mercurial.httprepo import httprepository, httpsrepository
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
349 from rhodecode.lib.utils import make_ui
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
350
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
351 class _ValidCloneUri(formencode.validators.FancyValidator):
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
352
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
353 def to_python(self, value, state):
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
354 if not value:
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
355 pass
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
356 elif value.startswith('https'):
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
357 try:
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
358 httpsrepository(make_ui('db'), value).capabilities
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
359 except Exception:
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
360 log.error(traceback.format_exc())
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
361 raise formencode.Invalid(_('invalid clone url'), value,
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
362 state)
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
363 elif value.startswith('http'):
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
364 try:
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
365 httprepository(make_ui('db'), value).capabilities
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
366 except Exception:
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
367 log.error(traceback.format_exc())
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
368 raise formencode.Invalid(_('invalid clone url'), value,
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
369 state)
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
370 else:
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
371 raise formencode.Invalid(_('Invalid clone url, provide a '
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
372 'valid clone http\s url'), value,
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
373 state)
1298
e3deb588cf14 fixed http/s validation for clone_uri, and missing return value.
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
374 return value
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
375
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
376 return _ValidCloneUri
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
377
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
378
659
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
379 def ValidForkType(old_data):
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
380 class _ValidForkType(formencode.validators.FancyValidator):
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
381
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
382 def to_python(self, value, state):
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
383 if old_data['repo_type'] != value:
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
384 raise formencode.Invalid(_('Fork have to be the same '
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
385 'type as original'), value, state)
1366
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1364
diff changeset
386
659
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
387 return value
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
388 return _ValidForkType
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
389
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
390
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
391 def ValidPerms(type_='repo'):
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
392 if type_ == 'group':
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
393 EMPTY_PERM = 'group.none'
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
394 elif type_ == 'repo':
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
395 EMPTY_PERM = 'repository.none'
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
396
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
397 class _ValidPerms(formencode.validators.FancyValidator):
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
398 messages = {
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
399 'perm_new_member_name':
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
400 _('This username or users group name is not valid')
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
401 }
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
402
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
403 def to_python(self, value, state):
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
404 perms_update = []
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
405 perms_new = []
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
406 # build a list of permission to update and new permission to create
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
407 for k, v in value.items():
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
408 # means new added member to permissions
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
409 if k.startswith('perm_new_member'):
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
410 new_perm = value.get('perm_new_member', False)
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
411 new_member = value.get('perm_new_member_name', False)
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
412 new_type = value.get('perm_new_member_type')
1013
d2a840b29858 #56 hacking on forms, and model for users groups
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
413
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
414 if new_member and new_perm:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
415 if (new_member, new_perm, new_type) not in perms_new:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
416 perms_new.append((new_member, new_perm, new_type))
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
417 elif k.startswith('u_perm_') or k.startswith('g_perm_'):
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
418 member = k[7:]
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
419 t = {'u': 'user',
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
420 'g': 'users_group'
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
421 }[k[0]]
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
422 if member == 'default':
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
423 if value.get('private'):
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
424 # set none for default when updating to private repo
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
425 v = EMPTY_PERM
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
426 perms_update.append((member, v, t))
1015
65129c332d37 #56 added ajax removal of users groups,
Marcin Kuzminski <marcin@python-works.com>
parents: 1014
diff changeset
427
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
428 value['perms_updates'] = perms_update
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
429 value['perms_new'] = perms_new
1014
6fdc3ff65fce #56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents: 1013
diff changeset
430
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
431 # update permissions
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
432 for k, v, t in perms_new:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
433 try:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
434 if t is 'user':
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
435 self.user_db = User.query()\
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
436 .filter(User.active == True)\
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
437 .filter(User.username == k).one()
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
438 if t is 'users_group':
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
439 self.user_db = UsersGroup.query()\
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
440 .filter(UsersGroup.users_group_active == True)\
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
441 .filter(UsersGroup.users_group_name == k).one()
1013
d2a840b29858 #56 hacking on forms, and model for users groups
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
442
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
443 except Exception:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
444 msg = self.message('perm_new_member_name',
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
445 state=State_obj)
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
446 raise formencode.Invalid(
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
447 msg, value, state, error_dict={'perm_new_member_name': msg}
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
448 )
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
449 return value
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
450 return _ValidPerms
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
451
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
452
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
453 class ValidSettings(formencode.validators.FancyValidator):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
454
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
455 def to_python(self, value, state):
1757
2aa7f454204e fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
456 # settings form can't edit user
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
457 if 'user' in value:
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
458 del['value']['user']
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
459 return value
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
460
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
461
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
462 class ValidPath(formencode.validators.FancyValidator):
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
463 def to_python(self, value, state):
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
464
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
465 if not os.path.isdir(value):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
466 msg = _('This is not a valid path')
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
467 raise formencode.Invalid(msg, value, state,
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
468 error_dict={'paths_root_path': msg})
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
469 return value
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
470
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
471
489
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 475
diff changeset
472 def UniqSystemEmail(old_data):
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 475
diff changeset
473 class _UniqSystemEmail(formencode.validators.FancyValidator):
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 475
diff changeset
474 def to_python(self, value, state):
741
54684e071457 fixes issue #78, ldap makes user validation caseInsensitive
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
475 value = value.lower()
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
476 if old_data.get('email', '').lower() != value:
1757
2aa7f454204e fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
477 user = User.get_by_email(value, case_insensitive=True)
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
478 if user:
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
479 raise formencode.Invalid(
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
480 _("This e-mail address is already taken"), value, state
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
481 )
489
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 475
diff changeset
482 return value
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
483
489
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 475
diff changeset
484 return _UniqSystemEmail
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
485
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
486
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
487 class ValidSystemEmail(formencode.validators.FancyValidator):
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
488 def to_python(self, value, state):
741
54684e071457 fixes issue #78, ldap makes user validation caseInsensitive
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
489 value = value.lower()
1757
2aa7f454204e fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
490 user = User.get_by_email(value, case_insensitive=True)
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
491 if user is None:
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
492 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
493 _("This e-mail address doesn't exist."), value, state
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
494 )
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
495
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
496 return value
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
497
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
498
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
499 class LdapLibValidator(formencode.validators.FancyValidator):
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
500
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
501 def to_python(self, value, state):
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
502
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
503 try:
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
504 import ldap
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
505 except ImportError:
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
506 raise LdapImportError
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
507 return value
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
508
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
509
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
510 class AttrLoginValidator(formencode.validators.FancyValidator):
775
aaf2fc59a39a fixes #77 and adds extendable base Dn with custom uid specification
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
511
aaf2fc59a39a fixes #77 and adds extendable base Dn with custom uid specification
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
512 def to_python(self, value, state):
aaf2fc59a39a fixes #77 and adds extendable base Dn with custom uid specification
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
513
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
514 if not value or not isinstance(value, (str, unicode)):
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
515 raise formencode.Invalid(
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
516 _("The LDAP Login attribute of the CN must be specified - "
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
517 "this is the name of the attribute that is equivalent "
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
518 "to 'username'"), value, state
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
519 )
775
aaf2fc59a39a fixes #77 and adds extendable base Dn with custom uid specification
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
520
aaf2fc59a39a fixes #77 and adds extendable base Dn with custom uid specification
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
521 return value
aaf2fc59a39a fixes #77 and adds extendable base Dn with custom uid specification
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
522
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
523
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
524 #==============================================================================
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
525 # FORMS
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
526 #==============================================================================
45
a886f5eba757 implemented admin page login
marcink
parents: 0
diff changeset
527 class LoginForm(formencode.Schema):
a886f5eba757 implemented admin page login
marcink
parents: 0
diff changeset
528 allow_extra_fields = True
a886f5eba757 implemented admin page login
marcink
parents: 0
diff changeset
529 filter_extra_fields = True
a886f5eba757 implemented admin page login
marcink
parents: 0
diff changeset
530 username = UnicodeString(
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
531 strip=True,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
532 min=1,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
533 not_empty=True,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
534 messages={
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
535 'empty': _('Please enter a login'),
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
536 'tooShort': _('Enter a value %(min)i characters long or more')}
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
537 )
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
538
45
a886f5eba757 implemented admin page login
marcink
parents: 0
diff changeset
539 password = UnicodeString(
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
540 strip=True,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
541 min=3,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
542 not_empty=True,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
543 messages={
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
544 'empty': _('Please enter a password'),
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
545 'tooShort': _('Enter %(min)i characters or more')}
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
546 )
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
547
1802
145677a36675 Remember Me option on login
Matt Zuba <matt.zuba@goodwillaz.org>
parents: 1765
diff changeset
548 remember = StringBoolean(if_missing=False)
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1802
diff changeset
549
186
556473ba0399 fixed menu in home page, and added login html with forms that validates username and password.
Marcin Kuzminski <marcin@python-works.com>
parents: 45
diff changeset
550 chained_validators = [ValidAuth]
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
551
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
552
357
ebdd1a89cdd9 Added extra validation in creating users.
Marcin Kuzminski <marcin@python-works.com>
parents: 356
diff changeset
553 def UserForm(edit=False, old_data={}):
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
554 class _UserForm(formencode.Schema):
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
555 allow_extra_fields = True
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
556 filter_extra_fields = True
742
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 741
diff changeset
557 username = All(UnicodeString(strip=True, min=1, not_empty=True),
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 741
diff changeset
558 ValidUsername(edit, old_data))
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
559 if edit:
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
560 new_password = All(UnicodeString(strip=True, min=6, not_empty=False))
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
561 password_confirmation = All(UnicodeString(strip=True, min=6,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
562 not_empty=False))
329
aafd9a98ea58 added admin flag to users editing
Marcin Kuzminski <marcin@python-works.com>
parents: 328
diff changeset
563 admin = StringBoolean(if_missing=False)
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
564 else:
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
565 password = All(UnicodeString(strip=True, min=6, not_empty=True))
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
566 password_confirmation = All(UnicodeString(strip=True, min=6,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
567 not_empty=False))
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
568
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
569 active = StringBoolean(if_missing=False)
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
570 name = UnicodeString(strip=True, min=1, not_empty=False)
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
571 lastname = UnicodeString(strip=True, min=1, not_empty=False)
489
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 475
diff changeset
572 email = All(Email(not_empty=True), UniqSystemEmail(old_data))
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
573
1597
019026a8cf67 implements #237 added password confirmation for my account and admin edit user.
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
574 chained_validators = [ValidPasswordsMatch, ValidPassword]
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
575
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
576 return _UserForm
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
577
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
578
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
579 def UsersGroupForm(edit=False, old_data={}, available_members=[]):
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
580 class _UsersGroupForm(formencode.Schema):
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
581 allow_extra_fields = True
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
582 filter_extra_fields = True
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
583
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
584 users_group_name = All(UnicodeString(strip=True, min=1, not_empty=True),
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
585 ValidUsersGroup(edit, old_data))
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
586
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
587 users_group_active = StringBoolean(if_missing=False)
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
588
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
589 if edit:
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
590 users_group_members = OneOf(available_members, hideList=False,
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
591 testValueList=True,
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
592 if_missing=None, not_empty=False)
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
593
959
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
594 return _UsersGroupForm
fff21c9b075c #56 fixed found bugs, implemented adding of new group + forms+validators
Marcin Kuzminski <marcin@python-works.com>
parents: 891
diff changeset
595
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
596
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
597 def ReposGroupForm(edit=False, old_data={}, available_groups=[]):
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
598 class _ReposGroupForm(formencode.Schema):
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
599 allow_extra_fields = True
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
600 filter_extra_fields = False
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
601
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
602 group_name = All(UnicodeString(strip=True, min=1, not_empty=True),
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
603 SlugifyName())
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
604 group_description = UnicodeString(strip=True, min=1,
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
605 not_empty=True)
1347
43b8e161be3f #47 implemented basic edition of groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1346
diff changeset
606 group_parent_id = OneOf(available_groups, hideList=False,
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
607 testValueList=True,
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
608 if_missing=None, not_empty=False)
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
609
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
610 chained_validators = [ValidReposGroup(edit, old_data), ValidPerms('group')]
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
611
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
612 return _ReposGroupForm
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
613
1898
a7dfe823933a added validation to repo groups to check for conflicting repository name fixes #337
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
614
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
615 def RegisterForm(edit=False, old_data={}):
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
616 class _RegisterForm(formencode.Schema):
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
617 allow_extra_fields = True
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
618 filter_extra_fields = True
742
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 741
diff changeset
619 username = All(ValidUsername(edit, old_data),
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 741
diff changeset
620 UnicodeString(strip=True, min=1, not_empty=True))
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
621 password = All(UnicodeString(strip=True, min=6, not_empty=True))
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
622 password_confirmation = All(UnicodeString(strip=True, min=6, not_empty=True))
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
623 active = StringBoolean(if_missing=False)
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
624 name = UnicodeString(strip=True, min=1, not_empty=False)
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
625 lastname = UnicodeString(strip=True, min=1, not_empty=False)
722
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
626 email = All(Email(not_empty=True), UniqSystemEmail(old_data))
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
627
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
628 chained_validators = [ValidPasswordsMatch, ValidPassword]
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
629
02bdf2f296ff fixes #69 password confirmation for register dialog.
Marcin Kuzminski <marcin@python-works.com>
parents: 710
diff changeset
630 return _RegisterForm
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
631
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
632
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
633 def PasswordResetForm():
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
634 class _PasswordResetForm(formencode.Schema):
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
635 allow_extra_fields = True
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
636 filter_extra_fields = True
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
637 email = All(ValidSystemEmail(), Email(not_empty=True))
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
638 return _PasswordResetForm
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 458
diff changeset
639
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
640
1112
6d0a7284949d #109, added optional clone uri when creating repo.
Marcin Kuzminski <marcin@python-works.com>
parents: 1022
diff changeset
641 def RepoForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
6d0a7284949d #109, added optional clone uri when creating repo.
Marcin Kuzminski <marcin@python-works.com>
parents: 1022
diff changeset
642 repo_groups=[]):
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
643 class _RepoForm(formencode.Schema):
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
644 allow_extra_fields = True
296
29370bb76fa6 first permissions commit: added permission managment on repository edit. Changed db rmissions, validators.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
645 filter_extra_fields = False
742
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 741
diff changeset
646 repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
647 SlugifyName())
1261
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
648 clone_uri = All(UnicodeString(strip=True, min=1, not_empty=False),
30828b1ebe20 added dump validation of cloneurl, it can still freeze if server will ask for auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
649 ValidCloneUri()())
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1112
diff changeset
650 repo_group = OneOf(repo_groups, hideList=True)
1112
6d0a7284949d #109, added optional clone uri when creating repo.
Marcin Kuzminski <marcin@python-works.com>
parents: 1022
diff changeset
651 repo_type = OneOf(supported_backends)
527
6d44d3862ec4 fixes #36, removed username, name, lastname, minimal length restrictions,
Marcin Kuzminski <marcin@python-works.com>
parents: 490
diff changeset
652 description = UnicodeString(strip=True, min=1, not_empty=True)
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
653 private = StringBoolean(if_missing=False)
810
bd57d1cb9dc3 fixes #62, added option to disable statistics for each repository
Marcin Kuzminski <marcin@python-works.com>
parents: 775
diff changeset
654 enable_statistics = StringBoolean(if_missing=False)
962
72f008ed9b18 implemented #84 downloads can be enabled/disabled per each repository from now.
Marcin Kuzminski <marcin@python-works.com>
parents: 960
diff changeset
655 enable_downloads = StringBoolean(if_missing=False)
1112
6d0a7284949d #109, added optional clone uri when creating repo.
Marcin Kuzminski <marcin@python-works.com>
parents: 1022
diff changeset
656
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
657 if edit:
1014
6fdc3ff65fce #56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents: 1013
diff changeset
658 #this is repo owner
1323
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1298
diff changeset
659 user = All(UnicodeString(not_empty=True), ValidRepoUser)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
660
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
661 chained_validators = [ValidRepoName(edit, old_data), ValidPerms()]
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 242
diff changeset
662 return _RepoForm
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
663
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
664
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
665 def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
666 repo_groups=[]):
530
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
667 class _RepoForkForm(formencode.Schema):
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
668 allow_extra_fields = True
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
669 filter_extra_fields = False
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
670 repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
671 SlugifyName())
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
672 repo_group = OneOf(repo_groups, hideList=True)
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
673 repo_type = All(ValidForkType(old_data), OneOf(supported_backends))
530
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
674 description = UnicodeString(strip=True, min=1, not_empty=True)
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
675 private = StringBoolean(if_missing=False)
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
676 copy_permissions = StringBoolean(if_missing=False)
1742
40c4f7351574 added option to do a checkout after cloning a repository
Marcin Kuzminski <marcin@python-works.com>
parents: 1735
diff changeset
677 update_after_clone = StringBoolean(if_missing=False)
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
678 fork_parent_id = UnicodeString()
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
679 chained_validators = [ValidForkName(edit, old_data)]
1366
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1364
diff changeset
680
530
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
681 return _RepoForkForm
a08f610e545e Implemented server side forks
Marcin Kuzminski <marcin@python-works.com>
parents: 529
diff changeset
682
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
683
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
684 def RepoSettingsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
685 repo_groups=[]):
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
686 class _RepoForm(formencode.Schema):
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
687 allow_extra_fields = True
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
688 filter_extra_fields = False
742
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 741
diff changeset
689 repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
1345
3bce31f026b8 #47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents: 1324
diff changeset
690 SlugifyName())
527
6d44d3862ec4 fixes #36, removed username, name, lastname, minimal length restrictions,
Marcin Kuzminski <marcin@python-works.com>
parents: 490
diff changeset
691 description = UnicodeString(strip=True, min=1, not_empty=True)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
692 repo_group = OneOf(repo_groups, hideList=True)
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
693 private = StringBoolean(if_missing=False)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
694
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
695 chained_validators = [ValidRepoName(edit, old_data), ValidPerms(),
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1550
diff changeset
696 ValidSettings]
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
697 return _RepoForm
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
698
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
699
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
700 def ApplicationSettingsForm():
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
701 class _ApplicationSettingsForm(formencode.Schema):
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
702 allow_extra_fields = True
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
703 filter_extra_fields = False
548
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
704 rhodecode_title = UnicodeString(strip=True, min=1, not_empty=True)
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
705 rhodecode_realm = UnicodeString(strip=True, min=1, not_empty=True)
891
cca7286401b3 fixes for #89 ga code
Marcin Kuzminski <marcin@python-works.com>
parents: 890
diff changeset
706 rhodecode_ga_code = UnicodeString(strip=True, min=1, not_empty=False)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
707
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
708 return _ApplicationSettingsForm
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
709
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
710
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
711 def ApplicationUiSettingsForm():
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
712 class _ApplicationUiSettingsForm(formencode.Schema):
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
713 allow_extra_fields = True
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
714 filter_extra_fields = False
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
715 web_push_ssl = OneOf(['true', 'false'], if_missing='false')
527
6d44d3862ec4 fixes #36, removed username, name, lastname, minimal length restrictions,
Marcin Kuzminski <marcin@python-works.com>
parents: 490
diff changeset
716 paths_root_path = All(ValidPath(), UnicodeString(strip=True, min=1, not_empty=True))
395
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
717 hooks_changegroup_update = OneOf(['True', 'False'], if_missing=False)
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
718 hooks_changegroup_repo_size = OneOf(['True', 'False'], if_missing=False)
661
673de12e6bf6 added option to enable/disable of logger hooks from admin panel.
Marcin Kuzminski <marcin@python-works.com>
parents: 659
diff changeset
719 hooks_pretxnchangegroup_push_logger = OneOf(['True', 'False'], if_missing=False)
673de12e6bf6 added option to enable/disable of logger hooks from admin panel.
Marcin Kuzminski <marcin@python-works.com>
parents: 659
diff changeset
720 hooks_preoutgoing_pull_logger = OneOf(['True', 'False'], if_missing=False)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
721
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
722 return _ApplicationUiSettingsForm
320
05b212954275 Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 310
diff changeset
723
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1898
diff changeset
724
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
725 def DefaultPermissionsForm(perms_choices, register_choices, create_choices):
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
726 class _DefaultPermissionsForm(formencode.Schema):
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
727 allow_extra_fields = True
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
728 filter_extra_fields = True
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
729 overwrite_default = StringBoolean(if_missing=False)
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 661
diff changeset
730 anonymous = OneOf(['True', 'False'], if_missing=False)
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
731 default_perm = OneOf(perms_choices)
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
732 default_register = OneOf(register_choices)
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
733 default_create = OneOf(create_choices)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 555
diff changeset
734
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 416
diff changeset
735 return _DefaultPermissionsForm
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
736
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
737
1290
74685a31cc43 Enable start_tls connection encryption.
"Lorenzo M. Catucci" <lorenzo@sancho.ccd.uniroma2.it>
parents: 1271
diff changeset
738 def LdapSettingsForm(tls_reqcert_choices, search_scope_choices, tls_kind_choices):
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
739 class _LdapSettingsForm(formencode.Schema):
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
740 allow_extra_fields = True
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
741 filter_extra_fields = True
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
742 pre_validators = [LdapLibValidator]
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
743 ldap_active = StringBoolean(if_missing=False)
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
744 ldap_host = UnicodeString(strip=True,)
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
745 ldap_port = Number(strip=True,)
1290
74685a31cc43 Enable start_tls connection encryption.
"Lorenzo M. Catucci" <lorenzo@sancho.ccd.uniroma2.it>
parents: 1271
diff changeset
746 ldap_tls_kind = OneOf(tls_kind_choices)
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
747 ldap_tls_reqcert = OneOf(tls_reqcert_choices)
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
748 ldap_dn_user = UnicodeString(strip=True,)
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
749 ldap_dn_pass = UnicodeString(strip=True,)
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
750 ldap_base_dn = UnicodeString(strip=True,)
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
751 ldap_filter = UnicodeString(strip=True,)
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
752 ldap_search_scope = OneOf(search_scope_choices)
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
753 ldap_attr_login = All(AttrLoginValidator, UnicodeString(strip=True,))
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
754 ldap_attr_firstname = UnicodeString(strip=True,)
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
755 ldap_attr_lastname = UnicodeString(strip=True,)
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 972
diff changeset
756 ldap_attr_email = UnicodeString(strip=True,)
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
757
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
758 return _LdapSettingsForm