Revision a23ac2f7
b/snf-astakos-app/astakos/api/projects.py | ||
---|---|---|
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 |
import re |
|
34 | 35 |
from django.utils import simplejson as json |
35 | 36 |
from django.views.decorators.csrf import csrf_exempt |
36 | 37 |
from django.http import HttpResponse |
... | ... | |
362 | 363 |
return value |
363 | 364 |
|
364 | 365 |
|
366 |
DOMAIN_VALUE_REGEX = re.compile( |
|
367 |
r'^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$', |
|
368 |
re.IGNORECASE) |
|
369 |
|
|
370 |
|
|
371 |
def valid_project_name(name): |
|
372 |
return DOMAIN_VALUE_REGEX.match(name) is not None |
|
373 |
|
|
374 |
|
|
365 | 375 |
def submit_application(app_data, user, project_id=None): |
366 | 376 |
uuid = app_data.get("owner") |
367 | 377 |
if uuid is None: |
... | ... | |
377 | 387 |
except KeyError: |
378 | 388 |
raise faults.BadRequest("Name missing.") |
379 | 389 |
|
390 |
if not valid_project_name(name): |
|
391 |
raise faults.BadRequest("Project name should be in domain format") |
|
392 |
|
|
380 | 393 |
join_policy = app_data.get("join_policy", "moderated") |
381 | 394 |
try: |
382 | 395 |
join_policy = MEMBERSHIP_POLICY[join_policy] |
b/snf-astakos-app/astakos/im/tests/projects.py | ||
---|---|---|
557 | 557 |
status, body = self.create(ap, h_owner) |
558 | 558 |
self.assertEqual(status, 201) |
559 | 559 |
|
560 |
ap["name"] = "non_domain_name" |
|
561 |
status, body = self.create(ap, h_owner) |
|
562 |
self.assertEqual(status, 400) |
|
563 |
|
|
560 | 564 |
filters = {"filter": {"state": "nonex"}} |
561 | 565 |
req = {"body": json.dumps(filters)} |
562 | 566 |
r = client.get(reverse("api_projects"), req, **h_owner) |
Also available in: Unified diff