From 8ad2bcbd6fe8dd9d97292cbd1e785d4fc34bd72c Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Tue, 4 Mar 2025 18:25:39 -0700 Subject: [PATCH 01/10] overhaul for comanage syncing --- .vscode/launch.json | 18 ++ Dockerfile | 9 +- cmds | 2 + docker-compose.yml | 16 +- rcamp/accounts/admin.py | 279 +++++++++++++++++- rcamp/accounts/forms.py | 3 + .../migrations/0004_auto_20250304_1801.py | 77 +++++ rcamp/accounts/models.py | 154 ++++++++++ rcamp/accounts/templates/change_list.html | 22 ++ .../templates/comanage_sync_detail.html | 36 +++ .../templates/comanage_sync_form.html | 11 + .../templates/comanage_sync_list.html | 50 ++++ rcamp/accounts/urls.py | 6 +- rcamp/accounts/views.py | 30 +- rcamp/lib/utils.py | 43 +++ rcamp/lib/views.py | 1 - .../migrations/0003_auto_20241014_0912.py | 18 ++ .../0004_alter_mailnotifier_event.py | 18 ++ .../migrations/0005_auto_20250304_1801.py | 18 ++ .../migrations/0006_auto_20250304_1801.py | 28 ++ rcamp/rcamp/settings/databases.py | 19 ++ rcamp/rcamp/settings/main.py | 2 + rcamp/rcamp/static/css/custom-admin.css | 129 ++++++++ rcamp/rcamp/wsgi.py | 9 + .../accounts/comanageuser/change_form.html | 23 ++ rcamp/usernames.pkl | Bin 0 -> 743591 bytes requirements.txt | 2 + 27 files changed, 1006 insertions(+), 17 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 cmds create mode 100644 rcamp/accounts/migrations/0004_auto_20250304_1801.py create mode 100644 rcamp/accounts/templates/change_list.html create mode 100644 rcamp/accounts/templates/comanage_sync_detail.html create mode 100644 rcamp/accounts/templates/comanage_sync_form.html create mode 100644 rcamp/accounts/templates/comanage_sync_list.html create mode 100644 rcamp/lib/utils.py create mode 100644 rcamp/mailer/migrations/0003_auto_20241014_0912.py create mode 100644 rcamp/mailer/migrations/0004_alter_mailnotifier_event.py create mode 100644 rcamp/mailer/migrations/0005_auto_20250304_1801.py create mode 100644 rcamp/projects/migrations/0006_auto_20250304_1801.py create mode 100644 rcamp/rcamp/static/css/custom-admin.css create mode 100644 rcamp/templates/admin/accounts/comanageuser/change_form.html create mode 100644 rcamp/usernames.pkl diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..bf67d43 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Remote Attach", + "type": "python", + "request": "attach", + "host": "localhost", + "port": 5678, + "pathMappings": [ + { + "localRoot": "${workspaceFolder}/rcamp", + "remoteRoot": "/opt/rcamp" + } + ] + } + ] +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 9f17ef7..4c1ba37 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,10 +9,10 @@ ARG GOSU_VERSION=1.16 # Install dependencies RUN dnf -y install 'dnf-command(config-manager)' \ - && dnf config-manager --set-enabled powertools \ - && dnf -y install epel-release \ - && dnf -y groupinstall "Development Tools" \ - && dnf -y install xz dpkg which sssd pam_radius sqlite pam-devel openssl-devel python3-devel openldap-devel mysql-devel pcre-devel + && dnf config-manager --set-enabled powertools \ + && dnf -y install epel-release \ + && dnf -y groupinstall "Development Tools" \ + && dnf -y install xz dpkg which sssd pam_radius sqlite pam-devel python3-devel openssl-devel openldap-devel mysql-devel pcre-devel # Install gosu to drop user and chown shared volumes at runtime ADD ["https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64", "/usr/bin/gosu"] @@ -74,4 +74,5 @@ HEALTHCHECK --interval=30s --timeout=30s --start-period=60s --retries=3 CMD curl COPY ["docker-entrypoint.sh", "/usr/local/bin/"] ENTRYPOINT ["sh","/usr/local/bin/docker-entrypoint.sh"] +#CMD python3 -m debugpy --listen 0.0.0.0:5678 --wait-for-client manage.py runserver 0.0.0.0:8000 CMD ["/opt/rcamp_venv/bin/uwsgi", "/opt/uwsgi.ini"] diff --git a/cmds b/cmds new file mode 100644 index 0000000..8092e1e --- /dev/null +++ b/cmds @@ -0,0 +1,2 @@ +docker-compose run --rm --entrypoint "python3" rcamp-uwsgi manage.py migrate +docker-compose run --rm --entrypoint "python3" rcamp-uwsgi manage.py createsuperuser diff --git a/docker-compose.yml b/docker-compose.yml index 2b9ef13..b6362cf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: "3.6" services: rcamp-uwsgi: @@ -6,6 +5,7 @@ services: context: . container_name: rcamp-uwsgi command: ["python3", "manage.py", "runserver", "0.0.0.0:8000"] + # command: ["python3", "-m", "debugpy", "--listen", "0.0.0.0:5678", "--wait-for-client", "manage.py", "runserver", "0.0.0.0:8000"] env_file: - dev-environment.env environment: @@ -19,9 +19,10 @@ services: - rcamp-logs:/opt/logs ports: - "80:8000" + - "5678:5678" # Debugger port depends_on: - - database - - ldap + database: + condition: service_healthy database: image: mysql:5.7 @@ -31,10 +32,11 @@ services: - MYSQL_DATABASE=rcamp1712 volumes: - database:/var/lib/mysql - - ldap: - image: researchcomputing/rc-test-ldap - container_name: ldap + healthcheck: + test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -ppassword"] + interval: 10s + timeout: 5s + retries: 5 volumes: static-content: diff --git a/rcamp/accounts/admin.py b/rcamp/accounts/admin.py index e9314bf..225af14 100644 --- a/rcamp/accounts/admin.py +++ b/rcamp/accounts/admin.py @@ -1,6 +1,6 @@ import logging -from django.contrib import admin +from django.contrib import admin, messages from django.contrib.auth import admin as auth_admin from django import forms from lib.fields import LdapCsvField @@ -10,10 +10,24 @@ CuLdapUser, RcLdapGroup, IdTracker, + ComanageUser, + ComanageGroup, AccountRequest, Intent, ORGANIZATIONS ) +from django.urls import reverse_lazy +from django.shortcuts import render +from .forms import ComanageSyncForm +from .models import ComanageUser +from comanage.lib import UserCO +from lib.utils import get_user_and_groups, get_comanage_users_by_org +from django.urls import path +from django.utils.html import format_html +from django.urls import reverse +from django.shortcuts import redirect +from django.http import HttpResponseRedirect +from django.db.models import Q @admin.register(User) @@ -204,4 +218,267 @@ class RcLdapGroupAdmin(RcLdapModelAdmin): search_fields = ['name'] form = RcLdapGroupForm +# Custom action to sync users from Comanage +def sync_users_from_comanage(modeladmin, request, queryset): + """ + Sync the selected users from Comanage. + """ + if not queryset: + users = ["kyre0001_amc"] + for user in users: + # try: + # ComanageUser.sync_from_comanage(user.user_id) # Call the sync method on the user + # modeladmin.message_user(request, f"User {user.name} synced successfully!") + # except Exception as e: + # modeladmin.message_user(request, f"Error syncing user {user.name}: {str(e)}", level='debug') + try: + ComanageUser.sync_from_comanage(user) # Call the sync method on the user + modeladmin.message_user(request, f"User {user} synced successfully!") + except Exception as e: + modeladmin.message_user(request, f"Error syncing user {user}: {str(e)}", level='debug') + +# Action to sync users in bulk +def sync_users_from_comanage(modeladmin, request, queryset): + """ + Sync the selected users from Comanage. + """ + if queryset.count() == 0: + modeladmin.message_user(request, "No users selected to sync.", level=messages.WARNING) + return + + for user in queryset: + try: + # Assuming ComanageUser.sync_from_comanage expects user ID + ComanageUser.sync_from_comanage(user.user_id) # Sync logic here + modeladmin.message_user(request, f"User {user.name} synced successfully!", level=messages.SUCCESS) + except Exception as e: + modeladmin.message_user(request, f"Error syncing user {user.name}: {str(e)}", level=messages.ERROR) + +# ComanageUserAdmin with additional customization and sync functionality +class ComanageUserAdmin(admin.ModelAdmin): + list_display = ['user_id', 'name', 'email', 'co_person_id'] + search_fields = ['user_id', 'name', 'email', 'co_person_id'] + readonly_fields = ['user_id', 'name', 'email', 'co_person_id', 'group_names', 'created_at', 'modified'] + actions = [sync_users_from_comanage] + + # Disable the "Add" button in the list view + def has_add_permission(self, request): + return False + + # Disable the delete button for individual objects + def has_delete_permission(self, request, obj=None): + return False + + def changelist_view(self, request, extra_context=None): + """ + Override the changelist view to trigger a function when the list of users is accessed. + """ + # Call your custom function here (e.g., sync users from Comanage) + try: + user = "kyre0001_amc" # Or you can filter users as needed + ComanageUser.sync_from_comanage(user) # Call your sync function here + self.message_user(request, "Users synced successfully!", level=messages.SUCCESS) + except Exception as e: + self.message_user(request, f"Error syncing users: {str(e)}", level=messages.ERROR) + + # Proceed with the normal changelist view rendering + return super().changelist_view(request, extra_context) + + # Override the change_view method to remove the "Save" button and show custom sync button + def change_view(self, request, object_id, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['show_save_and_add_another'] = False + extra_context['show_save_and_continue'] = False + extra_context['show_save'] = False + + return super().change_view(request, object_id, form_url, extra_context) + +# class ComanageUserAdmin(admin.ModelAdmin): +# list_display = ['user_id', 'name', 'email', 'co_person_id'] +# search_fields = ['user_id', 'name', 'email', 'co_person_id'] +# readonly_fields = ['user_id', 'name', 'email', 'co_person_id', 'group_names', 'created_at', 'modified',] +# actions = [sync_users_from_comanage] + +# # Disable the "Add" button in the list view +# def has_add_permission(self, request): +# return False + +# # Disable the delete button for individual objects +# def has_delete_permission(self, request, obj=None): +# return False + +# # Override the change_view method to remove the "Save" button +# def change_view(self, request, object_id, form_url='', extra_context=None): +# extra_context = extra_context or {} +# extra_context['show_save_and_add_another'] = False +# extra_context['show_save_and_continue'] = False +# extra_context['show_save'] = False +# return super().change_view(request, object_id, form_url, extra_context) + + # Optionally, you can define a custom form (not shown here) + # form = CustomUserForm # Uncomment and define your form if necessary + +# class ComanageSyncAdmin(admin.ModelAdmin): +# change_list_template = "comanage_sync_list.html" # Custom template for the changelist page +# list_display = ('user_id', 'name', 'email', 'created_at', 'modified', 'actions') +# search_fields = ['user_id', 'name', 'email'] +# actions = ['custom_action'] + +# def changelist_view(self, request, extra_context=None): +# search_query = request.GET.get('q', '') + +# # Filter user data if there is a search query +# if search_query: +# user_data = ComanageUser.objects.filter( +# Q(user_id__icontains=search_query) | Q(email__icontains=search_query) +# ) +# else: +# # Fetch all user data if no search query is provided +# user_data = ComanageUser.objects.all() + +# # Add user data to the context for rendering +# extra_context = extra_context or {} +# extra_context['user_data'] = user_data +# extra_context['search_query'] = search_query # Optional: to display the query in the search bar + +# # Render the custom changelist view with the extra context +# return super().changelist_view(request, extra_context=extra_context) + +# # Define custom URL for detailed group view +# def get_urls(self): +# # Get default admin URLs +# urls = super().get_urls() + +# # Add custom URL for sync users and user detail view +# custom_urls = [ +# path('sync-users/', self.admin_site.admin_view(self.sync_multiple_users), name='comanage-sync-users'), +# path('comanage-sync//view-groups/', self.admin_site.admin_view(self.view_groups), name='comanage-sync-view-groups'), +# path('comanage-sync//', self.admin_site.admin_view(self.comanage_sync_view), name='comanage-sync-user-detail'), +# ] +# return custom_urls + urls + +# # View to show detailed user info and groups +# def comanage_sync_view(self, request, user_id): +# # Fetch user and group data based on user_id +# user_data, groups = get_user_and_groups(user_id) # You need to implement this function + +# # Render the user detail page with user data and groups +# return render(request, 'comanage_sync_detail.html', { +# 'user_data': user_data, +# 'groups': groups, +# }) + +# # Function to handle syncing multiple users +# def sync_multiple_users(self, request): +# # Define your list of user_ids to sync + +# user_data = get_comanage_users_by_org() + +# # Sync users from Comanage +# for user in user_data: +# ComanageUser.sync_from_comanage(user.cuhpcuid) # Sync method for updating users + +# # Redirect back to the changelist view after sync is complete +# self.message_user(request, "Users have been synced successfully!") +# url = reverse('admin:accounts_comanageuser_changelist') + +# return redirect(url) # Update this URL if necessary + +# # Add actions to your admin class to display a custom button +# def changelist_actions(self, request): +# # Custom button that will trigger the sync function +# return format_html('Sync Users', +# self.admin_site.urls['comanage-sync-users'] +# ) + +# def custom_action(self, obj): +# # Add "View Groups" link for each user +# return format_html('View Groups', +# reverse('admin:comanage-sync-user-detail', args=[obj.user_id]) +# ) + +# def view_groups(self, request, user_id): +# try: +# # Fetch the user based on user_id +# user = ComanageUser.objects.get(user_id=user_id) + +# # Fetch the user's groups, assuming you have a `groups` field or relation in your model +# user_groups = user.groups.all() + +# # Get members of each group (assuming there's a Many-to-Many or ForeignKey relationship with users) +# group_members = {} +# for group in user_groups: +# group_members[group.name] = group.members.all() # Adjust based on your Group model + +# return render(request, 'view_groups.html', { +# 'user': user, +# 'user_groups': user_groups, +# 'group_members': group_members, +# }) + +# except ComanageUser.DoesNotExist: +# raise Http404("User not found") + +class ComanageGroupForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super(ComanageGroupForm, self).__init__(*args, **kwargs) + instance = getattr(self, 'instance', None) + group_members = None + + if instance and instance.pk: + # If the group instance exists, filter out the members already in the group + group_members = instance.members.all() + available_users = ComanageUser.objects.all() + else: + # If this is a new group, show all users + available_users = ComanageUser.objects.all() + + # Prepare choices for the 'members' field (users not already in the group) + user_choices = [ + (user.id, f'{user.name} ({user.user_id})') for user in available_users + ] + + # Set pre-selected members based on the group instance + self.fields['members'].initial = group_members + + # Set the required fields + self.fields['gid'].required = False + self.fields['members'].required = False + + # Apply the filtered multi-select widget + self.fields['members'].widget = admin.widgets.FilteredSelectMultiple( + verbose_name='Members', + is_stacked=False + ) + + # Assign the available choices dynamically + self.fields['members'].choices = user_choices + + class Meta: + model = ComanageGroup + fields = ['name', 'group_id', 'gid', 'created_at', 'modified', 'members'] + +class ComanageGroupAdmin(admin.ModelAdmin): + list_display = ['name', 'gid', 'get_members'] + search_fields = ['name', 'group_id', 'gid'] + readonly_fields = ['group_id', 'created_at', 'modified'] + form = ComanageGroupForm + + # Custom method to display group members + def get_members(self, obj): + """ + Custom method to display all members of the group in the admin list view. + """ + return ", ".join([user.name for user in obj.members.all()]) + + get_members.short_description = 'Group Members' + + def get_queryset(self, request): + queryset = super().get_queryset(request) + # Optionally, modify the queryset if needed + return queryset + +admin.site.register(ComanageGroup, ComanageGroupAdmin) +admin.site.register(ComanageUser, ComanageUserAdmin) + admin.site.register(IdTracker) diff --git a/rcamp/accounts/forms.py b/rcamp/accounts/forms.py index 2944561..525bf02 100644 --- a/rcamp/accounts/forms.py +++ b/rcamp/accounts/forms.py @@ -12,6 +12,9 @@ REQUEST_ROLES ) +class ComanageSyncForm(forms.Form): + user_id = forms.CharField(max_length=255) + class AccountRequestVerifyForm(forms.Form): """ An abstract form for verifying user credentials against a configured authority diff --git a/rcamp/accounts/migrations/0004_auto_20250304_1801.py b/rcamp/accounts/migrations/0004_auto_20250304_1801.py new file mode 100644 index 0000000..80ce6c3 --- /dev/null +++ b/rcamp/accounts/migrations/0004_auto_20250304_1801.py @@ -0,0 +1,77 @@ +# Generated by Django 2.2.28 on 2025-03-05 01:01 + +import django.contrib.auth.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0003_auto_20180228_1158'), + ] + + operations = [ + migrations.CreateModel( + name='ComanageUser', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user_id', models.CharField(max_length=255, unique=True)), + ('co_person_id', models.CharField(blank=True, max_length=255, null=True, unique=True)), + ('name', models.CharField(max_length=255)), + ('email', models.EmailField(max_length=254)), + ('created_at', models.DateTimeField()), + ('modified', models.DateTimeField()), + ('group_names', models.TextField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Comanage User', + 'verbose_name_plural': 'Comanage Users', + }, + ), + migrations.AlterField( + model_name='accountrequest', + name='login_shell', + field=models.CharField(choices=[('/bin/bash', 'bash'), ('/bin/tcsh', 'tcsh')], default='/bin/bash', max_length=24), + ), + migrations.AlterField( + model_name='accountrequest', + name='organization', + field=models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'University of Colorado Denver | Anschutz Medical Campus'), ('ncar', 'NCAR'), ('internal', 'Research Computing - Administrative')], max_length=128), + ), + migrations.AlterField( + model_name='accountrequest', + name='role', + field=models.CharField(choices=[('undergraduate', 'Undergraduate'), ('graduate', 'Graduate'), ('postdoc', 'Post Doc'), ('instructor', 'Instructor'), ('faculty', 'Faculty'), ('affiliated_faculty', 'Affiliated Faculty'), ('staff', 'Staff'), ('sponsored', 'Sponsored Affiliate')], default='undergraduate', max_length=24), + ), + migrations.AlterField( + model_name='accountrequest', + name='status', + field=models.CharField(choices=[('p', 'Pending'), ('a', 'Approved'), ('d', 'Denied'), ('i', 'Incomplete')], default='p', max_length=16), + ), + migrations.AlterField( + model_name='user', + name='last_name', + field=models.CharField(blank=True, max_length=150, verbose_name='last name'), + ), + migrations.AlterField( + model_name='user', + name='username', + field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'), + ), + migrations.CreateModel( + name='ComanageGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('group_id', models.CharField(max_length=255, unique=True)), + ('created_at', models.DateTimeField(blank=True, null=True)), + ('modified', models.DateTimeField(blank=True, null=True)), + ('gid', models.IntegerField(unique=True)), + ('members', models.ManyToManyField(blank=True, to='accounts.ComanageUser')), + ], + options={ + 'verbose_name': 'Comanage Group', + 'verbose_name_plural': 'Comanage Groups', + }, + ), + ] diff --git a/rcamp/accounts/models.py b/rcamp/accounts/models.py index 807bfea..1d47a1b 100644 --- a/rcamp/accounts/models.py +++ b/rcamp/accounts/models.py @@ -4,6 +4,7 @@ from django.views.decorators.debug import sensitive_variables from django.contrib.auth.models import AbstractUser from lib import ldap_utils +from lib.utils import get_user_and_groups, get_comanage_users_by_org, sync_group_to_comanage import ldapdb.models.fields as ldap_fields import ldapdb.models import logging @@ -483,6 +484,159 @@ def save(self,*args,**kwargs): super(RcLdapGroup,self).save(*args,**kwargs) +# class ComanageUser(models.Model): +# class Meta: +# verbose_name = 'Comanage User' +# verbose_name_plural = 'Comanage Users' + +# user_id = models.CharField(max_length=255, unique=True) +# name = models.CharField(max_length=255) +# email = models.EmailField() +# created_at = models.DateTimeField() +# modified = models.DateTimeField() + +# # Add a ManyToManyField for groups +# groups = models.ManyToManyField(ComanageGroup, blank=True) + +# # Fallback to store group names as a comma-separated list +# group_names = models.TextField(blank=True, null=True) + +# def __str__(self): +# return self.name + +# # Method to fetch and update data from Comanage +# @classmethod +# def sync_from_comanage(cls, user_id): +# # Fetch user data and groups from Comanage +# user_data, group_data = get_user_and_groups(user_id) + +# # Get or create the user +# user, created = cls.objects.update_or_create( +# user_id=user_data['user_id'], +# defaults={ +# 'name': user_data['name'], +# 'email': user_data['email'], +# 'created_at': user_data['created_at'], +# 'modified': user_data['modified'] +# } +# ) + +# # Sync the groups +# if group_data: +# # Update or create groups in the Group model +# for group in group_data: +# group_instance, _ = ComanageGroup.objects.get_or_create( +# group_id=group['Id'], +# defaults={ +# 'name': group['Name'], +# 'created': group['Created'], +# 'modified': group['Modified'] +# } +# ) +# user.groups.add(group_instance) + +# # Store group names (optional) +# user.group_names = ', '.join([group['Name'] for group in group_data]) + +# # Save the user after syncing the groups +# user.save() + +# return user + +class ComanageUser(models.Model): + class Meta: + verbose_name = 'Comanage User' + verbose_name_plural = 'Comanage Users' + + user_id = models.CharField(max_length=255, unique=True) + co_person_id = models.CharField(max_length=255, unique=True, blank=True, null=True) + name = models.CharField(max_length=255) + email = models.EmailField() + created_at = models.DateTimeField() + modified = models.DateTimeField() + + # Fallback to store group names as a comma-separated list + group_names = models.TextField(blank=True, null=True) + + def __str__(self): + return self.name + + # Method to fetch and update data from Comanage + @classmethod + def sync_from_comanage(cls, user_id): + # Fetch user data and groups from Comanage + user_data, group_data = get_user_and_groups(user_id) + + # Get or create the user + user, created = cls.objects.update_or_create( + user_id=user_data['user_id'], + defaults={ + 'co_person_id': user_data['co_person_id'], + 'name': user_data['name'], + 'email': user_data['email'], + 'created_at': user_data['created_at'], + 'modified': user_data['modified'] + } + ) + + # Sync the groups + if group_data: + group_instances = [] + for group in group_data: + # Create or get the group instance + group_instance, _ = ComanageGroup.objects.get_or_create( + group_id=group['Id'], + defaults={ + 'name': group['Name'], + 'created_at': group['Created'], + 'modified': group['Modified'], + 'gid': int(group['gidNumber']), + } + ) + group_instance.gid = int(group['gidNumber']) + group_instance.created_at = group['Created'] + group_instance.modified = group['Modified'] + group_instance.members.add(user) + group_instance.member_uids = ', '.join([group['Name'] for group in group_data]) + group_instance.save(immutable=True) + group_instances.append(group_instance) + + # You can also store the group names as a comma-separated list + user.group_names = ', '.join([group['Name'] for group in group_data]) + + # Save the user after syncing the groups + user.save() + + return user + +class ComanageGroup(models.Model): + class Meta: + verbose_name = 'Comanage Group' + verbose_name_plural = 'Comanage Groups' + + name = models.CharField(max_length=255) + group_id = models.CharField(max_length=255, unique=True) + created_at = models.DateTimeField(null=True, blank=True) + modified = models.DateTimeField(null=True, blank=True) + members = models.ManyToManyField(ComanageUser, blank=True) + gid = models.IntegerField(unique=True) + + def __str__(self): + return self.name + + def save(self,*args,**kwargs): + immutable = kwargs.pop('immutable', False) + + if not immutable: + # If no GID specified, auto-assign + if self.gid is None: + id_tracker = IdTracker.objects.get(category='posix') + gid = id_tracker.get_next_id() + self.gid = gid + logger = logging.getLogger('accounts') + logger.info('Auto-assigned GID to group: {}, {}'.format(gid, self.name)) + + super(ComanageGroup,self).save(*args,**kwargs) def date_to_sp_expire (date_, epoch=datetime.date(year=1970, day=1, month=1)): return (date_ - epoch).days diff --git a/rcamp/accounts/templates/change_list.html b/rcamp/accounts/templates/change_list.html new file mode 100644 index 0000000..52e02d2 --- /dev/null +++ b/rcamp/accounts/templates/change_list.html @@ -0,0 +1,22 @@ +{% extends "admin/change_list.html" %} + +{% block content %} +
+

User Change View

+ + +

{{ original.name }}

+

User ID: {{ original.user_id }}

+

Email: {{ original.email }}

+ + + {% if sync_button %} +
+ {% csrf_token %} + +
+ {% endif %} +
+ + {{ block.super }} +{% endblock %} \ No newline at end of file diff --git a/rcamp/accounts/templates/comanage_sync_detail.html b/rcamp/accounts/templates/comanage_sync_detail.html new file mode 100644 index 0000000..005410e --- /dev/null +++ b/rcamp/accounts/templates/comanage_sync_detail.html @@ -0,0 +1,36 @@ +{% extends "admin/base.html" %} + +{% block extrahead %} + +{% endblock %} + +{% block content %} +

User Groups for {{ user_data.name }}

+ +

User ID: {{ user_data.user_id }}

+

Email: {{ user_data.email }}

+

Created At: {{ user_data.created_at }}

+

Modified: {{ user_data.modified }}

+ +

Groups

+ + + + + + + + + + + {% for group in groups %} + + + + + + {% endfor %} + +
Group NameCreated AtModified
{{ group.Name }}{{ group.Created }}{{ group.Modified }}
+ +{% endblock %} \ No newline at end of file diff --git a/rcamp/accounts/templates/comanage_sync_form.html b/rcamp/accounts/templates/comanage_sync_form.html new file mode 100644 index 0000000..a4d9632 --- /dev/null +++ b/rcamp/accounts/templates/comanage_sync_form.html @@ -0,0 +1,11 @@ + +{% extends "admin/base_site.html" %} + +{% block content %} +

Sync Comanage User

+
+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock %} diff --git a/rcamp/accounts/templates/comanage_sync_list.html b/rcamp/accounts/templates/comanage_sync_list.html new file mode 100644 index 0000000..1924825 --- /dev/null +++ b/rcamp/accounts/templates/comanage_sync_list.html @@ -0,0 +1,50 @@ +{% extends 'admin/change_list.html' %} + +{% block extrahead %} + +{% endblock %} + +{% block content %} + +
+ Sync Users from Comanage +
+ +{% block search %} +
+
+ + +
+ +
+{% endblock %} + + + + + + + + + + + + + + {% for user in user_data %} + + + + + + + + + {% endfor %} + +
User IDNameEmailCreated AtModifiedActions
{{ user.user_id }}{{ user.name }}{{ user.email }}{{ user.created_at }}{{ user.modified }} + View Groups +
+ +{% endblock %} diff --git a/rcamp/accounts/urls.py b/rcamp/accounts/urls.py index 6ac6bdd..6f3b0a2 100644 --- a/rcamp/accounts/urls.py +++ b/rcamp/accounts/urls.py @@ -1,10 +1,13 @@ from django.conf.urls import include, url +from django.urls import path +from . import admin from accounts.views import ( AccountRequestOrgSelectView, AccountRequestVerifyUcbView, AccountRequestVerifyCsuView, AccountRequestIntentView, - AccountRequestReviewView + AccountRequestReviewView, + sync_user_from_comanage ) @@ -35,4 +38,5 @@ AccountRequestReviewView.as_view(), name='account-request-review' ), + path('admin/accounts/comanageuser//sync/', sync_user_from_comanage, name='accounts_comanageuser_sync'), ] diff --git a/rcamp/accounts/views.py b/rcamp/accounts/views.py index 302caf3..8067805 100644 --- a/rcamp/accounts/views.py +++ b/rcamp/accounts/views.py @@ -7,7 +7,8 @@ AccountRequest, Intent, CuLdapUser, - CsuLdapUser + CsuLdapUser, + ComanageUser ) from accounts.forms import ( AccountRequestVerifyUcbForm, @@ -18,8 +19,7 @@ account_request_received, account_request_approved ) - - +from django.shortcuts import render, get_object_or_404 class AccountRequestOrgSelectView(TemplateView): template_name = 'account-request-org-select.html' @@ -146,3 +146,27 @@ def get_context_data(self, **kwargs): return context except AccountRequest.DoesNotExist: raise Http404('Account Request not found.') + +# View to display detailed group information +def comanage_user_detail(request, user_id): + user = get_object_or_404(ComanageUser, user_id=user_id) + # Assume get_groups is a function that returns the groups for a user + groups = get_groups(user_id) + return render(request, 'comanage_sync_detail.html', { + 'user_data': user, + 'groups': groups + }) + +def sync_user_from_comanage(request, user_id): + """ + A custom view to sync user data from Comanage. + """ + try: + user = ComanageUser.objects.get(id=user_id) + user.sync_from_comanage(user_id=user.user_id) # Implement the logic to sync from Comanage + message = "User synced successfully!" + except ComanageUser.DoesNotExist: + message = "User not found." + + # Redirect back to the change page + return redirect('admin:accounts_comanageuser_change', object_id=user_id) \ No newline at end of file diff --git a/rcamp/lib/utils.py b/rcamp/lib/utils.py new file mode 100644 index 0000000..60bf537 --- /dev/null +++ b/rcamp/lib/utils.py @@ -0,0 +1,43 @@ +from comanage.sync_ldap_to_cilogon import get_co_user_and_groups, get_co_users, sync_co_group +import logging + +def get_comanage_users_by_org(org="amc"): + users = get_co_users(org) + return users + +def get_comanage_user(user_id): + # This is a placeholder for the actual API call to Comanage + # Replace this with your actual function that fetches data from Comanage + # For example, it could make an HTTP request to a Comanage API or use an SDK. + + # Simulating user data returned from Comanage + user_data = { + 'user_id': user_id, + 'name': f'User {user_id}', + 'email': f'user{user_id}@example.com', + 'role': 'Admin' if int(user_id) % 2 == 0 else 'User', + 'created_at': '2025-02-15T10:00:00' + } + return user_data + +def get_user_and_groups(uid): + """ + Fetch user data from Comanage using the UID. + Replace this with your actual logic for fetching data. + """ + user_data, user_groups = get_co_user_and_groups(uid) + + return user_data, user_groups + +# def get_groups(uid): +# """ +# Fetch the groups for a given user. +# Replace this with your actual logic to retrieve the user's groups. +# """ +# # Example mock data, replace with actual logic +# return [{'name': 'Group A', 'role': 'Member'}, {'name': 'Group B', role: 'Member'}] if uid.endswith('1') else [{'name': 'Group C', 'role': 'Member'}] + + +def sync_group_to_comanage(group): + co_group_id = sync_co_group(group) + return co_group_id \ No newline at end of file diff --git a/rcamp/lib/views.py b/rcamp/lib/views.py index 9453c87..a5cd517 100644 --- a/rcamp/lib/views.py +++ b/rcamp/lib/views.py @@ -1,4 +1,3 @@ -from django.shortcuts import render_to_response from django.shortcuts import render from django.template import RequestContext from django.shortcuts import redirect diff --git a/rcamp/mailer/migrations/0003_auto_20241014_0912.py b/rcamp/mailer/migrations/0003_auto_20241014_0912.py new file mode 100644 index 0000000..6bc5b26 --- /dev/null +++ b/rcamp/mailer/migrations/0003_auto_20241014_0912.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.28 on 2024-10-14 15:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailer', '0002_allocation_expiration_mailer_field_choices'), + ] + + operations = [ + migrations.AlterField( + model_name='mailnotifier', + name='event', + field=models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), + ), + ] diff --git a/rcamp/mailer/migrations/0004_alter_mailnotifier_event.py b/rcamp/mailer/migrations/0004_alter_mailnotifier_event.py new file mode 100644 index 0000000..0db0845 --- /dev/null +++ b/rcamp/mailer/migrations/0004_alter_mailnotifier_event.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.25 on 2025-02-17 17:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailer', '0003_auto_20241014_0912'), + ] + + operations = [ + migrations.AlterField( + model_name='mailnotifier', + name='event', + field=models.CharField(choices=[('__warningregistry__', '__warningregistry__'), ('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), + ), + ] diff --git a/rcamp/mailer/migrations/0005_auto_20250304_1801.py b/rcamp/mailer/migrations/0005_auto_20250304_1801.py new file mode 100644 index 0000000..c40ca4e --- /dev/null +++ b/rcamp/mailer/migrations/0005_auto_20250304_1801.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.28 on 2025-03-05 01:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailer', '0004_alter_mailnotifier_event'), + ] + + operations = [ + migrations.AlterField( + model_name='mailnotifier', + name='event', + field=models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), + ), + ] diff --git a/rcamp/projects/migrations/0006_auto_20250304_1801.py b/rcamp/projects/migrations/0006_auto_20250304_1801.py new file mode 100644 index 0000000..7a676b4 --- /dev/null +++ b/rcamp/projects/migrations/0006_auto_20250304_1801.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.28 on 2025-03-05 01:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0005_allocation_expiration_notice_sent'), + ] + + operations = [ + migrations.AlterField( + model_name='allocationrequest', + name='proposal', + field=models.FileField(blank=True, null=True, upload_to='proposals/%Y/%m/%d'), + ), + migrations.AlterField( + model_name='allocationrequest', + name='status', + field=models.CharField(choices=[('a', 'Approved'), ('d', 'Denied'), ('w', 'Waiting'), ('h', 'Hold'), ('r', 'Ready For Review'), ('q', 'Response Requested'), ('i', 'Denied - Insufficient Resources'), ('x', 'Denied - Proposal Incomplete'), ('f', 'Approved - Fully Funded'), ('p', 'Approved - Partially Funded')], default='w', max_length=16), + ), + migrations.AlterField( + model_name='project', + name='organization', + field=models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'AMC')], max_length=128), + ), + ] diff --git a/rcamp/rcamp/settings/databases.py b/rcamp/rcamp/settings/databases.py index e198d67..cf35804 100644 --- a/rcamp/rcamp/settings/databases.py +++ b/rcamp/rcamp/settings/databases.py @@ -29,6 +29,12 @@ 'USER': str(os.environ.get('RCAMP_CSU_LDAP_USER')), 'PASSWORD': str(os.environ.get('RCAMP_CSU_LDAP_PASSWORD')), }, + 'ldapci': { + 'ENGINE': 'ldapdb.backends.ldap', + 'NAME': str(os.environ.get('RCAMP_RC_CI_LDAP_URI')), + 'USER': str(os.environ.get('RCAMP_RC_CI_LDAP_USER')), + 'PASSWORD': str(os.environ.get('RCAMP_RC_CI_LDAP_PASSWORD')), + } } LDAPCONFS = { @@ -61,6 +67,19 @@ 'group_dn': 'ou=eIdentityUsers,dc=ColoState,dc=edu', 'people_dn': 'ou=eIdentityUsers,dc=ColoState,dc=edu', }, + 'ldapci': { + 'server': str(DATABASES['ldapci']['NAME']), + 'bind_dn': str(DATABASES['ldapci']['USER']), + 'bind_pw': str(DATABASES['ldapci']['PASSWORD']), + 'base_dn': 'dc=rc,dc=int,dc=colorado,dc=edu', + 'people_dn': 'ou=people,dc=rc,dc=int,dc=colorado,dc=edu', + 'ucb_dn': 'ou=ucb,ou=people,dc=rc,dc=int,dc=colorado,dc=edu', + 'csu_dn': 'ou=csu,ou=people,dc=rc,dc=int,dc=colorado,dc=edu', + 'xsede_dn': 'ou=xsede,ou=people,dc=rc,dc=int,dc=colorado,dc=edu', + 'amc_dn': 'ou=amc,ou=people,dc=rc,dc=int,dc=colorado,dc=edu', + 'internal_dn': 'ou=internal,ou=people,dc=rc,dc=int,dc=colorado,dc=edu', + 'group_dn': 'ou=groups,dc=rc,dc=int,dc=colorado,dc=edu', + } } DATABASE_ROUTERS = ['lib.router.LdapRouter',] diff --git a/rcamp/rcamp/settings/main.py b/rcamp/rcamp/settings/main.py index 33e6673..77e347f 100644 --- a/rcamp/rcamp/settings/main.py +++ b/rcamp/rcamp/settings/main.py @@ -6,6 +6,7 @@ SECRET_KEY = os.environ.get('RCAMP_SECRET_KEY') +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' hosts = os.environ.get('RCAMP_ALLOWEDHOSTS') ALLOWED_HOSTS = hosts.split(',') @@ -29,6 +30,7 @@ 'mailer', 'accounts', 'projects', + 'comanage', ] if DEBUG: diff --git a/rcamp/rcamp/static/css/custom-admin.css b/rcamp/rcamp/static/css/custom-admin.css new file mode 100644 index 0000000..8c1b68f --- /dev/null +++ b/rcamp/rcamp/static/css/custom-admin.css @@ -0,0 +1,129 @@ +/* Ensuring the custom page inherits basic admin styles */ +@import url('/static/admin/css/widgets.css'); /* Include the admin widgets */ +@import url('/static/admin/css/base.css'); /* Include the base admin styles */ + +/* Custom styling for the search form */ +.search-form { + margin-bottom: 20px; + padding: 10px; + border: 1px solid #ddd; + background-color: #f9f9f9; + border-radius: 8px; + max-width: 600px; /* Adjust the width to your liking */ + margin-left: auto; + margin-right: auto; +} + +.search-form input { + width: 100%; + padding: 10px; + border-radius: 4px; + border: 1px solid #ccc; + font-size: 14px; /* Smaller font for the input */ +} + +.search-form button { + width: 100%; + padding: 10px; + margin-top: 10px; + font-size: 16px; + border-radius: 4px; +} + +/* Optional: Add some spacing around the form */ +.search-form .form-group { + margin-bottom: 15px; +} + +/* Optional: Style for the label */ +.search-form label { + font-weight: bold; +} + +/* Add some spacing between the div and the table */ +div { + padding-bottom: 20px; +} + +/* Style for the button */ +.button { + display: inline-block; + padding: 15px 30px; /* Larger padding for a bigger button */ + font-size: 18px; /* Adjust font size to make it larger */ + background-color: #007bff; /* Blue background color */ + color: white; /* White text */ + text-align: center; + border-radius: 5px; /* Rounded corners */ + text-decoration: none; /* Remove underline */ + transition: background-color 0.3s; /* Smooth hover effect */ +} + +.button:hover { + background-color: #0056b3; /* Darker blue on hover */ +} + +/* Optional: Add some space between the button and other elements */ +.button { + margin-top: 10px; /* Adjust as needed */ +} + +/* Table Styling */ +.table { + width: 100%; + margin-bottom: 1rem; + background-color: transparent; + border: 1px solid #ddd; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #ddd; +} + +.table th { + background-color: #f9f9f9; + font-weight: bold; +} + +.table-bordered { + border: 1px solid #ddd; +} + +.table-striped tbody tr:nth-child(odd) { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover { + background-color: #f1f1f1; +} + +/* Action Links Styling */ +table td a { + color: #007bff; + text-decoration: none; +} + +table td a:hover { + color: #0056b3; + text-decoration: underline; +} + +/* Header Styling */ +h1 { + font-size: 1.75rem; + margin-bottom: 5px; + color: #333; +} + +/* Responsive adjustments */ +@media screen and (max-width: 768px) { + .table th, .table td { + font-size: 0.875rem; + } + + .table td a { + font-size: 0.875rem; + } +} diff --git a/rcamp/rcamp/wsgi.py b/rcamp/rcamp/wsgi.py index 0d88abf..0ad90f1 100644 --- a/rcamp/rcamp/wsgi.py +++ b/rcamp/rcamp/wsgi.py @@ -8,9 +8,18 @@ """ import os +import debugpy +import logging from django.core.wsgi import get_wsgi_application +debugpy.listen(('0.0.0.0', 5678)) # 5678 is the default debug port +logger = logging.getLogger('admin') +logger.info("Debugger is listening on port 5678...") + +# Optionally, you can make the process wait for a debugger to attach +debugpy.wait_for_client() + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rcamp.settings") application = get_wsgi_application() diff --git a/rcamp/templates/admin/accounts/comanageuser/change_form.html b/rcamp/templates/admin/accounts/comanageuser/change_form.html new file mode 100644 index 0000000..fce0415 --- /dev/null +++ b/rcamp/templates/admin/accounts/comanageuser/change_form.html @@ -0,0 +1,23 @@ +{% extends "admin/change_form.html" %} + +{% block content %} +
+

User Change View

+ + +

{{ original.name }}

+

User ID: {{ original.user_id }}

+

Email: {{ original.email }}

+ + + {% if sync_button %} +
+ {% csrf_token %} + +
+ {% endif %} +
+ + {{ block.super }} +{% endblock %} + diff --git a/rcamp/usernames.pkl b/rcamp/usernames.pkl new file mode 100644 index 0000000000000000000000000000000000000000..144ee3901230814c9cfc64e7bef039eb8e8c6fc6 GIT binary patch literal 743591 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≈*KJR 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

7{SXDrW#$c-n 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 #XFB{Q_qb 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

*1*EoYW{}Jz6CCYeJdzx;X9$<6ZI@$ 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 literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt index 15e4af0..f52e438 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,9 +11,11 @@ mock==1.3.0 mockldap==0.2.6 mysqlclient==1.3.13 pbr==1.8.1 +python-dotenv python-dateutil==2.5.3 python-ldap==3.2.0 python-pam==1.8.4 pytz==2020.1 +requests six==1.14.0 uWSGI==2.0.19 From 7dea2331972b84dc8714a5cb8dfff724d558a70d Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Wed, 12 Mar 2025 10:49:53 -0600 Subject: [PATCH 02/10] upgrade to django 4.2 --- Dockerfile | 89 +++---- docker-compose.yml | 3 +- rcamp/accounts/migrations/0001_initial.py | 226 +++++++++++------- .../migrations/0002_auto_20171213_1604.py | 23 -- .../migrations/0003_auto_20180228_1158.py | 50 ---- .../migrations/0004_auto_20250304_1801.py | 77 ------ rcamp/accounts/models.py | 63 +---- rcamp/accounts/urls.py | 14 +- rcamp/endpoints/urls.py | 6 +- rcamp/lib/fields.py | 3 +- rcamp/lib/utils.py | 6 +- rcamp/mailer/migrations/0001_initial.py | 19 +- ...ocation_expiration_mailer_field_choices.py | 19 -- .../migrations/0003_auto_20241014_0912.py | 18 -- .../0004_alter_mailnotifier_event.py | 18 -- .../migrations/0005_auto_20250304_1801.py | 18 -- rcamp/mailer/receivers.py | 41 +--- rcamp/mailer/signals.py | 17 +- rcamp/manage.py | 3 + rcamp/projects/migrations/0001_initial.py | 77 +++--- .../migrations/0002_auto_20180326_1507.py | 24 -- .../migrations/0003_auto_20180326_1508.py | 19 -- .../migrations/0004_auto_20180326_1529.py | 19 -- .../0005_allocation_expiration_notice_sent.py | 19 -- .../migrations/0006_auto_20250304_1801.py | 28 --- rcamp/projects/urls.py | 20 +- rcamp/rcamp/settings/main.py | 1 - rcamp/rcamp/urls.py | 18 +- rcamp/usernames.pkl | Bin 743591 -> 0 bytes requirements.txt | 40 ++-- 30 files changed, 317 insertions(+), 661 deletions(-) delete mode 100644 rcamp/accounts/migrations/0002_auto_20171213_1604.py delete mode 100644 rcamp/accounts/migrations/0003_auto_20180228_1158.py delete mode 100644 rcamp/accounts/migrations/0004_auto_20250304_1801.py delete mode 100644 rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py delete mode 100644 rcamp/mailer/migrations/0003_auto_20241014_0912.py delete mode 100644 rcamp/mailer/migrations/0004_alter_mailnotifier_event.py delete mode 100644 rcamp/mailer/migrations/0005_auto_20250304_1801.py delete mode 100644 rcamp/projects/migrations/0002_auto_20180326_1507.py delete mode 100644 rcamp/projects/migrations/0003_auto_20180326_1508.py delete mode 100644 rcamp/projects/migrations/0004_auto_20180326_1529.py delete mode 100644 rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py delete mode 100644 rcamp/projects/migrations/0006_auto_20250304_1801.py delete mode 100644 rcamp/usernames.pkl diff --git a/Dockerfile b/Dockerfile index 4c1ba37..4e2a882 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,78 +1,81 @@ -FROM quay.io/rockylinux/rockylinux:8 -LABEL maintainer="Adam W Zheng " - -# Define s6 overlay process supervisor version -#ARG S6_OVERLAY_VERSION=3.1.5.0 +# Use Python 3.9 as the base image +FROM python:3.9-slim # Define gosu version ARG GOSU_VERSION=1.16 -# Install dependencies -RUN dnf -y install 'dnf-command(config-manager)' \ - && dnf config-manager --set-enabled powertools \ - && dnf -y install epel-release \ - && dnf -y groupinstall "Development Tools" \ - && dnf -y install xz dpkg which sssd pam_radius sqlite pam-devel python3-devel openssl-devel openldap-devel mysql-devel pcre-devel +# Install system dependencies +RUN apt-get update && apt-get install -y \ + gnupg2 \ + curl \ + lsb-release \ + ca-certificates \ + build-essential \ + libssl-dev \ + libffi-dev \ + libpq-dev \ + libmariadb-dev \ + libmariadb-dev-compat \ + libldap2-dev \ + libsasl2-dev \ + python3-dev \ + python3-pip \ + python3-venv \ + sqlite3 \ + git \ + && rm -rf /var/lib/apt/lists/* # Install gosu to drop user and chown shared volumes at runtime -ADD ["https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64", "/usr/bin/gosu"] -ADD ["https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64.asc", "/tmp/gosu.asc"] -RUN gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /tmp/gosu.asc /usr/bin/gosu -RUN chmod +x /usr/bin/gosu \ - && gosu nobody true - -# Cleanup -RUN dnf -y update && dnf clean all && rm -rf /var/cache/dnf && > /var/log/dnf.log - -# Add s6-overlay process supervisor -#ADD ["https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz", "/tmp"] -#RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz -#ADD ["https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-x86_64.tar.xz", "/tmp"] -#RUN tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz +RUN curl -fsSL https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64 -o /usr/bin/gosu \ + && chmod +x /usr/bin/gosu \ + && gosu nobody true -# Copy s6-supervisor source definition directory into container -#COPY ["etc/s6-overlay/", "/etc/s6-overlay/"] - -# Set Workdir +# Set working directory WORKDIR /opt/rcamp -# Add requirements +# Add requirements and other necessary files ADD ["requirements.txt", "/opt/requirements.txt"] - -# Add uwsgi conf ADD ["uwsgi.ini", "/opt/uwsgi.ini"] - -# Add codebase to container ADD ["rcamp", "/opt/rcamp"] -# From old dockerfile +# Set up virtual environment WORKDIR /opt ENV VIRTUAL_ENV=/opt/rcamp_venv RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" +# Install the dependencies from requirements.txt COPY requirements.txt /opt/ RUN pip install --upgrade pip && \ pip install wheel && \ pip install -r requirements.txt +# fix dep issues +RUN sed -i '/from django.utils import timezone/a from pytz import utc\ntimezone.utc = utc' /opt/rcamp_venv/lib/python3.9/site-packages/ldapdb/models/fields.py +RUN sed -i 's/from django.conf.urls import url/from django.urls import re_path as url/' /opt/rcamp_venv/lib/python3.9/site-packages/grappelli/urls.py + +# Clone and install the django-ldapdb-test-env repository RUN git clone -b python3 https://github.com/ResearchComputing/django-ldapdb-test-env WORKDIR /opt/django-ldapdb-test-env RUN python3 setup.py install WORKDIR /opt/rcamp -#Port Metadata +# Cleanup +RUN apt-get clean && rm -rf /var/lib/apt/lists/* + +# Expose necessary ports EXPOSE 80/tcp EXPOSE 443/tcp -#Simple Healthcheck +# Simple Healthcheck HEALTHCHECK --interval=30s --timeout=30s --start-period=60s --retries=3 CMD curl http://localhost:8000/ || exit 1 -# s6-overlay entrypoint -#ENTRYPOINT ["/init"] - +# Copy entrypoint script COPY ["docker-entrypoint.sh", "/usr/local/bin/"] -ENTRYPOINT ["sh","/usr/local/bin/docker-entrypoint.sh"] -#CMD python3 -m debugpy --listen 0.0.0.0:5678 --wait-for-client manage.py runserver 0.0.0.0:8000 + +# Set entrypoint +ENTRYPOINT ["sh", "/usr/local/bin/docker-entrypoint.sh"] + +# Default command to start the application CMD ["/opt/rcamp_venv/bin/uwsgi", "/opt/uwsgi.ini"] + diff --git a/docker-compose.yml b/docker-compose.yml index b6362cf..915d711 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,6 @@ services: context: . container_name: rcamp-uwsgi command: ["python3", "manage.py", "runserver", "0.0.0.0:8000"] - # command: ["python3", "-m", "debugpy", "--listen", "0.0.0.0:5678", "--wait-for-client", "manage.py", "runserver", "0.0.0.0:8000"] env_file: - dev-environment.env environment: @@ -25,7 +24,7 @@ services: condition: service_healthy database: - image: mysql:5.7 + image: mysql:8.4 container_name: database environment: - MYSQL_ROOT_PASSWORD=password diff --git a/rcamp/accounts/migrations/0001_initial.py b/rcamp/accounts/migrations/0001_initial.py index 0b005ca..ef21882 100644 --- a/rcamp/accounts/migrations/0001_initial.py +++ b/rcamp/accounts/migrations/0001_initial.py @@ -1,30 +1,32 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals +# Generated by Django 2.2.28 on 2025-03-05 03:30 -from django.db import migrations, models import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.db.models.deletion import django.utils.timezone -import django.core.validators import ldapdb.models.fields class Migration(migrations.Migration): + initial = True + dependencies = [ - ('auth', '0006_require_contenttypes_0002'), + ('auth', '0011_update_proxy_permissions'), ] operations = [ migrations.CreateModel( name='CsuLdapUser', fields=[ - ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), - ('first_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'givenName')), - ('last_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'sn')), - ('full_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), - ('email', ldapdb.models.fields.CharField(max_length=200, db_column=b'mail')), - ('username', ldapdb.models.fields.CharField(max_length=200, db_column=b'sAMAccountName')), - ('modified_date', ldapdb.models.fields.DateTimeField(db_column=b'modifytimestamp', blank=True)), + ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), + ('first_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)), + ('last_name', ldapdb.models.fields.CharField(db_column='sn', max_length=200)), + ('full_name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), + ('email', ldapdb.models.fields.CharField(db_column='mail', max_length=200)), + ('username', ldapdb.models.fields.CharField(db_column='sAMAccountName', max_length=200)), + ('modified_date', ldapdb.models.fields.DateTimeField(blank=True, db_column='modifytimestamp')), ], options={ 'managed': False, @@ -33,18 +35,18 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CuLdapUser', fields=[ - ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), - ('first_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'givenName')), - ('last_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'sn')), - ('full_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), - ('email', ldapdb.models.fields.CharField(max_length=200, db_column=b'mail')), - ('username', ldapdb.models.fields.CharField(max_length=200, db_column=b'uid')), - ('modified_date', ldapdb.models.fields.DateTimeField(db_column=b'modifytimestamp', blank=True)), - ('uid', ldapdb.models.fields.IntegerField(unique=True, db_column=b'uidNumber')), - ('edu_affiliation', ldapdb.models.fields.ListField(db_column=b'eduPersonAffiliation')), - ('edu_primary_affiliation', ldapdb.models.fields.CharField(max_length=200, db_column=b'eduPersonPrimaryAffiliation')), - ('cu_primary_major', ldapdb.models.fields.CharField(max_length=200, db_column=b'cuEduPersonPrimaryMajor1')), - ('cu_home_department', ldapdb.models.fields.CharField(max_length=200, db_column=b'cuEduPersonHomeDepartment')), + ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), + ('first_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)), + ('last_name', ldapdb.models.fields.CharField(db_column='sn', max_length=200)), + ('full_name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), + ('email', ldapdb.models.fields.CharField(db_column='mail', max_length=200)), + ('username', ldapdb.models.fields.CharField(db_column='uid', max_length=200)), + ('modified_date', ldapdb.models.fields.DateTimeField(blank=True, db_column='modifytimestamp')), + ('uid', ldapdb.models.fields.IntegerField(db_column='uidNumber', unique=True)), + ('edu_affiliation', ldapdb.models.fields.ListField(db_column='eduPersonAffiliation')), + ('edu_primary_affiliation', ldapdb.models.fields.CharField(db_column='eduPersonPrimaryAffiliation', max_length=200)), + ('cu_primary_major', ldapdb.models.fields.CharField(db_column='cuEduPersonPrimaryMajor1', max_length=200)), + ('cu_home_department', ldapdb.models.fields.CharField(db_column='cuEduPersonHomeDepartment', max_length=200)), ], options={ 'managed': False, @@ -53,101 +55,155 @@ class Migration(migrations.Migration): migrations.CreateModel( name='RcLdapGroup', fields=[ - ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), - ('gid', ldapdb.models.fields.IntegerField(null=True, db_column=b'gidNumber', blank=True)), - ('name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), - ('members', ldapdb.models.fields.ListField(null=True, db_column=b'memberUid', blank=True)), + ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), + ('gid', ldapdb.models.fields.IntegerField(blank=True, db_column='gidNumber', null=True)), + ('name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), + ('members', ldapdb.models.fields.ListField(blank=True, db_column='memberUid', null=True)), ], options={ 'verbose_name': 'LDAP group', - 'managed': False, 'verbose_name_plural': 'LDAP groups', + 'managed': False, }, ), migrations.CreateModel( name='RcLdapUser', fields=[ - ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), - ('first_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'givenName')), - ('last_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'sn')), - ('full_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), - ('email', ldapdb.models.fields.CharField(max_length=200, db_column=b'mail')), - ('username', ldapdb.models.fields.CharField(max_length=200, db_column=b'uid')), - ('modified_date', ldapdb.models.fields.DateTimeField(db_column=b'modifytimestamp', blank=True)), - ('expires', ldapdb.models.fields.IntegerField(null=True, db_column=b'shadowExpire', blank=True)), - ('uid', ldapdb.models.fields.IntegerField(null=True, db_column=b'uidNumber', blank=True)), - ('gid', ldapdb.models.fields.IntegerField(null=True, db_column=b'gidNumber', blank=True)), - ('gecos', ldapdb.models.fields.CharField(default=b'', max_length=200, db_column=b'gecos')), - ('home_directory', ldapdb.models.fields.CharField(max_length=200, db_column=b'homeDirectory')), - ('login_shell', ldapdb.models.fields.CharField(default=b'/bin/bash', max_length=200, db_column=b'loginShell')), - ('role', ldapdb.models.fields.ListField(null=True, db_column=b'curcRole', blank=True)), - ('affiliation', ldapdb.models.fields.ListField(null=True, db_column=b'curcAffiliation', blank=True)), + ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), + ('first_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)), + ('last_name', ldapdb.models.fields.CharField(db_column='sn', max_length=200)), + ('full_name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), + ('email', ldapdb.models.fields.CharField(db_column='mail', max_length=200)), + ('username', ldapdb.models.fields.CharField(db_column='uid', max_length=200)), + ('modified_date', ldapdb.models.fields.DateTimeField(blank=True, db_column='modifytimestamp')), + ('expires', ldapdb.models.fields.IntegerField(blank=True, db_column='shadowExpire', null=True)), + ('uid', ldapdb.models.fields.IntegerField(blank=True, db_column='uidNumber', null=True)), + ('gid', ldapdb.models.fields.IntegerField(blank=True, db_column='gidNumber', null=True)), + ('gecos', ldapdb.models.fields.CharField(db_column='gecos', default='', max_length=200)), + ('home_directory', ldapdb.models.fields.CharField(db_column='homeDirectory', max_length=200)), + ('login_shell', ldapdb.models.fields.CharField(db_column='loginShell', default='/bin/bash', max_length=200)), + ('role', ldapdb.models.fields.ListField(blank=True, db_column='curcRole', null=True)), + ('affiliation', ldapdb.models.fields.ListField(blank=True, db_column='curcAffiliation', null=True)), ], options={ 'verbose_name': 'LDAP user', - 'managed': False, 'verbose_name_plural': 'LDAP users', + 'managed': False, }, ), migrations.CreateModel( - name='User', + name='AccountRequest', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, max_length=30, validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.', 'invalid')], help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username')), - ('first_name', models.CharField(max_length=30, verbose_name='first name', blank=True)), - ('last_name', models.CharField(max_length=30, verbose_name='last name', blank=True)), - ('email', models.EmailField(max_length=254, verbose_name='email address', blank=True)), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Permission', blank=True, help_text='Specific permissions for this user.', verbose_name='user permissions')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('username', models.CharField(max_length=48)), + ('first_name', models.CharField(max_length=128)), + ('last_name', models.CharField(max_length=128)), + ('email', models.EmailField(max_length=254, unique=True)), + ('organization', models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'University of Colorado Denver | Anschutz Medical Campus'), ('ncar', 'NCAR'), ('internal', 'Research Computing - Administrative')], max_length=128)), + ('department', models.CharField(blank=True, max_length=128, null=True)), + ('role', models.CharField(choices=[('undergraduate', 'Undergraduate'), ('graduate', 'Graduate'), ('postdoc', 'Post Doc'), ('instructor', 'Instructor'), ('faculty', 'Faculty'), ('affiliated_faculty', 'Affiliated Faculty'), ('staff', 'Staff'), ('sponsored', 'Sponsored Affiliate')], default='undergraduate', max_length=24)), + ('status', models.CharField(choices=[('p', 'Pending'), ('a', 'Approved'), ('d', 'Denied'), ('i', 'Incomplete')], default='p', max_length=16)), + ('approved_on', models.DateTimeField(blank=True, null=True)), + ('notes', models.TextField(blank=True, null=True)), + ('id_verified_by', models.CharField(blank=True, max_length=128, null=True)), + ('request_date', models.DateTimeField(auto_now_add=True)), + ('login_shell', models.CharField(choices=[('/bin/bash', 'bash'), ('/bin/tcsh', 'tcsh')], default='/bin/bash', max_length=24)), + ('resources_requested', models.CharField(blank=True, max_length=256, null=True)), + ('sponsor_email', models.EmailField(blank=True, max_length=254, null=True)), + ('course_number', models.CharField(blank=True, max_length=128, null=True)), ], options={ - 'abstract': False, - 'verbose_name': 'user', - 'verbose_name_plural': 'users', + 'unique_together': {('username', 'organization')}, }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], ), migrations.CreateModel( - name='AccountRequest', + name='ComanageUser', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('username', models.CharField(unique=True, max_length=48)), - ('first_name', models.CharField(max_length=128)), - ('last_name', models.CharField(max_length=128)), - ('email', models.EmailField(unique=True, max_length=254)), - ('sponsor_email', models.EmailField(max_length=254, null=True, blank=True)), - ('course_number', models.CharField(max_length=128, null=True, blank=True)), - ('login_shell', models.CharField(default=b'/bin/bash', max_length=24, choices=[(b'/bin/bash', b'bash'), (b'/bin/tcsh', b'tcsh')])), - ('resources_requested', models.CharField(max_length=256, null=True, blank=True)), - ('organization', models.CharField(max_length=128, choices=[(b'csu', b'Colorado State University'), (b'xsede', b'XSEDE'), (b'amc', b'AMC'), (b'internal', b'Research Computing - Administrative'), (b'ucb', b'University of Colorado Boulder')])), - ('role', models.CharField(default=b'student', max_length=24, choices=[(b'student', b'Student'), (b'postdoc', b'Post Doc'), (b'faculty', b'Faculty'), (b'staff', b'Staff'), (b'sponsored', b'Sponsored Affiliate')])), - ('status', models.CharField(default=b'p', max_length=16, choices=[(b'p', b'Pending'), (b'a', b'Approved'), (b'd', b'Denied'), (b'i', b'Incomplete')])), - ('approved_on', models.DateTimeField(null=True, blank=True)), - ('notes', models.TextField(null=True, blank=True)), - ('id_verified_by', models.CharField(max_length=128, null=True, blank=True)), - ('request_date', models.DateTimeField(auto_now_add=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user_id', models.CharField(max_length=255, unique=True)), + ('co_person_id', models.CharField(blank=True, max_length=255, null=True, unique=True)), + ('name', models.CharField(max_length=255)), + ('email', models.EmailField(max_length=254)), + ('created_at', models.DateTimeField()), + ('modified', models.DateTimeField()), + ('group_names', models.TextField(blank=True, null=True)), ], + options={ + 'verbose_name': 'Comanage User', + 'verbose_name_plural': 'Comanage Users', + }, ), migrations.CreateModel( name='IdTracker', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('category', models.CharField(unique=True, max_length=12)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('category', models.CharField(max_length=12, unique=True)), ('min_id', models.IntegerField()), ('max_id', models.IntegerField()), - ('next_id', models.IntegerField(null=True, blank=True)), + ('next_id', models.IntegerField(blank=True, null=True)), ], options={ 'verbose_name': 'ID tracker', 'verbose_name_plural': 'ID trackers', }, ), + migrations.CreateModel( + name='Intent', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('reason_summit', models.BooleanField(default=False)), + ('reason_course', models.BooleanField(default=False)), + ('reason_petalibrary', models.BooleanField(default=False)), + ('reason_blanca', models.BooleanField(default=False)), + ('sponsor_email', models.EmailField(blank=True, max_length=254, null=True)), + ('course_instructor_email', models.EmailField(blank=True, max_length=254, null=True)), + ('course_number', models.CharField(blank=True, max_length=128, null=True)), + ('summit_description', models.TextField(blank=True, null=True)), + ('summit_funding', models.TextField(blank=True, null=True)), + ('summit_pi_email', models.EmailField(blank=True, max_length=254, null=True)), + ('account_request', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='accounts.AccountRequest')), + ], + ), + migrations.CreateModel( + name='ComanageGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('group_id', models.CharField(max_length=255, unique=True)), + ('created_at', models.DateTimeField(blank=True, null=True)), + ('modified', models.DateTimeField(blank=True, null=True)), + ('gid', models.IntegerField(unique=True)), + ('members', models.ManyToManyField(blank=True, to='accounts.ComanageUser')), + ], + options={ + 'verbose_name': 'Comanage Group', + 'verbose_name_plural': 'Comanage Groups', + }, + ), + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), ] diff --git a/rcamp/accounts/migrations/0002_auto_20171213_1604.py b/rcamp/accounts/migrations/0002_auto_20171213_1604.py deleted file mode 100644 index 0035508..0000000 --- a/rcamp/accounts/migrations/0002_auto_20171213_1604.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='accountrequest', - name='username', - field=models.CharField(max_length=48), - ), - migrations.AlterUniqueTogether( - name='accountrequest', - unique_together=set([('username', 'organization')]), - ), - ] diff --git a/rcamp/accounts/migrations/0003_auto_20180228_1158.py b/rcamp/accounts/migrations/0003_auto_20180228_1158.py deleted file mode 100644 index 1ccfb85..0000000 --- a/rcamp/accounts/migrations/0003_auto_20180228_1158.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0002_auto_20171213_1604'), - ] - - operations = [ - migrations.CreateModel( - name='Intent', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('reason_summit', models.BooleanField(default=False)), - ('reason_course', models.BooleanField(default=False)), - ('reason_petalibrary', models.BooleanField(default=False)), - ('reason_blanca', models.BooleanField(default=False)), - ('sponsor_email', models.EmailField(max_length=254, null=True, blank=True)), - ('course_instructor_email', models.EmailField(max_length=254, null=True, blank=True)), - ('course_number', models.CharField(max_length=128, null=True, blank=True)), - ('summit_description', models.TextField(null=True, blank=True)), - ('summit_funding', models.TextField(null=True, blank=True)), - ('summit_pi_email', models.EmailField(max_length=254, null=True, blank=True)), - ], - ), - migrations.AddField( - model_name='accountrequest', - name='department', - field=models.CharField(max_length=128, null=True, blank=True), - ), - migrations.AlterField( - model_name='accountrequest', - name='organization', - field=models.CharField(max_length=128, choices=[(b'csu', b'Colorado State University'), (b'xsede', b'XSEDE'), (b'amc', b'AMC'), (b'ncar', b'NCAR'), (b'ucb', b'University of Colorado Boulder'), (b'internal', b'Research Computing - Administrative')]), - ), - migrations.AlterField( - model_name='accountrequest', - name='role', - field=models.CharField(default=b'undergraduate', max_length=24, choices=[(b'undergraduate', b'Undergraduate'), (b'graduate', b'Graduate'), (b'postdoc', b'Post Doc'), (b'instructor', b'Instructor'), (b'faculty', b'Faculty'), (b'affiliated_faculty', b'Affiliated Faculty'), (b'staff', b'Staff'), (b'sponsored', b'Sponsored Affiliate')]), - ), - migrations.AddField( - model_name='intent', - name='account_request', - field=models.OneToOneField(null=True, blank=True, to='accounts.AccountRequest', on_delete=models.CASCADE), - ), - ] diff --git a/rcamp/accounts/migrations/0004_auto_20250304_1801.py b/rcamp/accounts/migrations/0004_auto_20250304_1801.py deleted file mode 100644 index 80ce6c3..0000000 --- a/rcamp/accounts/migrations/0004_auto_20250304_1801.py +++ /dev/null @@ -1,77 +0,0 @@ -# Generated by Django 2.2.28 on 2025-03-05 01:01 - -import django.contrib.auth.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0003_auto_20180228_1158'), - ] - - operations = [ - migrations.CreateModel( - name='ComanageUser', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('user_id', models.CharField(max_length=255, unique=True)), - ('co_person_id', models.CharField(blank=True, max_length=255, null=True, unique=True)), - ('name', models.CharField(max_length=255)), - ('email', models.EmailField(max_length=254)), - ('created_at', models.DateTimeField()), - ('modified', models.DateTimeField()), - ('group_names', models.TextField(blank=True, null=True)), - ], - options={ - 'verbose_name': 'Comanage User', - 'verbose_name_plural': 'Comanage Users', - }, - ), - migrations.AlterField( - model_name='accountrequest', - name='login_shell', - field=models.CharField(choices=[('/bin/bash', 'bash'), ('/bin/tcsh', 'tcsh')], default='/bin/bash', max_length=24), - ), - migrations.AlterField( - model_name='accountrequest', - name='organization', - field=models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'University of Colorado Denver | Anschutz Medical Campus'), ('ncar', 'NCAR'), ('internal', 'Research Computing - Administrative')], max_length=128), - ), - migrations.AlterField( - model_name='accountrequest', - name='role', - field=models.CharField(choices=[('undergraduate', 'Undergraduate'), ('graduate', 'Graduate'), ('postdoc', 'Post Doc'), ('instructor', 'Instructor'), ('faculty', 'Faculty'), ('affiliated_faculty', 'Affiliated Faculty'), ('staff', 'Staff'), ('sponsored', 'Sponsored Affiliate')], default='undergraduate', max_length=24), - ), - migrations.AlterField( - model_name='accountrequest', - name='status', - field=models.CharField(choices=[('p', 'Pending'), ('a', 'Approved'), ('d', 'Denied'), ('i', 'Incomplete')], default='p', max_length=16), - ), - migrations.AlterField( - model_name='user', - name='last_name', - field=models.CharField(blank=True, max_length=150, verbose_name='last name'), - ), - migrations.AlterField( - model_name='user', - name='username', - field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'), - ), - migrations.CreateModel( - name='ComanageGroup', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('group_id', models.CharField(max_length=255, unique=True)), - ('created_at', models.DateTimeField(blank=True, null=True)), - ('modified', models.DateTimeField(blank=True, null=True)), - ('gid', models.IntegerField(unique=True)), - ('members', models.ManyToManyField(blank=True, to='accounts.ComanageUser')), - ], - options={ - 'verbose_name': 'Comanage Group', - 'verbose_name_plural': 'Comanage Groups', - }, - ), - ] diff --git a/rcamp/accounts/models.py b/rcamp/accounts/models.py index 1d47a1b..403d6c2 100644 --- a/rcamp/accounts/models.py +++ b/rcamp/accounts/models.py @@ -4,7 +4,7 @@ from django.views.decorators.debug import sensitive_variables from django.contrib.auth.models import AbstractUser from lib import ldap_utils -from lib.utils import get_user_and_groups, get_comanage_users_by_org, sync_group_to_comanage +from lib.utils import get_user_and_groups, get_comanage_users_by_org, sync_group_to_comanage, get_group_id import ldapdb.models.fields as ldap_fields import ldapdb.models import logging @@ -484,65 +484,6 @@ def save(self,*args,**kwargs): super(RcLdapGroup,self).save(*args,**kwargs) -# class ComanageUser(models.Model): -# class Meta: -# verbose_name = 'Comanage User' -# verbose_name_plural = 'Comanage Users' - -# user_id = models.CharField(max_length=255, unique=True) -# name = models.CharField(max_length=255) -# email = models.EmailField() -# created_at = models.DateTimeField() -# modified = models.DateTimeField() - -# # Add a ManyToManyField for groups -# groups = models.ManyToManyField(ComanageGroup, blank=True) - -# # Fallback to store group names as a comma-separated list -# group_names = models.TextField(blank=True, null=True) - -# def __str__(self): -# return self.name - -# # Method to fetch and update data from Comanage -# @classmethod -# def sync_from_comanage(cls, user_id): -# # Fetch user data and groups from Comanage -# user_data, group_data = get_user_and_groups(user_id) - -# # Get or create the user -# user, created = cls.objects.update_or_create( -# user_id=user_data['user_id'], -# defaults={ -# 'name': user_data['name'], -# 'email': user_data['email'], -# 'created_at': user_data['created_at'], -# 'modified': user_data['modified'] -# } -# ) - -# # Sync the groups -# if group_data: -# # Update or create groups in the Group model -# for group in group_data: -# group_instance, _ = ComanageGroup.objects.get_or_create( -# group_id=group['Id'], -# defaults={ -# 'name': group['Name'], -# 'created': group['Created'], -# 'modified': group['Modified'] -# } -# ) -# user.groups.add(group_instance) - -# # Store group names (optional) -# user.group_names = ', '.join([group['Name'] for group in group_data]) - -# # Save the user after syncing the groups -# user.save() - -# return user - class ComanageUser(models.Model): class Meta: verbose_name = 'Comanage User' @@ -635,6 +576,8 @@ def save(self,*args,**kwargs): self.gid = gid logger = logging.getLogger('accounts') logger.info('Auto-assigned GID to group: {}, {}'.format(gid, self.name)) + if self.group_id is None or self.group_id == '': + self.group_id = get_group_id(self) super(ComanageGroup,self).save(*args,**kwargs) diff --git a/rcamp/accounts/urls.py b/rcamp/accounts/urls.py index 6f3b0a2..cddf5d9 100644 --- a/rcamp/accounts/urls.py +++ b/rcamp/accounts/urls.py @@ -1,5 +1,4 @@ -from django.conf.urls import include, url -from django.urls import path +from django.urls import include, path, re_path from . import admin from accounts.views import ( AccountRequestOrgSelectView, @@ -11,29 +10,28 @@ ) - urlpatterns = [ - url( + re_path( r'^account-request/create/organization$', AccountRequestOrgSelectView.as_view(), name='account-request-org-select' ), - url( + re_path( r'^account-request/create/verify/ucb$', AccountRequestVerifyUcbView.as_view(), name='account-request-verify-ucb' ), - url( + re_path( r'^account-request/create/verify/csu$', AccountRequestVerifyCsuView.as_view(), name='account-request-verify-csu' ), - url( + re_path( r'^account-request/create/intent$', AccountRequestIntentView.as_view(), name='account-request-intent' ), - url( + re_path( r'^account-request/review$', AccountRequestReviewView.as_view(), name='account-request-review' diff --git a/rcamp/endpoints/urls.py b/rcamp/endpoints/urls.py index e623f6e..839c0a1 100644 --- a/rcamp/endpoints/urls.py +++ b/rcamp/endpoints/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, re_path from rest_framework import routers from endpoints.viewsets import AccountRequestList @@ -16,6 +16,6 @@ router.register(r'allocations', AllocationList) urlpatterns = [ - url(r'^', include(router.urls)), - url(r'^auth/',include('rest_framework.urls', namespace='rest_framework')), + re_path(r'^', include(router.urls)), + re_path(r'^auth/',include('rest_framework.urls', namespace='rest_framework')), ] diff --git a/rcamp/lib/fields.py b/rcamp/lib/fields.py index 5ddb373..4ca3375 100644 --- a/rcamp/lib/fields.py +++ b/rcamp/lib/fields.py @@ -1,7 +1,8 @@ from django.db import models from django import forms from django.core.validators import validate_email -from django.utils.translation import ugettext_lazy as _, ungettext_lazy +from django.utils.translation import gettext_lazy as _, ngettext_lazy + import ast diff --git a/rcamp/lib/utils.py b/rcamp/lib/utils.py index 60bf537..b7a4933 100644 --- a/rcamp/lib/utils.py +++ b/rcamp/lib/utils.py @@ -1,4 +1,4 @@ -from comanage.sync_ldap_to_cilogon import get_co_user_and_groups, get_co_users, sync_co_group +from comanage.sync_ldap_to_cilogon import get_co_user_and_groups, get_co_users, sync_co_group, get_co_group_id import logging def get_comanage_users_by_org(org="amc"): @@ -40,4 +40,8 @@ def get_user_and_groups(uid): def sync_group_to_comanage(group): co_group_id = sync_co_group(group) + return co_group_id + +def get_group_id(group): + co_group_id = get_co_group_id(group) return co_group_id \ No newline at end of file diff --git a/rcamp/mailer/migrations/0001_initial.py b/rcamp/mailer/migrations/0001_initial.py index 7699615..b230cfa 100644 --- a/rcamp/mailer/migrations/0001_initial.py +++ b/rcamp/mailer/migrations/0001_initial.py @@ -1,11 +1,12 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals +# Generated by Django 2.2.28 on 2025-03-05 03:31 from django.db import migrations, models class Migration(migrations.Migration): + initial = True + dependencies = [ ] @@ -13,7 +14,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='MailLog', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('date_sent', models.DateTimeField(auto_now_add=True)), ('from_host', models.CharField(max_length=256)), ('recipient_emails', models.CharField(max_length=1024)), @@ -24,13 +25,13 @@ class Migration(migrations.Migration): migrations.CreateModel( name='MailNotifier', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=128)), - ('event', models.CharField(max_length=128, choices=[(b'account_created_from_request', b'account_created_from_request'), (b'account_request_received', b'account_request_received'), (b'allocation_created_from_request', b'allocation_created_from_request'), (b'allocation_request_created_by_user', b'allocation_request_created_by_user'), (b'project_created_by_user', b'project_created_by_user')])), - ('mailto', models.TextField(null=True, blank=True)), - ('cc', models.TextField(null=True, blank=True)), - ('bcc', models.TextField(null=True, blank=True)), - ('from_address', models.EmailField(max_length=254, null=True, blank=True)), + ('event', models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128)), + ('mailto', models.TextField(blank=True, null=True)), + ('cc', models.TextField(blank=True, null=True)), + ('bcc', models.TextField(blank=True, null=True)), + ('from_address', models.EmailField(blank=True, max_length=254, null=True)), ('subject', models.CharField(max_length=256)), ('body', models.TextField()), ], diff --git a/rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py b/rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py deleted file mode 100644 index 5226e5c..0000000 --- a/rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('mailer', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='mailnotifier', - name='event', - field=models.CharField(max_length=128, choices=[(b'account_created_from_request', b'account_created_from_request'), (b'account_request_received', b'account_request_received'), (b'allocation_created_from_request', b'allocation_created_from_request'), (b'allocation_expired', b'allocation_expired'), (b'allocation_expiring', b'allocation_expiring'), (b'allocation_request_created_by_user', b'allocation_request_created_by_user'), (b'project_created_by_user', b'project_created_by_user')]), - ), - ] diff --git a/rcamp/mailer/migrations/0003_auto_20241014_0912.py b/rcamp/mailer/migrations/0003_auto_20241014_0912.py deleted file mode 100644 index 6bc5b26..0000000 --- a/rcamp/mailer/migrations/0003_auto_20241014_0912.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.28 on 2024-10-14 15:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('mailer', '0002_allocation_expiration_mailer_field_choices'), - ] - - operations = [ - migrations.AlterField( - model_name='mailnotifier', - name='event', - field=models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), - ), - ] diff --git a/rcamp/mailer/migrations/0004_alter_mailnotifier_event.py b/rcamp/mailer/migrations/0004_alter_mailnotifier_event.py deleted file mode 100644 index 0db0845..0000000 --- a/rcamp/mailer/migrations/0004_alter_mailnotifier_event.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.25 on 2025-02-17 17:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('mailer', '0003_auto_20241014_0912'), - ] - - operations = [ - migrations.AlterField( - model_name='mailnotifier', - name='event', - field=models.CharField(choices=[('__warningregistry__', '__warningregistry__'), ('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), - ), - ] diff --git a/rcamp/mailer/migrations/0005_auto_20250304_1801.py b/rcamp/mailer/migrations/0005_auto_20250304_1801.py deleted file mode 100644 index c40ca4e..0000000 --- a/rcamp/mailer/migrations/0005_auto_20250304_1801.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.28 on 2025-03-05 01:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('mailer', '0004_alter_mailnotifier_event'), - ] - - operations = [ - migrations.AlterField( - model_name='mailnotifier', - name='event', - field=models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), - ), - ] diff --git a/rcamp/mailer/receivers.py b/rcamp/mailer/receivers.py index e9a1a20..dda95e3 100644 --- a/rcamp/mailer/receivers.py +++ b/rcamp/mailer/receivers.py @@ -4,77 +4,60 @@ @receiver(account_request_received) -def notify_account_request_received(sender, **kwargs): - account_request = kwargs.get('account_request') - +def notify_account_request_received(sender, account_request, **kwargs): notifiers = MailNotifier.objects.filter(event='account_request_received') for notifier in notifiers: ctx = {'account_request':account_request} msg = notifier.send(context=ctx) @receiver(account_request_approved) -def notify_account_request_approved(sender, **kwargs): - account_request = kwargs.get('account_request') - +def notify_account_request_approved(sender, account_request, **kwargs): notifiers = MailNotifier.objects.filter(event='account_request_approved') for notifier in notifiers: ctx = {'account_request':account_request} msg = notifier.send(context=ctx) @receiver(account_created_from_request) -def notify_account_created_from_request(sender, **kwargs): - account = kwargs.get('account') - +def notify_account_created_from_request(sender, account, **kwargs): notifiers = MailNotifier.objects.filter(event='account_created_from_request') for notifier in notifiers: ctx = {'account':account} msg = notifier.send(context=ctx) @receiver(project_created_by_user) -def notify_project_created_by_user(sender, **kwargs): - project = kwargs.get('project') - +def notify_project_created_by_user(sender, project, **kwargs): notifiers = MailNotifier.objects.filter(event='project_created_by_user') for notifier in notifiers: ctx = {'project':project} msg = notifier.send(context=ctx) @receiver(allocation_request_created_by_user) -def notify_allocation_request_created_by_user(sender, **kwargs): - ar = kwargs.get('allocation_request') - requester = kwargs.get('requester') - +def notify_allocation_request_created_by_user(sender, allocation_request, requester, **kwargs): notifiers = MailNotifier.objects.filter(event='allocation_request_created_by_user') for notifier in notifiers: ctx = { - 'allocation_request': ar, + 'allocation_request': allocation_request, 'requester': requester } msg = notifier.send(context=ctx) @receiver(allocation_created_from_request) -def notify_allocation_created_from_request(sender, **kwargs): - alloc = kwargs.get('allocation') - +def notify_allocation_created_from_request(sender, allocation, **kwargs): notifiers = MailNotifier.objects.filter(event='allocation_created_from_request') for notifier in notifiers: - ctx = {'allocation':alloc} + ctx = {'allocation':allocation} msg = notifier.send(context=ctx) @receiver(allocation_expiring) -def notify_allocation_expiring(sender, **kwargs): - alloc = kwargs.get('allocation') - +def notify_allocation_expiring(sender, allocation, **kwargs): notifiers = MailNotifier.objects.filter(event='allocation_expiring') for notifier in notifiers: - ctx = {'allocation':alloc} + ctx = {'allocation':allocation} msg = notifier.send(context=ctx) @receiver(allocation_expired) -def notify_allocation_expired(sender, **kwargs): - alloc = kwargs.get('allocation') - +def notify_allocation_expired(sender, allocation, **kwargs): notifiers = MailNotifier.objects.filter(event='allocation_expired') for notifier in notifiers: - ctx = {'allocation':alloc} + ctx = {'allocation':allocation} msg = notifier.send(context=ctx) diff --git a/rcamp/mailer/signals.py b/rcamp/mailer/signals.py index c6e1570..b84fc86 100644 --- a/rcamp/mailer/signals.py +++ b/rcamp/mailer/signals.py @@ -1,15 +1,14 @@ import django.dispatch +account_request_received = django.dispatch.Signal() +account_request_approved = django.dispatch.Signal() +account_created_from_request = django.dispatch.Signal() -account_request_received = django.dispatch.Signal(providing_args=['account_request']) -account_request_approved = django.dispatch.Signal(providing_args=['account_request']) -account_created_from_request = django.dispatch.Signal(providing_args=['account']) +project_created_by_user = django.dispatch.Signal() -project_created_by_user = django.dispatch.Signal(providing_args=['project']) +allocation_request_created_by_user = django.dispatch.Signal() -allocation_request_created_by_user = django.dispatch.Signal(providing_args=['allocation_request']) +allocation_created_from_request = django.dispatch.Signal() -allocation_created_from_request = django.dispatch.Signal(providing_args=['allocation']) - -allocation_expiring = django.dispatch.Signal(providing_args=['allocation']) -allocation_expired = django.dispatch.Signal(providing_args=['allocation']) +allocation_expiring = django.dispatch.Signal() +allocation_expired = django.dispatch.Signal() diff --git a/rcamp/manage.py b/rcamp/manage.py index f27dc4d..6e7f288 100755 --- a/rcamp/manage.py +++ b/rcamp/manage.py @@ -1,10 +1,13 @@ #!/usr/bin/env python3 import os import sys +import django if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rcamp.settings") from django.core.management import execute_from_command_line + + print("Django version:", django.get_version()) execute_from_command_line(sys.argv) diff --git a/rcamp/projects/migrations/0001_initial.py b/rcamp/projects/migrations/0001_initial.py index ffe98fb..cb7f883 100644 --- a/rcamp/projects/migrations/0001_initial.py +++ b/rcamp/projects/migrations/0001_initial.py @@ -1,13 +1,15 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals +# Generated by Django 2.2.28 on 2025-03-05 03:31 -from django.db import migrations, models from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion import lib.fields class Migration(migrations.Migration): + initial = True + dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] @@ -16,45 +18,28 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Allocation', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('allocation_id', models.SlugField(unique=True, null=True, blank=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('allocation_id', models.SlugField(blank=True, null=True, unique=True)), ('amount', models.BigIntegerField()), ('created_on', models.DateField(auto_now_add=True)), ('start_date', models.DateField()), ('end_date', models.DateField()), - ], - ), - migrations.CreateModel( - name='AllocationRequest', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('abstract', models.TextField()), - ('funding', models.TextField()), - ('proposal', models.FileField(null=True, upload_to=b'proposals/%Y/%m/%d', blank=True)), - ('time_requested', models.BigIntegerField()), - ('amount_awarded', models.BigIntegerField(null=True, blank=True)), - ('disk_space', models.IntegerField(default=0, null=True, blank=True)), - ('software_request', models.TextField(null=True, blank=True)), - ('request_date', models.DateTimeField(auto_now_add=True)), - ('status', models.CharField(default=b'w', max_length=16, choices=[(b'a', b'Approved'), (b'd', b'Denied'), (b'w', b'Waiting'), (b'h', b'Hold'), (b'r', b'Ready For Review'), (b'q', b'Response Requested'), (b'i', b'Denied - Insufficient Resources'), (b'x', b'Denied - Proposal Incomplete'), (b'f', b'Approved - Fully Funded'), (b'p', b'Approved - Partially Funded')])), - ('approved_on', models.DateTimeField(null=True, blank=True)), - ('notes', models.TextField(null=True, blank=True)), - ('allocation', models.ForeignKey(blank=True, to='projects.Allocation', null=True, on_delete=models.CASCADE)), + ('expiration_notice_sent', models.BooleanField(default=False)), ], ), migrations.CreateModel( name='Project', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('pi_emails', lib.fields.ListField()), - ('organization', models.CharField(max_length=128, choices=[(b'ucb', b'University of Colorado Boulder'), (b'csu', b'Colorado State University'), (b'xsede', b'XSEDE')])), + ('organization', models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'AMC')], max_length=128)), ('title', models.CharField(max_length=256)), ('description', models.TextField()), - ('project_id', models.CharField(max_length=24, unique=True, null=True, blank=True)), + ('project_id', models.CharField(blank=True, max_length=24, null=True, unique=True)), ('created_on', models.DateField(auto_now_add=True)), - ('notes', models.TextField(null=True, blank=True)), - ('parent_account', models.CharField(max_length=24, null=True, blank=True)), - ('qos_addenda', models.CharField(max_length=128, null=True, blank=True)), + ('notes', models.TextField(blank=True, null=True)), + ('parent_account', models.CharField(blank=True, max_length=24, null=True)), + ('qos_addenda', models.CharField(blank=True, max_length=128, null=True)), ('deactivated', models.BooleanField(default=False)), ('collaborators', models.ManyToManyField(related_name='collaborator_on', to=settings.AUTH_USER_MODEL)), ('managers', models.ManyToManyField(related_name='manager_on', to=settings.AUTH_USER_MODEL)), @@ -63,26 +48,36 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Reference', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('description', models.TextField()), ('link', models.TextField()), ('created_on', models.DateField(auto_now_add=True)), - ('project', models.ForeignKey(to='projects.Project', on_delete=models.CASCADE)), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project')), ], ), - migrations.AddField( - model_name='allocationrequest', - name='project', - field=models.ForeignKey(to='projects.Project', on_delete=models.CASCADE), - ), - migrations.AddField( - model_name='allocationrequest', - name='requester', - field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE), + migrations.CreateModel( + name='AllocationRequest', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('abstract', models.TextField(blank=True, null=True)), + ('funding', models.TextField(blank=True, null=True)), + ('proposal', models.FileField(blank=True, null=True, upload_to='proposals/%Y/%m/%d')), + ('time_requested', models.BigIntegerField(blank=True, null=True)), + ('amount_awarded', models.BigIntegerField(default=0)), + ('disk_space', models.IntegerField(blank=True, default=0, null=True)), + ('software_request', models.TextField(blank=True, null=True)), + ('request_date', models.DateTimeField(auto_now_add=True)), + ('status', models.CharField(choices=[('a', 'Approved'), ('d', 'Denied'), ('w', 'Waiting'), ('h', 'Hold'), ('r', 'Ready For Review'), ('q', 'Response Requested'), ('i', 'Denied - Insufficient Resources'), ('x', 'Denied - Proposal Incomplete'), ('f', 'Approved - Fully Funded'), ('p', 'Approved - Partially Funded')], default='w', max_length=16)), + ('approved_on', models.DateTimeField(blank=True, null=True)), + ('notes', models.TextField(blank=True, null=True)), + ('allocation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='projects.Allocation')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project')), + ('requester', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], ), migrations.AddField( model_name='allocation', name='project', - field=models.ForeignKey(to='projects.Project', on_delete=models.CASCADE), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project'), ), ] diff --git a/rcamp/projects/migrations/0002_auto_20180326_1507.py b/rcamp/projects/migrations/0002_auto_20180326_1507.py deleted file mode 100644 index 94d298c..0000000 --- a/rcamp/projects/migrations/0002_auto_20180326_1507.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('projects', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='allocationrequest', - name='abstract', - field=models.TextField(null=True, blank=True), - ), - migrations.AlterField( - model_name='allocationrequest', - name='funding', - field=models.TextField(null=True, blank=True), - ), - ] diff --git a/rcamp/projects/migrations/0003_auto_20180326_1508.py b/rcamp/projects/migrations/0003_auto_20180326_1508.py deleted file mode 100644 index 584f471..0000000 --- a/rcamp/projects/migrations/0003_auto_20180326_1508.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('projects', '0002_auto_20180326_1507'), - ] - - operations = [ - migrations.AlterField( - model_name='allocationrequest', - name='time_requested', - field=models.BigIntegerField(null=True, blank=True), - ), - ] diff --git a/rcamp/projects/migrations/0004_auto_20180326_1529.py b/rcamp/projects/migrations/0004_auto_20180326_1529.py deleted file mode 100644 index 6ebbc5d..0000000 --- a/rcamp/projects/migrations/0004_auto_20180326_1529.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('projects', '0003_auto_20180326_1508'), - ] - - operations = [ - migrations.AlterField( - model_name='allocationrequest', - name='amount_awarded', - field=models.BigIntegerField(default=0), - ), - ] diff --git a/rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py b/rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py deleted file mode 100644 index 2058a04..0000000 --- a/rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('projects', '0004_auto_20180326_1529'), - ] - - operations = [ - migrations.AddField( - model_name='allocation', - name='expiration_notice_sent', - field=models.BooleanField(default=False), - ), - ] diff --git a/rcamp/projects/migrations/0006_auto_20250304_1801.py b/rcamp/projects/migrations/0006_auto_20250304_1801.py deleted file mode 100644 index 7a676b4..0000000 --- a/rcamp/projects/migrations/0006_auto_20250304_1801.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.2.28 on 2025-03-05 01:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('projects', '0005_allocation_expiration_notice_sent'), - ] - - operations = [ - migrations.AlterField( - model_name='allocationrequest', - name='proposal', - field=models.FileField(blank=True, null=True, upload_to='proposals/%Y/%m/%d'), - ), - migrations.AlterField( - model_name='allocationrequest', - name='status', - field=models.CharField(choices=[('a', 'Approved'), ('d', 'Denied'), ('w', 'Waiting'), ('h', 'Hold'), ('r', 'Ready For Review'), ('q', 'Response Requested'), ('i', 'Denied - Insufficient Resources'), ('x', 'Denied - Proposal Incomplete'), ('f', 'Approved - Fully Funded'), ('p', 'Approved - Partially Funded')], default='w', max_length=16), - ), - migrations.AlterField( - model_name='project', - name='organization', - field=models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'AMC')], max_length=128), - ), - ] diff --git a/rcamp/projects/urls.py b/rcamp/projects/urls.py index 8dd36f5..02860db 100644 --- a/rcamp/projects/urls.py +++ b/rcamp/projects/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, re_path from django.contrib.auth.decorators import login_required from projects.views import ProjectListView from projects.views import ProjectDetailView @@ -11,13 +11,13 @@ from projects.views import AllocationRequestCreateView urlpatterns = [ - url(r'^list$', login_required(ProjectListView.as_view()), name='project-list'), - url(r'^list/(?P[-\w]+)/$', login_required(ProjectDetailView.as_view()), name='project-detail'), - url(r'^list/(?P[-\w]+)/edit$', login_required(ProjectEditView.as_view()), name='project-edit'), - url(r'^create$', login_required(ProjectCreateView.as_view()), name='project-create'), - url(r'^list/(?P[-\w]+)/references/(?P[-\w]+)/$', login_required(ReferenceDetailView.as_view()), name='reference-detail'), - url(r'^list/(?P[-\w]+)/references/(?P[-\w]+)/edit$', login_required(ReferenceEditView.as_view()), name='reference-edit'), - url(r'^list/(?P[-\w]+)/references/create$', login_required(ReferenceCreateView.as_view()), name='reference-create'), - url(r'^list/(?P[-\w]+)/allocationrequests/(?P[-\w]+)/$', login_required(AllocationRequestDetailView.as_view()), name='allocation-request-detail'), - url(r'^list/(?P[-\w]+)/allocationrequests/create$', login_required(AllocationRequestCreateView.as_view()), name='allocation-request-create'), + re_path(r'^list$', login_required(ProjectListView.as_view()), name='project-list'), + re_path(r'^list/(?P[-\w]+)/$', login_required(ProjectDetailView.as_view()), name='project-detail'), + re_path(r'^list/(?P[-\w]+)/edit$', login_required(ProjectEditView.as_view()), name='project-edit'), + re_path(r'^create$', login_required(ProjectCreateView.as_view()), name='project-create'), + re_path(r'^list/(?P[-\w]+)/references/(?P[-\w]+)/$', login_required(ReferenceDetailView.as_view()), name='reference-detail'), + re_path(r'^list/(?P[-\w]+)/references/(?P[-\w]+)/edit$', login_required(ReferenceEditView.as_view()), name='reference-edit'), + re_path(r'^list/(?P[-\w]+)/references/create$', login_required(ReferenceCreateView.as_view()), name='reference-create'), + re_path(r'^list/(?P[-\w]+)/allocationrequests/(?P[-\w]+)/$', login_required(AllocationRequestDetailView.as_view()), name='allocation-request-detail'), + re_path(r'^list/(?P[-\w]+)/allocationrequests/create$', login_required(AllocationRequestCreateView.as_view()), name='allocation-request-create'), ] diff --git a/rcamp/rcamp/settings/main.py b/rcamp/rcamp/settings/main.py index 77e347f..48f7061 100644 --- a/rcamp/rcamp/settings/main.py +++ b/rcamp/rcamp/settings/main.py @@ -13,7 +13,6 @@ INSTALLED_APPS = [ - 'grappelli', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/rcamp/rcamp/urls.py b/rcamp/rcamp/urls.py index 608ea0c..3fbc24d 100644 --- a/rcamp/rcamp/urls.py +++ b/rcamp/rcamp/urls.py @@ -13,7 +13,7 @@ 1. Add an import: from blog import urls as blog_urls 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) """ -from django.conf.urls import include, url +from django.urls import include, re_path from django.contrib import admin from django.contrib.auth import views as auth_views from django.views.generic import TemplateView @@ -31,14 +31,14 @@ handler500 = 'lib.views.handler500' urlpatterns = [ - url(r'^grappelli/', include('grappelli.urls')), # grappelli URLS - url(r'^$', index_view, name='index'), - url(r'^login', auth_views.LoginView.as_view(template_name='registration/login.html')), - url(r'^logout', auth_views.LogoutView.as_view(template_name='registration/logout.html')), - url(r'^admin/', admin.site.urls), - url(r'^api/', include('endpoints.urls')), - url(r'^accounts/', include(('accounts.urls', 'accounts'), namespace='accounts')), - url(r'^projects/', include(('projects.urls', 'projects'), namespace='projects')), + re_path(r'^grappelli/', include('grappelli.urls')), # grappelli URLS + re_path(r'^$', index_view, name='index'), + re_path(r'^login', auth_views.LoginView.as_view(template_name='registration/login.html')), + re_path(r'^logout', auth_views.LogoutView.as_view(template_name='registration/logout.html')), + re_path(r'^admin/', admin.site.urls), + re_path(r'^api/', include('endpoints.urls')), + re_path(r'^accounts/', include(('accounts.urls', 'accounts'), namespace='accounts')), + re_path(r'^projects/', include(('projects.urls', 'projects'), namespace='projects')), ] diff --git a/rcamp/usernames.pkl b/rcamp/usernames.pkl deleted file mode 100644 index 144ee3901230814c9cfc64e7bef039eb8e8c6fc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743591 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≈*KJR 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

7{SXDrW#$c-n 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 #XFB{Q_qb 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

*1*EoYW{}Jz6CCYeJdzx;X9$<6ZI@$ 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 diff --git a/requirements.txt b/requirements.txt index f52e438..0bac4a6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,21 +1,25 @@ -Django>=2.2,<3 -django-crispy-forms==1.8.1 +debugpy>=1.0,<2.0 +Django>=4.0,<5.0 +django-auth-ldap +django-crispy-forms==1.13.0 +django-utils +django-extensions +django-ldapdb django-easy-pjax==1.2.0 -django-filter==2.2.0 -django-grappelli==2.13.4 -django-material==1.7.1 -djangorestframework==3.10.3 -funcparserlib==0.3.6 +django-filter>=22.1,<23.0 +django-grappelli==4.0.1 +django-material==1.11.3 +djangorestframework>=3.14 funcsigs==0.4 -mock==1.3.0 -mockldap==0.2.6 -mysqlclient==1.3.13 -pbr==1.8.1 -python-dotenv -python-dateutil==2.5.3 -python-ldap==3.2.0 +mock==4.0.3 +mysqlclient==2.1.1 +pbr==5.8.0 +python-dotenv>=0.19.2 +python-dateutil==2.8.2 +python-ldap==3.4.4 python-pam==1.8.4 -pytz==2020.1 -requests -six==1.14.0 -uWSGI==2.0.19 +pytz +requests>=2.26.0 +six==1.16.0 +uWSGI==2.0.20 + From fc976a2876a2d6894331046e98514747761b888b Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Sun, 16 Mar 2025 16:56:31 -0600 Subject: [PATCH 03/10] upgrade complete, tests updated, added discipline field to all account requests --- Dockerfile | 5 +- rcamp/accounts/admin.py | 326 ++++++------------ rcamp/accounts/forms.py | 6 +- rcamp/accounts/models.py | 228 ++++++------ .../templates/account-request-review.html | 4 + .../templates/account-request-verify-csu.html | 22 ++ .../templates/account-request-verify-ucb.html | 21 ++ rcamp/accounts/views.py | 50 +-- rcamp/endpoints/filters.py | 4 + rcamp/endpoints/serializers.py | 1 + rcamp/endpoints/viewsets.py | 11 +- rcamp/lib/fields.py | 2 +- rcamp/lib/ldap_utils.py | 1 - rcamp/lib/utils.py | 84 ++--- rcamp/rcamp/wsgi.py | 11 +- rcamp/tests/test_accounts_forms.py | 10 +- rcamp/tests/test_accounts_models.py | 1 + rcamp/tests/test_accounts_views.py | 3 +- rcamp/tests/test_endpoints.py | 24 +- rcamp/tests/utilities/ldap.py | 1 - rcamp/tests/utilities/utils.py | 4 +- requirements.txt | 35 +- 22 files changed, 416 insertions(+), 438 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4e2a882..8ac7954 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,10 @@ RUN apt-get update && apt-get install -y \ libpq-dev \ libmariadb-dev \ libmariadb-dev-compat \ + default-libmysqlclient-dev \ libldap2-dev \ libsasl2-dev \ + pkg-config \ python3-dev \ python3-pip \ python3-venv \ @@ -55,9 +57,6 @@ RUN sed -i '/from django.utils import timezone/a from pytz import utc\ntimezone. RUN sed -i 's/from django.conf.urls import url/from django.urls import re_path as url/' /opt/rcamp_venv/lib/python3.9/site-packages/grappelli/urls.py # Clone and install the django-ldapdb-test-env repository -RUN git clone -b python3 https://github.com/ResearchComputing/django-ldapdb-test-env -WORKDIR /opt/django-ldapdb-test-env -RUN python3 setup.py install WORKDIR /opt/rcamp # Cleanup diff --git a/rcamp/accounts/admin.py b/rcamp/accounts/admin.py index 225af14..312d123 100644 --- a/rcamp/accounts/admin.py +++ b/rcamp/accounts/admin.py @@ -10,8 +10,6 @@ CuLdapUser, RcLdapGroup, IdTracker, - ComanageUser, - ComanageGroup, AccountRequest, Intent, ORGANIZATIONS @@ -21,7 +19,7 @@ from .forms import ComanageSyncForm from .models import ComanageUser from comanage.lib import UserCO -from lib.utils import get_user_and_groups, get_comanage_users_by_org +# from lib.utils import get_user_and_groups, get_comanage_users_by_org from django.urls import path from django.utils.html import format_html from django.urls import reverse @@ -71,6 +69,7 @@ def approve_requests(modeladmin, request, queryset): 'email', 'role', 'organization', + 'discipline', 'request_date', 'status' ] @@ -218,85 +217,42 @@ class RcLdapGroupAdmin(RcLdapModelAdmin): search_fields = ['name'] form = RcLdapGroupForm -# Custom action to sync users from Comanage -def sync_users_from_comanage(modeladmin, request, queryset): - """ - Sync the selected users from Comanage. - """ - if not queryset: - users = ["kyre0001_amc"] - for user in users: - # try: - # ComanageUser.sync_from_comanage(user.user_id) # Call the sync method on the user - # modeladmin.message_user(request, f"User {user.name} synced successfully!") - # except Exception as e: - # modeladmin.message_user(request, f"Error syncing user {user.name}: {str(e)}", level='debug') - try: - ComanageUser.sync_from_comanage(user) # Call the sync method on the user - modeladmin.message_user(request, f"User {user} synced successfully!") - except Exception as e: - modeladmin.message_user(request, f"Error syncing user {user}: {str(e)}", level='debug') - -# Action to sync users in bulk -def sync_users_from_comanage(modeladmin, request, queryset): - """ - Sync the selected users from Comanage. - """ - if queryset.count() == 0: - modeladmin.message_user(request, "No users selected to sync.", level=messages.WARNING) - return - - for user in queryset: - try: - # Assuming ComanageUser.sync_from_comanage expects user ID - ComanageUser.sync_from_comanage(user.user_id) # Sync logic here - modeladmin.message_user(request, f"User {user.name} synced successfully!", level=messages.SUCCESS) - except Exception as e: - modeladmin.message_user(request, f"Error syncing user {user.name}: {str(e)}", level=messages.ERROR) - -# ComanageUserAdmin with additional customization and sync functionality -class ComanageUserAdmin(admin.ModelAdmin): - list_display = ['user_id', 'name', 'email', 'co_person_id'] - search_fields = ['user_id', 'name', 'email', 'co_person_id'] - readonly_fields = ['user_id', 'name', 'email', 'co_person_id', 'group_names', 'created_at', 'modified'] - actions = [sync_users_from_comanage] - - # Disable the "Add" button in the list view - def has_add_permission(self, request): - return False - - # Disable the delete button for individual objects - def has_delete_permission(self, request, obj=None): - return False - - def changelist_view(self, request, extra_context=None): - """ - Override the changelist view to trigger a function when the list of users is accessed. - """ - # Call your custom function here (e.g., sync users from Comanage) - try: - user = "kyre0001_amc" # Or you can filter users as needed - ComanageUser.sync_from_comanage(user) # Call your sync function here - self.message_user(request, "Users synced successfully!", level=messages.SUCCESS) - except Exception as e: - self.message_user(request, f"Error syncing users: {str(e)}", level=messages.ERROR) - - # Proceed with the normal changelist view rendering - return super().changelist_view(request, extra_context) - - # Override the change_view method to remove the "Save" button and show custom sync button - def change_view(self, request, object_id, form_url='', extra_context=None): - extra_context = extra_context or {} - extra_context['show_save_and_add_another'] = False - extra_context['show_save_and_continue'] = False - extra_context['show_save'] = False - - return super().change_view(request, object_id, form_url, extra_context) +# # Custom action to sync users from Comanage +# def sync_users_from_comanage(modeladmin, request, queryset): +# """ +# Sync the selected users from Comanage. +# """ +# if not queryset: +# users = ["kyre0001_amc", "etda0001", kr] +# for user in users: +# try: +# ComanageUser.sync_from_comanage(user) # Call the sync method on the user +# modeladmin.message_user(request, f"User {user} synced successfully!") +# except Exception as e: +# modeladmin.message_user(request, f"Error syncing user {user}: {str(e)}", level='debug') + +# # Action to sync users in bulk +# def sync_users_from_comanage(modeladmin, request, queryset): +# """ +# Sync the selected users from Comanage. +# """ +# if queryset.count() == 0: +# modeladmin.message_user(request, "No users selected to sync.", level=messages.WARNING) +# return + +# for user in queryset: +# try: +# # Assuming ComanageUser.sync_from_comanage expects user ID +# ComanageUser.sync_from_comanage(user.user_id) # Sync logic here +# modeladmin.message_user(request, f"User {user.name} synced successfully!", level=messages.SUCCESS) +# except Exception as e: +# modeladmin.message_user(request, f"Error syncing user {user.name}: {str(e)}", level=messages.ERROR) +# # ComanageUserAdmin with additional customization and sync functionality # class ComanageUserAdmin(admin.ModelAdmin): # list_display = ['user_id', 'name', 'email', 'co_person_id'] # search_fields = ['user_id', 'name', 'email', 'co_person_id'] -# readonly_fields = ['user_id', 'name', 'email', 'co_person_id', 'group_names', 'created_at', 'modified',] +# readonly_fields = ['user_id', 'name', 'email', 'co_person_id', 'group_names', 'created_at', 'modified'] # actions = [sync_users_from_comanage] # # Disable the "Add" button in the list view @@ -306,179 +262,91 @@ def change_view(self, request, object_id, form_url='', extra_context=None): # # Disable the delete button for individual objects # def has_delete_permission(self, request, obj=None): # return False + +# def changelist_view(self, request, extra_context=None): +# """ +# Override the changelist view to trigger a function when the list of users is accessed. +# """ +# # Call your custom function here (e.g., sync users from Comanage) +# try: +# user = "kyre0001_amc" # Or you can filter users as needed +# ComanageUser.sync_from_comanage(user) # Call your sync function here +# self.message_user(request, "Users synced successfully!", level=messages.SUCCESS) +# except Exception as e: +# self.message_user(request, f"Error syncing users: {str(e)}", level=messages.ERROR) -# # Override the change_view method to remove the "Save" button +# # Proceed with the normal changelist view rendering +# return super().changelist_view(request, extra_context) + +# # Override the change_view method to remove the "Save" button and show custom sync button # def change_view(self, request, object_id, form_url='', extra_context=None): # extra_context = extra_context or {} # extra_context['show_save_and_add_another'] = False # extra_context['show_save_and_continue'] = False # extra_context['show_save'] = False -# return super().change_view(request, object_id, form_url, extra_context) - # Optionally, you can define a custom form (not shown here) - # form = CustomUserForm # Uncomment and define your form if necessary +# return super().change_view(request, object_id, form_url, extra_context) -# class ComanageSyncAdmin(admin.ModelAdmin): -# change_list_template = "comanage_sync_list.html" # Custom template for the changelist page -# list_display = ('user_id', 'name', 'email', 'created_at', 'modified', 'actions') -# search_fields = ['user_id', 'name', 'email'] -# actions = ['custom_action'] +# class ComanageGroupForm(forms.ModelForm): +# def __init__(self, *args, **kwargs): +# super(ComanageGroupForm, self).__init__(*args, **kwargs) +# instance = getattr(self, 'instance', None) +# group_members = None -# def changelist_view(self, request, extra_context=None): -# search_query = request.GET.get('q', '') - -# # Filter user data if there is a search query -# if search_query: -# user_data = ComanageUser.objects.filter( -# Q(user_id__icontains=search_query) | Q(email__icontains=search_query) -# ) +# if instance and instance.pk: +# # If the group instance exists, filter out the members already in the group +# group_members = instance.members.all() +# available_users = ComanageUser.objects.all() # else: -# # Fetch all user data if no search query is provided -# user_data = ComanageUser.objects.all() +# # If this is a new group, show all users +# available_users = ComanageUser.objects.all() -# # Add user data to the context for rendering -# extra_context = extra_context or {} -# extra_context['user_data'] = user_data -# extra_context['search_query'] = search_query # Optional: to display the query in the search bar - -# # Render the custom changelist view with the extra context -# return super().changelist_view(request, extra_context=extra_context) - -# # Define custom URL for detailed group view -# def get_urls(self): -# # Get default admin URLs -# urls = super().get_urls() - -# # Add custom URL for sync users and user detail view -# custom_urls = [ -# path('sync-users/', self.admin_site.admin_view(self.sync_multiple_users), name='comanage-sync-users'), -# path('comanage-sync//view-groups/', self.admin_site.admin_view(self.view_groups), name='comanage-sync-view-groups'), -# path('comanage-sync//', self.admin_site.admin_view(self.comanage_sync_view), name='comanage-sync-user-detail'), +# # Prepare choices for the 'members' field (users not already in the group) +# user_choices = [ +# (user.id, f'{user.name} ({user.user_id})') for user in available_users # ] -# return custom_urls + urls - -# # View to show detailed user info and groups -# def comanage_sync_view(self, request, user_id): -# # Fetch user and group data based on user_id -# user_data, groups = get_user_and_groups(user_id) # You need to implement this function -# # Render the user detail page with user data and groups -# return render(request, 'comanage_sync_detail.html', { -# 'user_data': user_data, -# 'groups': groups, -# }) +# # Set pre-selected members based on the group instance +# self.fields['members'].initial = group_members -# # Function to handle syncing multiple users -# def sync_multiple_users(self, request): -# # Define your list of user_ids to sync +# # Set the required fields +# self.fields['gid'].required = False +# self.fields['members'].required = False -# user_data = get_comanage_users_by_org() - -# # Sync users from Comanage -# for user in user_data: -# ComanageUser.sync_from_comanage(user.cuhpcuid) # Sync method for updating users - -# # Redirect back to the changelist view after sync is complete -# self.message_user(request, "Users have been synced successfully!") -# url = reverse('admin:accounts_comanageuser_changelist') - -# return redirect(url) # Update this URL if necessary - -# # Add actions to your admin class to display a custom button -# def changelist_actions(self, request): -# # Custom button that will trigger the sync function -# return format_html('Sync Users', -# self.admin_site.urls['comanage-sync-users'] +# # Apply the filtered multi-select widget +# self.fields['members'].widget = admin.widgets.FilteredSelectMultiple( +# verbose_name='Members', +# is_stacked=False # ) -# def custom_action(self, obj): -# # Add "View Groups" link for each user -# return format_html('View Groups', -# reverse('admin:comanage-sync-user-detail', args=[obj.user_id]) -# ) - -# def view_groups(self, request, user_id): -# try: -# # Fetch the user based on user_id -# user = ComanageUser.objects.get(user_id=user_id) - -# # Fetch the user's groups, assuming you have a `groups` field or relation in your model -# user_groups = user.groups.all() - -# # Get members of each group (assuming there's a Many-to-Many or ForeignKey relationship with users) -# group_members = {} -# for group in user_groups: -# group_members[group.name] = group.members.all() # Adjust based on your Group model - -# return render(request, 'view_groups.html', { -# 'user': user, -# 'user_groups': user_groups, -# 'group_members': group_members, -# }) - -# except ComanageUser.DoesNotExist: -# raise Http404("User not found") - -class ComanageGroupForm(forms.ModelForm): - def __init__(self, *args, **kwargs): - super(ComanageGroupForm, self).__init__(*args, **kwargs) - instance = getattr(self, 'instance', None) - group_members = None +# # Assign the available choices dynamically +# self.fields['members'].choices = user_choices - if instance and instance.pk: - # If the group instance exists, filter out the members already in the group - group_members = instance.members.all() - available_users = ComanageUser.objects.all() - else: - # If this is a new group, show all users - available_users = ComanageUser.objects.all() +# class Meta: +# model = ComanageGroup +# fields = ['name', 'group_id', 'gid', 'created_at', 'modified', 'members'] - # Prepare choices for the 'members' field (users not already in the group) - user_choices = [ - (user.id, f'{user.name} ({user.user_id})') for user in available_users - ] +# class ComanageGroupAdmin(admin.ModelAdmin): +# list_display = ['name', 'gid', 'get_members'] +# search_fields = ['name', 'group_id', 'gid'] +# readonly_fields = ['group_id', 'created_at', 'modified'] +# form = ComanageGroupForm - # Set pre-selected members based on the group instance - self.fields['members'].initial = group_members +# # Custom method to display group members +# def get_members(self, obj): +# """ +# Custom method to display all members of the group in the admin list view. +# """ +# return ", ".join([user.name for user in obj.members.all()]) - # Set the required fields - self.fields['gid'].required = False - self.fields['members'].required = False +# get_members.short_description = 'Group Members' - # Apply the filtered multi-select widget - self.fields['members'].widget = admin.widgets.FilteredSelectMultiple( - verbose_name='Members', - is_stacked=False - ) - - # Assign the available choices dynamically - self.fields['members'].choices = user_choices +# def get_queryset(self, request): +# queryset = super().get_queryset(request) +# # Optionally, modify the queryset if needed +# return queryset - class Meta: - model = ComanageGroup - fields = ['name', 'group_id', 'gid', 'created_at', 'modified', 'members'] - -class ComanageGroupAdmin(admin.ModelAdmin): - list_display = ['name', 'gid', 'get_members'] - search_fields = ['name', 'group_id', 'gid'] - readonly_fields = ['group_id', 'created_at', 'modified'] - form = ComanageGroupForm - - # Custom method to display group members - def get_members(self, obj): - """ - Custom method to display all members of the group in the admin list view. - """ - return ", ".join([user.name for user in obj.members.all()]) - - get_members.short_description = 'Group Members' - - def get_queryset(self, request): - queryset = super().get_queryset(request) - # Optionally, modify the queryset if needed - return queryset - -admin.site.register(ComanageGroup, ComanageGroupAdmin) -admin.site.register(ComanageUser, ComanageUserAdmin) +# admin.site.register(ComanageGroup, ComanageGroupAdmin) +# admin.site.register(ComanageUser, ComanageUserAdmin) admin.site.register(IdTracker) diff --git a/rcamp/accounts/forms.py b/rcamp/accounts/forms.py index 525bf02..7d0ad52 100644 --- a/rcamp/accounts/forms.py +++ b/rcamp/accounts/forms.py @@ -9,11 +9,10 @@ CsuLdapUser, RcLdapUser, AccountRequest, - REQUEST_ROLES + REQUEST_ROLES, + NSF_DISCIPLINES ) -class ComanageSyncForm(forms.Form): - user_id = forms.CharField(max_length=255) class AccountRequestVerifyForm(forms.Form): """ @@ -27,6 +26,7 @@ class AccountRequestVerifyForm(forms.Form): password = forms.CharField(max_length=255,widget=forms.PasswordInput,required=True) department = forms.CharField(max_length=128,required=True) role = forms.ChoiceField(choices=REQUEST_ROLES,required=True) + discipline = forms.ChoiceField(choices=NSF_DISCIPLINES, required=True) @sensitive_variables('password') def clean(self): diff --git a/rcamp/accounts/models.py b/rcamp/accounts/models.py index 403d6c2..884a450 100644 --- a/rcamp/accounts/models.py +++ b/rcamp/accounts/models.py @@ -1,6 +1,7 @@ from django.db import models from django.conf import settings from django.utils import timezone +from django.core.exceptions import ValidationError from django.views.decorators.debug import sensitive_variables from django.contrib.auth.models import AbstractUser from lib import ldap_utils @@ -30,6 +31,26 @@ ('sponsored','Sponsored Affiliate',), ) +NSF_DISCIPLINES = ( + ('Computer & Information Services', 'Computer & Information Services'), + ('Engineering', 'Engineering'), + ('Geosciences, Atmospheric Sciences & Ocean Sciences', 'Geosciences, Atmospheric Sciences & Ocean Sciences'), + ('Life Sciences', 'Life Sciences'), + ('Mathematics and Statistics', 'Mathematics and Statistics'), + ('Physical Sciences', 'Physical Sciences'), + ('Psychology', 'Psychology'), + ('Social Sciences', 'Social Sciences'), + ('Other Sciences (not elsewhere classified)', 'Other Sciences (not elsewhere classified)'), + ('Education', 'Education'), + ('Law', 'Law'), + ('Humanities', 'Humanities'), + ('Visual & Performing Arts', 'Visual & Performing Arts'), + ('Business Management and Business Administration', 'Business Management and Business Administration'), + ('Communications, Communications Technologies, Journalism (Library Science is considered “Other Non-Science & Engineering Fields”)', 'Communications, Communications Technologies, Journalism (Library Science is considered “Other Non-Science & Engineering Fields”)'), + ('Social Work', 'Social Work'), + ('Other Non-Science & Engineering Fields', 'Other Non-Science & Engineering Fields'), +) + ROLES = REQUEST_ROLES + ( ('pi','Principal Investigator',), ('admin','Admin',), @@ -76,7 +97,7 @@ class Meta: organization = models.CharField(max_length=128,choices=ORGANIZATIONS,blank=False,null=False) department = models.CharField(max_length=128,blank=True,null=True) role = models.CharField(max_length=24,choices=REQUEST_ROLES,default='undergraduate') - + discipline = models.CharField(max_length=256,choices=NSF_DISCIPLINES,blank=True, null=True) status = models.CharField(max_length=16,choices=STATUSES,default='p') approved_on = models.DateTimeField(null=True,blank=True) notes = models.TextField(null=True,blank=True) @@ -107,7 +128,8 @@ def save(self,*args,**kwargs): last_name=self.last_name, email=self.email, organization=self.organization, - role=self.role + role=self.role, + discipline=self.discipline, ) # Create associated auth user auth_user_defaults = dict( @@ -127,6 +149,12 @@ def save(self,*args,**kwargs): super(AccountRequest,self).save(*args,**kwargs) if manually_approved: account_request_approved.send(sender=self.__class__,account_request=self) + + def clean(self): + # Custom validation to make discipline required if organization is 'xsede' + if not self.discipline: + raise ValidationError({'discipline': 'This field is required.'}) + super(AccountRequest, self).clean() class Intent(models.Model): account_request = models.OneToOneField( @@ -178,6 +206,7 @@ def get_next_id(self): class LdapUser(ldapdb.models.Model): class Meta: managed = False + abstract=True rdn_keys = ['username'] @@ -187,7 +216,7 @@ class Meta: full_name = ldap_fields.CharField(db_column='cn') email = ldap_fields.CharField(db_column='mail') # posixAccount - username = ldap_fields.CharField(db_column='uid') + username = ldap_fields.CharField(db_column='uid', primary_key=True) # ldap specific modified_date = ldap_fields.DateTimeField(db_column='modifytimestamp',blank=True) @@ -201,9 +230,6 @@ def save(self,*args,**kwargs): force_insert = kwargs.pop('force_insert',None) super(LdapUser,self).save(*args,**kwargs) - class Meta: - abstract=True - class RcLdapUserManager(models.Manager): def get_user_from_suffixed_username(self,suffixed_username): username, organization = ldap_utils.get_ldap_username_and_org(suffixed_username) @@ -440,7 +466,7 @@ def __init__(self,*args,**kwargs): # posixGroup attributes # gid = ldap_fields.IntegerField(db_column='gidNumber', unique=True) gid = ldap_fields.IntegerField(db_column='gidNumber',null=True,blank=True) - name = ldap_fields.CharField(db_column='cn', max_length=200) + name = ldap_fields.CharField(db_column='cn', max_length=200, primary_key=True) members = ldap_fields.ListField(db_column='memberUid',blank=True,null=True) def __str__(self): @@ -484,102 +510,104 @@ def save(self,*args,**kwargs): super(RcLdapGroup,self).save(*args,**kwargs) -class ComanageUser(models.Model): - class Meta: - verbose_name = 'Comanage User' - verbose_name_plural = 'Comanage Users' +# Uncomment when working on comanage integration again +# class ComanageUser(models.Model): +# class Meta: +# verbose_name = 'Comanage User' +# verbose_name_plural = 'Comanage Users' - user_id = models.CharField(max_length=255, unique=True) - co_person_id = models.CharField(max_length=255, unique=True, blank=True, null=True) - name = models.CharField(max_length=255) - email = models.EmailField() - created_at = models.DateTimeField() - modified = models.DateTimeField() - - # Fallback to store group names as a comma-separated list - group_names = models.TextField(blank=True, null=True) - - def __str__(self): - return self.name - - # Method to fetch and update data from Comanage - @classmethod - def sync_from_comanage(cls, user_id): - # Fetch user data and groups from Comanage - user_data, group_data = get_user_and_groups(user_id) - - # Get or create the user - user, created = cls.objects.update_or_create( - user_id=user_data['user_id'], - defaults={ - 'co_person_id': user_data['co_person_id'], - 'name': user_data['name'], - 'email': user_data['email'], - 'created_at': user_data['created_at'], - 'modified': user_data['modified'] - } - ) +# user_id = models.CharField(max_length=255, unique=True) +# co_person_id = models.CharField(max_length=255, unique=True, blank=True, null=True) +# name = models.CharField(max_length=255) +# email = models.EmailField() +# created_at = models.DateTimeField() +# modified = models.DateTimeField() + +# # Fallback to store group names as a comma-separated list +# group_names = models.TextField(blank=True, null=True) + +# def __str__(self): +# return self.name + +# # Method to fetch and update data from Comanage +# @classmethod +# def sync_from_comanage(cls, user_id): +# # Fetch user data and groups from Comanage +# user_data, group_data = get_user_and_groups(user_id) + +# # Get or create the user +# user, created = cls.objects.update_or_create( +# user_id=user_data['user_id'], +# defaults={ +# 'co_person_id': user_data['co_person_id'], +# 'name': user_data['name'], +# 'email': user_data['email'], +# 'created_at': user_data['created_at'], +# 'modified': user_data['modified'] +# } +# ) - # Sync the groups - if group_data: - group_instances = [] - for group in group_data: - # Create or get the group instance - group_instance, _ = ComanageGroup.objects.get_or_create( - group_id=group['Id'], - defaults={ - 'name': group['Name'], - 'created_at': group['Created'], - 'modified': group['Modified'], - 'gid': int(group['gidNumber']), - } - ) - group_instance.gid = int(group['gidNumber']) - group_instance.created_at = group['Created'] - group_instance.modified = group['Modified'] - group_instance.members.add(user) - group_instance.member_uids = ', '.join([group['Name'] for group in group_data]) - group_instance.save(immutable=True) - group_instances.append(group_instance) - - # You can also store the group names as a comma-separated list - user.group_names = ', '.join([group['Name'] for group in group_data]) - - # Save the user after syncing the groups - user.save() - - return user - -class ComanageGroup(models.Model): - class Meta: - verbose_name = 'Comanage Group' - verbose_name_plural = 'Comanage Groups' - - name = models.CharField(max_length=255) - group_id = models.CharField(max_length=255, unique=True) - created_at = models.DateTimeField(null=True, blank=True) - modified = models.DateTimeField(null=True, blank=True) - members = models.ManyToManyField(ComanageUser, blank=True) - gid = models.IntegerField(unique=True) - - def __str__(self): - return self.name +# # Sync the groups +# if group_data: +# group_instances = [] +# for group in group_data: +# # Create or get the group instance +# group_instance, _ = ComanageGroup.objects.get_or_create( +# group_id=group['Id'], +# defaults={ +# 'name': group['Name'], +# 'created_at': group['Created'], +# 'modified': group['Modified'], +# 'gid': int(group['gidNumber']), +# } +# ) +# group_instance.gid = int(group['gidNumber']) +# group_instance.created_at = group['Created'] +# group_instance.modified = group['Modified'] +# group_instance.members.add(user) +# group_instance.member_uids = ', '.join([group['Name'] for group in group_data]) +# group_instance.save(immutable=True) +# group_instances.append(group_instance) + +# # You can also store the group names as a comma-separated list +# user.group_names = ', '.join([group['Name'] for group in group_data]) + +# # Save the user after syncing the groups +# user.save() + +# return user + +# Uncomment when working on comanage integration again +# class ComanageGroup(models.Model): +# class Meta: +# verbose_name = 'Comanage Group' +# verbose_name_plural = 'Comanage Groups' + +# name = models.CharField(max_length=255) +# group_id = models.CharField(max_length=255, unique=True) +# created_at = models.DateTimeField(null=True, blank=True) +# modified = models.DateTimeField(null=True, blank=True) +# members = models.ManyToManyField(ComanageUser, blank=True) +# gid = models.IntegerField(unique=True) + +# def __str__(self): +# return self.name - def save(self,*args,**kwargs): - immutable = kwargs.pop('immutable', False) - - if not immutable: - # If no GID specified, auto-assign - if self.gid is None: - id_tracker = IdTracker.objects.get(category='posix') - gid = id_tracker.get_next_id() - self.gid = gid - logger = logging.getLogger('accounts') - logger.info('Auto-assigned GID to group: {}, {}'.format(gid, self.name)) - if self.group_id is None or self.group_id == '': - self.group_id = get_group_id(self) - - super(ComanageGroup,self).save(*args,**kwargs) +# def save(self,*args,**kwargs): +# immutable = kwargs.pop('immutable', False) + +# if not immutable: +# # If no GID specified, auto-assign +# if self.gid is None: +# id_tracker = IdTracker.objects.get(category='posix') +# gid = id_tracker.get_next_id() +# self.gid = gid +# logger = logging.getLogger('accounts') +# logger.info('Auto-assigned GID to group: {}, {}'.format(gid, self.name)) +# if self.group_id is None or self.group_id == '': +# self.group_id = get_group_id(self) + +# super(ComanageGroup,self).save(*args,**kwargs) def date_to_sp_expire (date_, epoch=datetime.date(year=1970, day=1, month=1)): return (date_ - epoch).days diff --git a/rcamp/accounts/templates/account-request-review.html b/rcamp/accounts/templates/account-request-review.html index 6a1ae50..2d50b2a 100644 --- a/rcamp/accounts/templates/account-request-review.html +++ b/rcamp/accounts/templates/account-request-review.html @@ -67,6 +67,10 @@

Request Details

Organization {{ account_request.get_organization_display }} + + Discipline + {{ account_request.get_discipline_display }} + {% endblock %} diff --git a/rcamp/accounts/templates/account-request-verify-csu.html b/rcamp/accounts/templates/account-request-verify-csu.html index fb2190d..d26d422 100644 --- a/rcamp/accounts/templates/account-request-verify-csu.html +++ b/rcamp/accounts/templates/account-request-verify-csu.html @@ -122,6 +122,28 @@ {% endif %} + + {% if form.discipline.errors %} +
+ {% else %} +
+ {% endif %} + +
+ + {% if form.discipline.errors %} +
+ + {{ form.discipline.errors }} +
+ {% endif %} +
+
+
diff --git a/rcamp/accounts/templates/account-request-verify-ucb.html b/rcamp/accounts/templates/account-request-verify-ucb.html index 92ce6ea..43cb2c9 100644 --- a/rcamp/accounts/templates/account-request-verify-ucb.html +++ b/rcamp/accounts/templates/account-request-verify-ucb.html @@ -122,6 +122,27 @@ {% endif %}
+ + {% if form.discipline.errors %} +
+ {% else %} +
+ {% endif %} + +
+ + {% if form.discipline.errors %} +
+ + {{ form.discipline.errors }} +
+ {% endif %} +
+
diff --git a/rcamp/accounts/views.py b/rcamp/accounts/views.py index 8067805..906a03d 100644 --- a/rcamp/accounts/views.py +++ b/rcamp/accounts/views.py @@ -8,7 +8,6 @@ Intent, CuLdapUser, CsuLdapUser, - ComanageUser ) from accounts.forms import ( AccountRequestVerifyUcbForm, @@ -21,6 +20,7 @@ ) from django.shortcuts import render, get_object_or_404 + class AccountRequestOrgSelectView(TemplateView): template_name = 'account-request-org-select.html' @@ -51,6 +51,7 @@ def form_valid(self, form): cu_user = CuLdapUser.objects.get(username=username) department = form.cleaned_data.get('department') role = form.cleaned_data.get('role') + discipline = form.cleaned_data.get('discipline') account_request_data = dict( username = cu_user.username, @@ -60,6 +61,7 @@ def form_valid(self, form): department = department, role = role, organization = organization, + discipline = discipline, ) # Auto-approve eligible users @@ -81,6 +83,7 @@ def form_valid(self, form): csu_user = CsuLdapUser.objects.get(username=username) department = form.cleaned_data.get('department') role = form.cleaned_data.get('role') + discipline = form.cleaned_data.get('discipline') account_request_data = dict( username = csu_user.username, @@ -89,7 +92,8 @@ def form_valid(self, form): email = csu_user.email, department = department, role = role, - organization = organization + organization = organization, + discipline = discipline, ) # Auto-approve all CSU users @@ -147,26 +151,26 @@ def get_context_data(self, **kwargs): except AccountRequest.DoesNotExist: raise Http404('Account Request not found.') -# View to display detailed group information -def comanage_user_detail(request, user_id): - user = get_object_or_404(ComanageUser, user_id=user_id) - # Assume get_groups is a function that returns the groups for a user - groups = get_groups(user_id) - return render(request, 'comanage_sync_detail.html', { - 'user_data': user, - 'groups': groups - }) +# # View to display detailed group information +# def comanage_user_detail(request, user_id): +# user = get_object_or_404(ComanageUser, user_id=user_id) +# # Assume get_groups is a function that returns the groups for a user +# groups = get_groups(user_id) +# return render(request, 'comanage_sync_detail.html', { +# 'user_data': user, +# 'groups': groups +# }) -def sync_user_from_comanage(request, user_id): - """ - A custom view to sync user data from Comanage. - """ - try: - user = ComanageUser.objects.get(id=user_id) - user.sync_from_comanage(user_id=user.user_id) # Implement the logic to sync from Comanage - message = "User synced successfully!" - except ComanageUser.DoesNotExist: - message = "User not found." +# def sync_user_from_comanage(request, user_id): +# """ +# A custom view to sync user data from Comanage. +# """ +# try: +# user = ComanageUser.objects.get(id=user_id) +# user.sync_from_comanage(user_id=user.user_id) # Implement the logic to sync from Comanage +# message = "User synced successfully!" +# except ComanageUser.DoesNotExist: +# message = "User not found." - # Redirect back to the change page - return redirect('admin:accounts_comanageuser_change', object_id=user_id) \ No newline at end of file +# # Redirect back to the change page +# return redirect('admin:accounts_comanageuser_change', object_id=user_id) \ No newline at end of file diff --git a/rcamp/endpoints/filters.py b/rcamp/endpoints/filters.py index d4e37ae..f5f6a50 100644 --- a/rcamp/endpoints/filters.py +++ b/rcamp/endpoints/filters.py @@ -1,5 +1,6 @@ import django_filters import rest_framework +import pytz from accounts.models import AccountRequest from projects.models import Project @@ -11,6 +12,8 @@ class AccountRequestFilter(django_filters.rest_framework.FilterSet): max_request_date = django_filters.DateTimeFilter(field_name="request_date", lookup_expr='lte') min_approve_date = django_filters.DateTimeFilter(field_name="approved_on", lookup_expr='gte') max_approve_date = django_filters.DateTimeFilter(field_name="approved_on", lookup_expr='lte') + discipline = django_filters.CharFilter(field_name="discipline", lookup_expr='icontains') + class Meta: model = AccountRequest fields = [ @@ -19,6 +22,7 @@ class Meta: 'last_name', 'email', 'organization', + 'discipline', 'course_number', 'sponsor_email', 'resources_requested', diff --git a/rcamp/endpoints/serializers.py b/rcamp/endpoints/serializers.py index 339cb9a..4cc5b17 100644 --- a/rcamp/endpoints/serializers.py +++ b/rcamp/endpoints/serializers.py @@ -19,6 +19,7 @@ class Meta: 'last_name', 'email', 'organization', + 'discipline', 'course_number', 'sponsor_email', 'resources_requested', diff --git a/rcamp/endpoints/viewsets.py b/rcamp/endpoints/viewsets.py index 3654099..da1a20d 100644 --- a/rcamp/endpoints/viewsets.py +++ b/rcamp/endpoints/viewsets.py @@ -22,14 +22,13 @@ from projects.models import Allocation -# class AccountRequestList(generics.ListAPIView): class AccountRequestList(viewsets.ModelViewSet): queryset = AccountRequest.objects.all() serializer_class = AccountRequestSerializer - filter_backends = (django_filters.rest_framework.DjangoFilterBackend,filters.SearchFilter,) permission_classes = (permissions.IsAuthenticated,) - search_fields = ('username','first_name','last_name','email',) - filter_class = AccountRequestFilter + search_fields = ('username', 'first_name', 'last_name', 'email',) + filter_backends = (django_filters.rest_framework.DjangoFilterBackend, filters.SearchFilter,) + filterset_class = AccountRequestFilter lookup_field = 'username' class ProjectList(viewsets.ModelViewSet): @@ -38,7 +37,7 @@ class ProjectList(viewsets.ModelViewSet): filter_backends = (django_filters.rest_framework.DjangoFilterBackend,filters.SearchFilter,) permission_classes = (permissions.IsAuthenticated,) search_fields = ('project_id','pi_emails') - filter_class = ProjectFilter + filterset_class = ProjectFilter lookup_field = 'project_id' class AllocationList(viewsets.ReadOnlyModelViewSet): @@ -47,5 +46,5 @@ class AllocationList(viewsets.ReadOnlyModelViewSet): filter_backends = (django_filters.rest_framework.DjangoFilterBackend,filters.SearchFilter,) permission_classes = (permissions.IsAuthenticated,) search_fields = ('allocation_id','start_date','end_date','created_on',) - filter_class = AllocationFilter + filterset_class = AllocationFilter lookup_field = 'allocation_id' diff --git a/rcamp/lib/fields.py b/rcamp/lib/fields.py index 4ca3375..23f227a 100644 --- a/rcamp/lib/fields.py +++ b/rcamp/lib/fields.py @@ -14,7 +14,7 @@ def __init__(self, *args, **kwargs): self.delimiter = kwargs.pop('delimiter',',') super(ListField, self).__init__(*args, **kwargs) - def from_db_value(self, value, expression, connection, context): + def from_db_value(self, value, expression, connection, context=None): if not value: return [] else: diff --git a/rcamp/lib/ldap_utils.py b/rcamp/lib/ldap_utils.py index bed1173..cf3e468 100644 --- a/rcamp/lib/ldap_utils.py +++ b/rcamp/lib/ldap_utils.py @@ -1,5 +1,4 @@ from django.conf import settings -from ldapdb import escape_ldap_filter import ldap diff --git a/rcamp/lib/utils.py b/rcamp/lib/utils.py index b7a4933..815105e 100644 --- a/rcamp/lib/utils.py +++ b/rcamp/lib/utils.py @@ -1,47 +1,47 @@ -from comanage.sync_ldap_to_cilogon import get_co_user_and_groups, get_co_users, sync_co_group, get_co_group_id -import logging - -def get_comanage_users_by_org(org="amc"): - users = get_co_users(org) - return users - -def get_comanage_user(user_id): - # This is a placeholder for the actual API call to Comanage - # Replace this with your actual function that fetches data from Comanage - # For example, it could make an HTTP request to a Comanage API or use an SDK. - - # Simulating user data returned from Comanage - user_data = { - 'user_id': user_id, - 'name': f'User {user_id}', - 'email': f'user{user_id}@example.com', - 'role': 'Admin' if int(user_id) % 2 == 0 else 'User', - 'created_at': '2025-02-15T10:00:00' - } - return user_data - -def get_user_and_groups(uid): - """ - Fetch user data from Comanage using the UID. - Replace this with your actual logic for fetching data. - """ - user_data, user_groups = get_co_user_and_groups(uid) - - return user_data, user_groups - -# def get_groups(uid): +# from comanage.sync_ldap_to_cilogon import get_co_user_and_groups, get_co_users, sync_co_group, get_co_group_id +# import logging + +# def get_comanage_users_by_org(org="amc"): +# users = get_co_users(org) +# return users + +# def get_comanage_user(user_id): +# # This is a placeholder for the actual API call to Comanage +# # Replace this with your actual function that fetches data from Comanage +# # For example, it could make an HTTP request to a Comanage API or use an SDK. + +# # Simulating user data returned from Comanage +# user_data = { +# 'user_id': user_id, +# 'name': f'User {user_id}', +# 'email': f'user{user_id}@example.com', +# 'role': 'Admin' if int(user_id) % 2 == 0 else 'User', +# 'created_at': '2025-02-15T10:00:00' +# } +# return user_data + +# def get_user_and_groups(uid): # """ -# Fetch the groups for a given user. -# Replace this with your actual logic to retrieve the user's groups. +# Fetch user data from Comanage using the UID. +# Replace this with your actual logic for fetching data. # """ -# # Example mock data, replace with actual logic -# return [{'name': 'Group A', 'role': 'Member'}, {'name': 'Group B', role: 'Member'}] if uid.endswith('1') else [{'name': 'Group C', 'role': 'Member'}] +# user_data, user_groups = get_co_user_and_groups(uid) +# return user_data, user_groups -def sync_group_to_comanage(group): - co_group_id = sync_co_group(group) - return co_group_id +# # def get_groups(uid): +# # """ +# # Fetch the groups for a given user. +# # Replace this with your actual logic to retrieve the user's groups. +# # """ +# # # Example mock data, replace with actual logic +# # return [{'name': 'Group A', 'role': 'Member'}, {'name': 'Group B', role: 'Member'}] if uid.endswith('1') else [{'name': 'Group C', 'role': 'Member'}] -def get_group_id(group): - co_group_id = get_co_group_id(group) - return co_group_id \ No newline at end of file + +# def sync_group_to_comanage(group): +# co_group_id = sync_co_group(group) +# return co_group_id + +# def get_group_id(group): +# co_group_id = get_co_group_id(group) +# return co_group_id \ No newline at end of file diff --git a/rcamp/rcamp/wsgi.py b/rcamp/rcamp/wsgi.py index 0ad90f1..aca0a59 100644 --- a/rcamp/rcamp/wsgi.py +++ b/rcamp/rcamp/wsgi.py @@ -13,12 +13,13 @@ from django.core.wsgi import get_wsgi_application -debugpy.listen(('0.0.0.0', 5678)) # 5678 is the default debug port -logger = logging.getLogger('admin') -logger.info("Debugger is listening on port 5678...") +# Uncomment for remote debugging in container +# debugpy.listen(('0.0.0.0', 5678)) # 5678 is the default debug port +# logger = logging.getLogger('admin') +# logger.info("Debugger is listening on port 5678...") -# Optionally, you can make the process wait for a debugger to attach -debugpy.wait_for_client() +# # Optionally, you can make the process wait for a debugger to attach +# debugpy.wait_for_client() os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rcamp.settings") diff --git a/rcamp/tests/test_accounts_forms.py b/rcamp/tests/test_accounts_forms.py index e98808e..fba0262 100644 --- a/rcamp/tests/test_accounts_forms.py +++ b/rcamp/tests/test_accounts_forms.py @@ -29,13 +29,15 @@ first_name = 'Test', last_name = 'User', email = 'testuser@test.org', - edu_affiliation = 'faculty' + edu_affiliation = 'faculty', + discipline = 'Social Sciences', ) mock_csu_user_defaults = dict( username = 'testuser', first_name = 'Test', last_name = 'User', email = 'testuser@test.org', + discipline = 'Social Sciences', ) @@ -48,6 +50,7 @@ def test_form_valid(self): 'password': 'testpass', 'role': 'faculty', 'department': 'physics', + 'discipline': 'Social Sciences', } form = AccountRequestVerifyUcbForm(data=form_data) with mock.patch('accounts.models.CuLdapUser.objects.get',return_value=mock_cu_user): @@ -61,6 +64,7 @@ def test_form_invalid_bad_user(self): 'password': 'testpass', 'role': 'faculty', 'department': 'physics', + 'discipline': 'Social Sciences', } form = AccountRequestVerifyUcbForm(data=form_data) with mock.patch('accounts.models.CuLdapUser.objects.get',side_effect=[CuLdapUser.DoesNotExist]): @@ -154,6 +158,7 @@ def test_csu_form_valid(self): 'password': 'testpass', 'role': 'faculty', 'department': 'physics', + 'discipline': 'Social Sciences', } form = AccountRequestVerifyCsuForm(data=form_data) with mock.patch('accounts.models.CsuLdapUser.objects.get',return_value=mock_csu_user): @@ -167,6 +172,7 @@ def test_csu_form_invalid_bad_creds(self): 'password': 'testpass', 'role': 'faculty', 'department': 'physics', + 'discipline': 'Social Sciences', } form = AccountRequestVerifyCsuForm(data=form_data) with mock.patch('accounts.models.CsuLdapUser.objects.get',return_value=mock_csu_user): @@ -184,6 +190,7 @@ def setUp(self): 'last_name': 'user', 'email': 'testuser@test.org', 'login_shell': '/bin/bash', + 'discipline': 'Law', 'status': 'p' } @@ -198,6 +205,7 @@ def test_form_valid_create_approve_request(self): 'role': 'faculty', 'department': 'physics', 'login_shell': '/bin/bash', + 'discipline': 'Law', 'status': 'p' } with mock.patch('accounts.models.CuLdapUser.objects.get',return_value=mock_cu_user): diff --git a/rcamp/tests/test_accounts_models.py b/rcamp/tests/test_accounts_models.py index 5d50c6b..c6607ed 100644 --- a/rcamp/tests/test_accounts_models.py +++ b/rcamp/tests/test_accounts_models.py @@ -168,6 +168,7 @@ def get_account_request_defaults(): email = 'testuser@colorado.edu', role = 'faculty', department = 'physics', + discipline = 'Law', organization = 'ucb' ) return account_request_defaults diff --git a/rcamp/tests/test_accounts_views.py b/rcamp/tests/test_accounts_views.py index f82cf96..f9c763a 100644 --- a/rcamp/tests/test_accounts_views.py +++ b/rcamp/tests/test_accounts_views.py @@ -33,7 +33,8 @@ def get_account_request_verify_defaults(): username = 'testuser', password = 'testpass', role = 'faculty', - department = 'physics' + department = 'physics', + discipline = 'Education', ) return verification_defaults diff --git a/rcamp/tests/test_endpoints.py b/rcamp/tests/test_endpoints.py index f287503..bf8b348 100644 --- a/rcamp/tests/test_endpoints.py +++ b/rcamp/tests/test_endpoints.py @@ -1,5 +1,6 @@ from django.test import TestCase from django.test import override_settings +from django.utils import timezone import pytz import json import datetime @@ -45,6 +46,8 @@ def setUp(self): resources_requested='summit', organization='ucb', role='staff', + discipline='Law', + approved_on=timezone.make_aware(datetime.datetime(2016, 5, 1), timezone=pytz.timezone('America/Denver')), status='p' ) self.ar1 = AccountRequest.objects.create(**ar_dict) @@ -53,11 +56,11 @@ def setUp(self): username='testuser2', email='tu2@tu.org', role='faculty', - approved_on=pytz.timezone('America/Denver').localize(datetime.datetime(2016,4,1)), + approved_on=timezone.make_aware(datetime.datetime(2016, 3, 1), timezone=pytz.timezone('America/Denver')), status='a' )) self.ar2 = AccountRequest.objects.create(**ar_dict) - + del ar_dict['resources_requested'] ar_dict.update(dict( username='testuser3', @@ -65,7 +68,7 @@ def setUp(self): status='a', notes='approved!', id_verified_by='admin', - approved_on=pytz.timezone('America/Denver').localize(datetime.datetime(2016,5,1)), + approved_on=timezone.make_aware(datetime.datetime(2016, 5, 1), timezone=pytz.timezone('America/Denver')) )) self.ar3 = AccountRequest.objects.create(**ar_dict) @@ -82,6 +85,7 @@ def test_ar_list(self): 'last_name': 'user', 'resources_requested': 'summit', 'organization': 'ucb', + 'discipline': 'Law', 'email': 'tu@tu.org', }, { @@ -92,7 +96,8 @@ def test_ar_list(self): 'resources_requested': 'summit', 'organization': 'ucb', 'email': 'tu2@tu.org', - 'approved_on': '2016-04-01T00:00:00Z' + 'discipline': 'Law', + 'approved_on': '2016-03-01T00:00:00Z' }, { 'username': 'testuser3', @@ -102,6 +107,7 @@ def test_ar_list(self): 'resources_requested': None, 'notes': 'approved!', 'organization': 'ucb', + 'discipline': 'Law', 'email': 'tu3@tu.org', } ] @@ -117,6 +123,7 @@ def test_ar_post(self): last_name = 'user', resources_requested = 'summit', organization = 'ucb', + discipline = 'Law', email = 'newtu@tu.org', ) res = self.client.post('/api/accountrequests/', data=post_data) @@ -133,6 +140,7 @@ def test_ar_detail(self): 'last_name': 'user', 'resources_requested': 'summit', 'organization': 'ucb', + 'discipline': 'Law', 'email': 'tu@tu.org', } self.assertDictContainsSubset(expected_content,res_content) @@ -140,7 +148,7 @@ def test_ar_detail(self): def test_ar_filter_dates(self): res = self.client.get( '/api/accountrequests/?min_approve_date={}&max_approve_date={}'.format( - '2016-03-31', + '2016-03-29', '2016-04-01' ) ) @@ -154,7 +162,8 @@ def test_ar_filter_dates(self): 'resources_requested': 'summit', 'organization': 'ucb', 'email': 'tu2@tu.org', - 'approved_on': '2016-04-01T00:00:00Z' + 'discipline': 'Law', + 'approved_on': '2016-03-01T00:00:00Z' } ] res_content = json.loads(res.content) @@ -177,7 +186,8 @@ def test_ar_search(self): 'resources_requested': 'summit', 'organization': 'ucb', 'email': 'tu2@tu.org', - 'approved_on': '2016-04-01T00:00:00Z' + 'discipline': 'Law', + 'approved_on': '2016-03-01T00:00:00Z' } ] res_content = json.loads(res.content) diff --git a/rcamp/tests/utilities/ldap.py b/rcamp/tests/utilities/ldap.py index 39cadfc..65dd945 100644 --- a/rcamp/tests/utilities/ldap.py +++ b/rcamp/tests/utilities/ldap.py @@ -16,7 +16,6 @@ def get_ldap_user_defaults(): last_name = 'User', full_name = 'User, Test', email = 'testuser@colorado.edu', - modified_date=timezone.make_aware(datetime.datetime(2015,11,0o6,0o3,43,24), timezone.get_default_timezone()), uid = 1010, gid = 1010, gecos='Test User,,,', diff --git a/rcamp/tests/utilities/utils.py b/rcamp/tests/utilities/utils.py index 04d21c0..b44e95a 100644 --- a/rcamp/tests/utilities/utils.py +++ b/rcamp/tests/utilities/utils.py @@ -20,10 +20,10 @@ def assert_test_env(): # We can reasonably assume that no production resource will satisfy this criteria, so # this is one of several safeguards against running the functional tests against prod. assert os.environ.get('RCAMP_DEBUG') == 'True' - assert settings.DATABASES['rcldap']['PASSWORD'] == 'password' + assert settings.DATABASES['rcldap']['PASSWORD'] == 'admin' # In an abundance of caution, also make sure that the LDAP and MySQL connections are configured # to use the test services. - assert 'ldap' in settings.DATABASES['rcldap']['NAME'] + assert 'rcamp' in settings.DATABASES['rcldap']['NAME'] assert 'database' in settings.DATABASES['default']['HOST'] # Probably not running against prod backends. return True diff --git a/requirements.txt b/requirements.txt index 0bac4a6..301bcbd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,25 +1,34 @@ -debugpy>=1.0,<2.0 -Django>=4.0,<5.0 -django-auth-ldap +asgiref==3.8.1 +certifi==2025.1.31 +charset-normalizer==3.4.1 +debugpy==1.8.13 +Django==4.2.20 +django-auth-ldap==5.1.0 django-crispy-forms==1.13.0 -django-utils -django-extensions -django-ldapdb django-easy-pjax==1.2.0 -django-filter>=22.1,<23.0 +django-extensions==3.2.3 +django-filter==22.1 django-grappelli==4.0.1 +django-ldapdb @ git+https://github.com/django-ldapdb/django-ldapdb.git@eb9503c85cd230f45765ec8fcd9fc21dbc81ce4c django-material==1.11.3 -djangorestframework>=3.14 +django-mysql==4.16.0 +django-utils==0.0.2 +djangorestframework==3.15.2 funcsigs==0.4 +idna==3.10 mock==4.0.3 -mysqlclient==2.1.1 +mysqlclient==2.2.7 pbr==5.8.0 -python-dotenv>=0.19.2 +pyasn1==0.6.1 +pyasn1_modules==0.4.1 python-dateutil==2.8.2 +python-dotenv==1.0.1 python-ldap==3.4.4 python-pam==1.8.4 -pytz -requests>=2.26.0 +pytz==2025.1 +requests==2.32.3 six==1.16.0 +sqlparse==0.5.3 +typing_extensions==4.12.2 +urllib3==2.3.0 uWSGI==2.0.20 - From cc61890b1d6e46e7624ff969d24ef0102887d938 Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Sun, 16 Mar 2025 17:09:32 -0600 Subject: [PATCH 04/10] Adding endpoint info --- README.md | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/README.md b/README.md index 90de287..213edf1 100644 --- a/README.md +++ b/README.md @@ -53,3 +53,123 @@ Documentation on use of the RCAMP test framework can be found in the RCAMP Wiki ``` $ docker-compose run --rm --entrypoint "python3" rcamp-uwsgi manage.py test ``` + +## API + +If your user has superuser permissions, the endpoints can be used for queries. Here are examples of hitting the account requests endpoint + +```bash +$ curl -u : "http://rcamp2.rc.int.colorado.edu/api/accountrequests/?min_approve_date=2025-03-15&max_approve_date=2025-03-16" +``` +```json +[ + { + "username": "rmaccuser23", + "first_name": "rmacc", + "last_name": "user", + "email": "rmacc23@user.com", + "organization": "xsede", + "discipline": "Visual & Performing Arts", + "course_number": null, + "sponsor_email": null, + "resources_requested": null, + "status": "a", + "approved_on": "2025-03-15T18:14:14Z", + "request_date": "2025-03-15T18:14:14Z", + "notes": "" + } +] +``` + +If I want to request all account requests on 2025-03-14 +```bash +$ curl -u : "http://rcamp2.rc.int.colorado.edu/api/accountrequests/?min_approve_date=2025-03-14&max_approve_date=2025-03-15" +``` +```json +[ + { + "username": "rmaccuser14", + "first_name": "rmacc", + "last_name": "user", + "email": "rmaccuser14@cool.com", + "organization": "xsede", + "discipline": "Hum", + "course_number": null, + "sponsor_email": null, + "resources_requested": null, + "status": "a", + "approved_on": "2025-03-14T11:13:15Z", + "request_date": "2025-03-14T11:13:15Z", + "notes": "" + }, + { + "username": "dahdahdah", + "first_name": "rmacc", + "last_name": "user", + "email": "rmacc255@user.com", + "organization": "xsede", + "discipline": "Law", + "course_number": null, + "sponsor_email": null, + "resources_requested": null, + "status": "a", + "approved_on": "2025-03-14T12:27:11Z", + "request_date": "2025-03-14T12:27:19Z", + "notes": "" + }, + { + "username": "kyre6371", + "first_name": "Kyle", + "last_name": "Reinholt", + "email": "kyle@Colorado.EDU", + "organization": "ucb", + "discipline": "Physical Sciences", + "course_number": null, + "sponsor_email": null, + "resources_requested": null, + "status": "a", + "approved_on": "2025-03-14T12:29:28Z", + "request_date": "2025-03-14T12:29:29Z", + "notes": null + } +] +``` + +If you interested in a specific discipline you can use a substring to get results: +```bash +curl -u : "http://rcamp2.rc.int.colorado.edu/api/accountrequests/?discipline=Visual" +``` +```json +[ + { + "username": "rmaccuser23", + "first_name": "rmacc", + "last_name": "user", + "email": "rmacc23@user.com", + "organization": "xsede", + "discipline": "Visual & Performing Arts", + "course_number": null, + "sponsor_email": null, + "resources_requested": null, + "status": "a", + "approved_on": "2025-03-15T18:14:14Z", + "request_date": "2025-03-15T18:14:14Z", + "notes": "" + }, + { + "username": "rmacc-user67", + "first_name": "rmacc67", + "last_name": "user67", + "email": "rmacc67@user.com", + "organization": "xsede", + "discipline": "Visual & Performing Arts", + "course_number": null, + "sponsor_email": null, + "resources_requested": null, + "status": "a", + "approved_on": "2025-03-16T16:36:00Z", + "request_date": "2025-03-16T16:36:00Z", + "notes": "" + } +] +``` From e4c89b0700a91d9c4ca59213b4b9171d084fe903 Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Sun, 16 Mar 2025 17:14:14 -0600 Subject: [PATCH 05/10] Adding table of contents --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 213edf1..0ff94d9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@ # RCAMP Research Computing Administrative & Management Portal -## Overview and App Structure +# Table of Contents +1. [Overview](#overview) +2. [Installation](#installation) +3. [Tests](#tests) +4. [API](#api) + +## Overview **accounts** - The accounts app contains all code for the creation, review, and approval of account requests. Also contained in this app is all code necessary for managing users and groups. @@ -15,7 +21,7 @@ Research Computing Administrative & Management Portal **rcamp** - The rcamp directory contains site code and, most importantly, settings. -## Setting up your dev environment +## Installation You will need Docker 18.03+ and Compose 1.21+ before you begin. Documentation for Docker can be found here: https://docs.docker.com/install/. Start by cloning RCAMP. @@ -47,7 +53,7 @@ $ docker-compose run --rm --entrypoint "python3" rcamp-uwsgi manage.py createsup ``` The name, password, and email needed by the createsuperuser script can be whatever you like. You should now be able to view the webpage at localhost:8000. -## Writing and Running Tests +## Tests Documentation on use of the RCAMP test framework can be found in the RCAMP Wiki [Test Framework page](https://github.com/ResearchComputing/RCAMP/wiki/Test-Framework). ``` From 297ade7606d8d786890a1d8d81067138c56c409e Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Sun, 16 Mar 2025 17:17:14 -0600 Subject: [PATCH 06/10] Removing my username --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0ff94d9..bc4f780 100644 --- a/README.md +++ b/README.md @@ -124,10 +124,10 @@ $ curl -u : "http://rcamp2.rc.int.colorado.edu/api/accountrequests/? "notes": "" }, { - "username": "kyre6371", - "first_name": "Kyle", - "last_name": "Reinholt", - "email": "kyle@Colorado.EDU", + "username": "rmaccuser", + "first_name": "rmacc", + "last_name": "user", + "email": "rmacc@Colorado.EDU", "organization": "ucb", "discipline": "Physical Sciences", "course_number": null, From 570468a263fbcd4eeeb2998a3efa2de83412374a Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Wed, 2 Apr 2025 08:28:35 -0600 Subject: [PATCH 07/10] minor updates for production --- rcamp/accounts/admin.py | 4 +- rcamp/accounts/migrations/0001_initial.py | 226 +++++++----------- .../migrations/0002_auto_20171213_1604.py | 23 ++ .../migrations/0003_auto_20180228_1158.py | 50 ++++ ...ipline_alter_accountrequest_id_and_more.py | 74 ++++++ rcamp/accounts/models.py | 7 +- rcamp/accounts/urls.py | 4 +- rcamp/mailer/migrations/0001_initial.py | 19 +- ...ocation_expiration_mailer_field_choices.py | 19 ++ ...og_id_alter_mailnotifier_event_and_more.py | 28 +++ rcamp/projects/migrations/0001_initial.py | 77 +++--- .../migrations/0002_auto_20180326_1507.py | 24 ++ .../migrations/0003_auto_20180326_1508.py | 19 ++ .../migrations/0004_auto_20180326_1529.py | 19 ++ .../0005_allocation_expiration_notice_sent.py | 19 ++ ..._id_alter_allocationrequest_id_and_more.py | 48 ++++ 16 files changed, 467 insertions(+), 193 deletions(-) create mode 100644 rcamp/accounts/migrations/0002_auto_20171213_1604.py create mode 100644 rcamp/accounts/migrations/0003_auto_20180228_1158.py create mode 100644 rcamp/accounts/migrations/0004_accountrequest_discipline_alter_accountrequest_id_and_more.py create mode 100644 rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py create mode 100644 rcamp/mailer/migrations/0003_alter_maillog_id_alter_mailnotifier_event_and_more.py create mode 100644 rcamp/projects/migrations/0002_auto_20180326_1507.py create mode 100644 rcamp/projects/migrations/0003_auto_20180326_1508.py create mode 100644 rcamp/projects/migrations/0004_auto_20180326_1529.py create mode 100644 rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py create mode 100644 rcamp/projects/migrations/0006_alter_allocation_id_alter_allocationrequest_id_and_more.py diff --git a/rcamp/accounts/admin.py b/rcamp/accounts/admin.py index 312d123..7cbc76e 100644 --- a/rcamp/accounts/admin.py +++ b/rcamp/accounts/admin.py @@ -16,8 +16,8 @@ ) from django.urls import reverse_lazy from django.shortcuts import render -from .forms import ComanageSyncForm -from .models import ComanageUser +#from .forms import ComanageSyncForm +#from .models import ComanageUser from comanage.lib import UserCO # from lib.utils import get_user_and_groups, get_comanage_users_by_org from django.urls import path diff --git a/rcamp/accounts/migrations/0001_initial.py b/rcamp/accounts/migrations/0001_initial.py index ef21882..0b005ca 100644 --- a/rcamp/accounts/migrations/0001_initial.py +++ b/rcamp/accounts/migrations/0001_initial.py @@ -1,32 +1,30 @@ -# Generated by Django 2.2.28 on 2025-03-05 03:30 +# -*- coding: utf-8 -*- +from __future__ import unicode_literals -import django.contrib.auth.models -import django.contrib.auth.validators from django.db import migrations, models -import django.db.models.deletion +import django.contrib.auth.models import django.utils.timezone +import django.core.validators import ldapdb.models.fields class Migration(migrations.Migration): - initial = True - dependencies = [ - ('auth', '0011_update_proxy_permissions'), + ('auth', '0006_require_contenttypes_0002'), ] operations = [ migrations.CreateModel( name='CsuLdapUser', fields=[ - ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), - ('first_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)), - ('last_name', ldapdb.models.fields.CharField(db_column='sn', max_length=200)), - ('full_name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), - ('email', ldapdb.models.fields.CharField(db_column='mail', max_length=200)), - ('username', ldapdb.models.fields.CharField(db_column='sAMAccountName', max_length=200)), - ('modified_date', ldapdb.models.fields.DateTimeField(blank=True, db_column='modifytimestamp')), + ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), + ('first_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'givenName')), + ('last_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'sn')), + ('full_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), + ('email', ldapdb.models.fields.CharField(max_length=200, db_column=b'mail')), + ('username', ldapdb.models.fields.CharField(max_length=200, db_column=b'sAMAccountName')), + ('modified_date', ldapdb.models.fields.DateTimeField(db_column=b'modifytimestamp', blank=True)), ], options={ 'managed': False, @@ -35,18 +33,18 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CuLdapUser', fields=[ - ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), - ('first_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)), - ('last_name', ldapdb.models.fields.CharField(db_column='sn', max_length=200)), - ('full_name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), - ('email', ldapdb.models.fields.CharField(db_column='mail', max_length=200)), - ('username', ldapdb.models.fields.CharField(db_column='uid', max_length=200)), - ('modified_date', ldapdb.models.fields.DateTimeField(blank=True, db_column='modifytimestamp')), - ('uid', ldapdb.models.fields.IntegerField(db_column='uidNumber', unique=True)), - ('edu_affiliation', ldapdb.models.fields.ListField(db_column='eduPersonAffiliation')), - ('edu_primary_affiliation', ldapdb.models.fields.CharField(db_column='eduPersonPrimaryAffiliation', max_length=200)), - ('cu_primary_major', ldapdb.models.fields.CharField(db_column='cuEduPersonPrimaryMajor1', max_length=200)), - ('cu_home_department', ldapdb.models.fields.CharField(db_column='cuEduPersonHomeDepartment', max_length=200)), + ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), + ('first_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'givenName')), + ('last_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'sn')), + ('full_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), + ('email', ldapdb.models.fields.CharField(max_length=200, db_column=b'mail')), + ('username', ldapdb.models.fields.CharField(max_length=200, db_column=b'uid')), + ('modified_date', ldapdb.models.fields.DateTimeField(db_column=b'modifytimestamp', blank=True)), + ('uid', ldapdb.models.fields.IntegerField(unique=True, db_column=b'uidNumber')), + ('edu_affiliation', ldapdb.models.fields.ListField(db_column=b'eduPersonAffiliation')), + ('edu_primary_affiliation', ldapdb.models.fields.CharField(max_length=200, db_column=b'eduPersonPrimaryAffiliation')), + ('cu_primary_major', ldapdb.models.fields.CharField(max_length=200, db_column=b'cuEduPersonPrimaryMajor1')), + ('cu_home_department', ldapdb.models.fields.CharField(max_length=200, db_column=b'cuEduPersonHomeDepartment')), ], options={ 'managed': False, @@ -55,155 +53,101 @@ class Migration(migrations.Migration): migrations.CreateModel( name='RcLdapGroup', fields=[ - ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), - ('gid', ldapdb.models.fields.IntegerField(blank=True, db_column='gidNumber', null=True)), - ('name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), - ('members', ldapdb.models.fields.ListField(blank=True, db_column='memberUid', null=True)), + ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), + ('gid', ldapdb.models.fields.IntegerField(null=True, db_column=b'gidNumber', blank=True)), + ('name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), + ('members', ldapdb.models.fields.ListField(null=True, db_column=b'memberUid', blank=True)), ], options={ 'verbose_name': 'LDAP group', - 'verbose_name_plural': 'LDAP groups', 'managed': False, + 'verbose_name_plural': 'LDAP groups', }, ), migrations.CreateModel( name='RcLdapUser', fields=[ - ('dn', ldapdb.models.fields.CharField(db_column='dn', max_length=200, primary_key=True, serialize=False)), - ('first_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)), - ('last_name', ldapdb.models.fields.CharField(db_column='sn', max_length=200)), - ('full_name', ldapdb.models.fields.CharField(db_column='cn', max_length=200)), - ('email', ldapdb.models.fields.CharField(db_column='mail', max_length=200)), - ('username', ldapdb.models.fields.CharField(db_column='uid', max_length=200)), - ('modified_date', ldapdb.models.fields.DateTimeField(blank=True, db_column='modifytimestamp')), - ('expires', ldapdb.models.fields.IntegerField(blank=True, db_column='shadowExpire', null=True)), - ('uid', ldapdb.models.fields.IntegerField(blank=True, db_column='uidNumber', null=True)), - ('gid', ldapdb.models.fields.IntegerField(blank=True, db_column='gidNumber', null=True)), - ('gecos', ldapdb.models.fields.CharField(db_column='gecos', default='', max_length=200)), - ('home_directory', ldapdb.models.fields.CharField(db_column='homeDirectory', max_length=200)), - ('login_shell', ldapdb.models.fields.CharField(db_column='loginShell', default='/bin/bash', max_length=200)), - ('role', ldapdb.models.fields.ListField(blank=True, db_column='curcRole', null=True)), - ('affiliation', ldapdb.models.fields.ListField(blank=True, db_column='curcAffiliation', null=True)), + ('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False, primary_key=True, db_column=b'dn')), + ('first_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'givenName')), + ('last_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'sn')), + ('full_name', ldapdb.models.fields.CharField(max_length=200, db_column=b'cn')), + ('email', ldapdb.models.fields.CharField(max_length=200, db_column=b'mail')), + ('username', ldapdb.models.fields.CharField(max_length=200, db_column=b'uid')), + ('modified_date', ldapdb.models.fields.DateTimeField(db_column=b'modifytimestamp', blank=True)), + ('expires', ldapdb.models.fields.IntegerField(null=True, db_column=b'shadowExpire', blank=True)), + ('uid', ldapdb.models.fields.IntegerField(null=True, db_column=b'uidNumber', blank=True)), + ('gid', ldapdb.models.fields.IntegerField(null=True, db_column=b'gidNumber', blank=True)), + ('gecos', ldapdb.models.fields.CharField(default=b'', max_length=200, db_column=b'gecos')), + ('home_directory', ldapdb.models.fields.CharField(max_length=200, db_column=b'homeDirectory')), + ('login_shell', ldapdb.models.fields.CharField(default=b'/bin/bash', max_length=200, db_column=b'loginShell')), + ('role', ldapdb.models.fields.ListField(null=True, db_column=b'curcRole', blank=True)), + ('affiliation', ldapdb.models.fields.ListField(null=True, db_column=b'curcAffiliation', blank=True)), ], options={ 'verbose_name': 'LDAP user', - 'verbose_name_plural': 'LDAP users', 'managed': False, + 'verbose_name_plural': 'LDAP users', }, ), migrations.CreateModel( - name='AccountRequest', + name='User', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('username', models.CharField(max_length=48)), - ('first_name', models.CharField(max_length=128)), - ('last_name', models.CharField(max_length=128)), - ('email', models.EmailField(max_length=254, unique=True)), - ('organization', models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'University of Colorado Denver | Anschutz Medical Campus'), ('ncar', 'NCAR'), ('internal', 'Research Computing - Administrative')], max_length=128)), - ('department', models.CharField(blank=True, max_length=128, null=True)), - ('role', models.CharField(choices=[('undergraduate', 'Undergraduate'), ('graduate', 'Graduate'), ('postdoc', 'Post Doc'), ('instructor', 'Instructor'), ('faculty', 'Faculty'), ('affiliated_faculty', 'Affiliated Faculty'), ('staff', 'Staff'), ('sponsored', 'Sponsored Affiliate')], default='undergraduate', max_length=24)), - ('status', models.CharField(choices=[('p', 'Pending'), ('a', 'Approved'), ('d', 'Denied'), ('i', 'Incomplete')], default='p', max_length=16)), - ('approved_on', models.DateTimeField(blank=True, null=True)), - ('notes', models.TextField(blank=True, null=True)), - ('id_verified_by', models.CharField(blank=True, max_length=128, null=True)), - ('request_date', models.DateTimeField(auto_now_add=True)), - ('login_shell', models.CharField(choices=[('/bin/bash', 'bash'), ('/bin/tcsh', 'tcsh')], default='/bin/bash', max_length=24)), - ('resources_requested', models.CharField(blank=True, max_length=256, null=True)), - ('sponsor_email', models.EmailField(blank=True, max_length=254, null=True)), - ('course_number', models.CharField(blank=True, max_length=128, null=True)), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, max_length=30, validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.', 'invalid')], help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username')), + ('first_name', models.CharField(max_length=30, verbose_name='first name', blank=True)), + ('last_name', models.CharField(max_length=30, verbose_name='last name', blank=True)), + ('email', models.EmailField(max_length=254, verbose_name='email address', blank=True)), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Permission', blank=True, help_text='Specific permissions for this user.', verbose_name='user permissions')), ], options={ - 'unique_together': {('username', 'organization')}, + 'abstract': False, + 'verbose_name': 'user', + 'verbose_name_plural': 'users', }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], ), migrations.CreateModel( - name='ComanageUser', + name='AccountRequest', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('user_id', models.CharField(max_length=255, unique=True)), - ('co_person_id', models.CharField(blank=True, max_length=255, null=True, unique=True)), - ('name', models.CharField(max_length=255)), - ('email', models.EmailField(max_length=254)), - ('created_at', models.DateTimeField()), - ('modified', models.DateTimeField()), - ('group_names', models.TextField(blank=True, null=True)), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('username', models.CharField(unique=True, max_length=48)), + ('first_name', models.CharField(max_length=128)), + ('last_name', models.CharField(max_length=128)), + ('email', models.EmailField(unique=True, max_length=254)), + ('sponsor_email', models.EmailField(max_length=254, null=True, blank=True)), + ('course_number', models.CharField(max_length=128, null=True, blank=True)), + ('login_shell', models.CharField(default=b'/bin/bash', max_length=24, choices=[(b'/bin/bash', b'bash'), (b'/bin/tcsh', b'tcsh')])), + ('resources_requested', models.CharField(max_length=256, null=True, blank=True)), + ('organization', models.CharField(max_length=128, choices=[(b'csu', b'Colorado State University'), (b'xsede', b'XSEDE'), (b'amc', b'AMC'), (b'internal', b'Research Computing - Administrative'), (b'ucb', b'University of Colorado Boulder')])), + ('role', models.CharField(default=b'student', max_length=24, choices=[(b'student', b'Student'), (b'postdoc', b'Post Doc'), (b'faculty', b'Faculty'), (b'staff', b'Staff'), (b'sponsored', b'Sponsored Affiliate')])), + ('status', models.CharField(default=b'p', max_length=16, choices=[(b'p', b'Pending'), (b'a', b'Approved'), (b'd', b'Denied'), (b'i', b'Incomplete')])), + ('approved_on', models.DateTimeField(null=True, blank=True)), + ('notes', models.TextField(null=True, blank=True)), + ('id_verified_by', models.CharField(max_length=128, null=True, blank=True)), + ('request_date', models.DateTimeField(auto_now_add=True)), ], - options={ - 'verbose_name': 'Comanage User', - 'verbose_name_plural': 'Comanage Users', - }, ), migrations.CreateModel( name='IdTracker', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('category', models.CharField(max_length=12, unique=True)), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('category', models.CharField(unique=True, max_length=12)), ('min_id', models.IntegerField()), ('max_id', models.IntegerField()), - ('next_id', models.IntegerField(blank=True, null=True)), + ('next_id', models.IntegerField(null=True, blank=True)), ], options={ 'verbose_name': 'ID tracker', 'verbose_name_plural': 'ID trackers', }, ), - migrations.CreateModel( - name='Intent', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('reason_summit', models.BooleanField(default=False)), - ('reason_course', models.BooleanField(default=False)), - ('reason_petalibrary', models.BooleanField(default=False)), - ('reason_blanca', models.BooleanField(default=False)), - ('sponsor_email', models.EmailField(blank=True, max_length=254, null=True)), - ('course_instructor_email', models.EmailField(blank=True, max_length=254, null=True)), - ('course_number', models.CharField(blank=True, max_length=128, null=True)), - ('summit_description', models.TextField(blank=True, null=True)), - ('summit_funding', models.TextField(blank=True, null=True)), - ('summit_pi_email', models.EmailField(blank=True, max_length=254, null=True)), - ('account_request', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='accounts.AccountRequest')), - ], - ), - migrations.CreateModel( - name='ComanageGroup', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('group_id', models.CharField(max_length=255, unique=True)), - ('created_at', models.DateTimeField(blank=True, null=True)), - ('modified', models.DateTimeField(blank=True, null=True)), - ('gid', models.IntegerField(unique=True)), - ('members', models.ManyToManyField(blank=True, to='accounts.ComanageUser')), - ], - options={ - 'verbose_name': 'Comanage Group', - 'verbose_name_plural': 'Comanage Groups', - }, - ), - migrations.CreateModel( - name='User', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), ] diff --git a/rcamp/accounts/migrations/0002_auto_20171213_1604.py b/rcamp/accounts/migrations/0002_auto_20171213_1604.py new file mode 100644 index 0000000..0035508 --- /dev/null +++ b/rcamp/accounts/migrations/0002_auto_20171213_1604.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='accountrequest', + name='username', + field=models.CharField(max_length=48), + ), + migrations.AlterUniqueTogether( + name='accountrequest', + unique_together=set([('username', 'organization')]), + ), + ] diff --git a/rcamp/accounts/migrations/0003_auto_20180228_1158.py b/rcamp/accounts/migrations/0003_auto_20180228_1158.py new file mode 100644 index 0000000..1ccfb85 --- /dev/null +++ b/rcamp/accounts/migrations/0003_auto_20180228_1158.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0002_auto_20171213_1604'), + ] + + operations = [ + migrations.CreateModel( + name='Intent', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('reason_summit', models.BooleanField(default=False)), + ('reason_course', models.BooleanField(default=False)), + ('reason_petalibrary', models.BooleanField(default=False)), + ('reason_blanca', models.BooleanField(default=False)), + ('sponsor_email', models.EmailField(max_length=254, null=True, blank=True)), + ('course_instructor_email', models.EmailField(max_length=254, null=True, blank=True)), + ('course_number', models.CharField(max_length=128, null=True, blank=True)), + ('summit_description', models.TextField(null=True, blank=True)), + ('summit_funding', models.TextField(null=True, blank=True)), + ('summit_pi_email', models.EmailField(max_length=254, null=True, blank=True)), + ], + ), + migrations.AddField( + model_name='accountrequest', + name='department', + field=models.CharField(max_length=128, null=True, blank=True), + ), + migrations.AlterField( + model_name='accountrequest', + name='organization', + field=models.CharField(max_length=128, choices=[(b'csu', b'Colorado State University'), (b'xsede', b'XSEDE'), (b'amc', b'AMC'), (b'ncar', b'NCAR'), (b'ucb', b'University of Colorado Boulder'), (b'internal', b'Research Computing - Administrative')]), + ), + migrations.AlterField( + model_name='accountrequest', + name='role', + field=models.CharField(default=b'undergraduate', max_length=24, choices=[(b'undergraduate', b'Undergraduate'), (b'graduate', b'Graduate'), (b'postdoc', b'Post Doc'), (b'instructor', b'Instructor'), (b'faculty', b'Faculty'), (b'affiliated_faculty', b'Affiliated Faculty'), (b'staff', b'Staff'), (b'sponsored', b'Sponsored Affiliate')]), + ), + migrations.AddField( + model_name='intent', + name='account_request', + field=models.OneToOneField(null=True, blank=True, to='accounts.AccountRequest', on_delete=models.CASCADE), + ), + ] diff --git a/rcamp/accounts/migrations/0004_accountrequest_discipline_alter_accountrequest_id_and_more.py b/rcamp/accounts/migrations/0004_accountrequest_discipline_alter_accountrequest_id_and_more.py new file mode 100644 index 0000000..3459823 --- /dev/null +++ b/rcamp/accounts/migrations/0004_accountrequest_discipline_alter_accountrequest_id_and_more.py @@ -0,0 +1,74 @@ +# Generated by Django 4.2.20 on 2025-04-02 13:58 + +import django.contrib.auth.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0003_auto_20180228_1158'), + ] + + operations = [ + migrations.AddField( + model_name='accountrequest', + name='discipline', + field=models.CharField(blank=True, choices=[('Computer & Information Services', 'Computer & Information Services'), ('Engineering', 'Engineering'), ('Geosciences, Atmospheric Sciences & Ocean Sciences', 'Geosciences, Atmospheric Sciences & Ocean Sciences'), ('Life Sciences', 'Life Sciences'), ('Mathematics and Statistics', 'Mathematics and Statistics'), ('Physical Sciences', 'Physical Sciences'), ('Psychology', 'Psychology'), ('Social Sciences', 'Social Sciences'), ('Other Sciences (not elsewhere classified)', 'Other Sciences (not elsewhere classified)'), ('Education', 'Education'), ('Law', 'Law'), ('Humanities', 'Humanities'), ('Visual & Performing Arts', 'Visual & Performing Arts'), ('Business Management and Business Administration', 'Business Management and Business Administration'), ('Communications, Communications Technologies, Journalism (Library Science is considered “Other Non-Science & Engineering Fields”)', 'Communications, Communications Technologies, Journalism (Library Science is considered “Other Non-Science & Engineering Fields”)'), ('Social Work', 'Social Work'), ('Other Non-Science & Engineering Fields', 'Other Non-Science & Engineering Fields')], max_length=256, null=True), + ), + migrations.AlterField( + model_name='accountrequest', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='accountrequest', + name='login_shell', + field=models.CharField(choices=[('/bin/bash', 'bash'), ('/bin/tcsh', 'tcsh')], default='/bin/bash', max_length=24), + ), + migrations.AlterField( + model_name='accountrequest', + name='organization', + field=models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'University of Colorado Denver | Anschutz Medical Campus'), ('ncar', 'NCAR'), ('internal', 'Research Computing - Administrative')], max_length=128), + ), + migrations.AlterField( + model_name='accountrequest', + name='role', + field=models.CharField(choices=[('undergraduate', 'Undergraduate'), ('graduate', 'Graduate'), ('postdoc', 'Post Doc'), ('instructor', 'Instructor'), ('faculty', 'Faculty'), ('affiliated_faculty', 'Affiliated Faculty'), ('staff', 'Staff'), ('sponsored', 'Sponsored Affiliate')], default='undergraduate', max_length=24), + ), + migrations.AlterField( + model_name='accountrequest', + name='status', + field=models.CharField(choices=[('p', 'Pending'), ('a', 'Approved'), ('d', 'Denied'), ('i', 'Incomplete')], default='p', max_length=16), + ), + migrations.AlterField( + model_name='idtracker', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='intent', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='user', + name='first_name', + field=models.CharField(blank=True, max_length=150, verbose_name='first name'), + ), + migrations.AlterField( + model_name='user', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='user', + name='last_name', + field=models.CharField(blank=True, max_length=150, verbose_name='last name'), + ), + migrations.AlterField( + model_name='user', + name='username', + field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'), + ), + ] diff --git a/rcamp/accounts/models.py b/rcamp/accounts/models.py index 884a450..b8f8843 100644 --- a/rcamp/accounts/models.py +++ b/rcamp/accounts/models.py @@ -5,7 +5,7 @@ from django.views.decorators.debug import sensitive_variables from django.contrib.auth.models import AbstractUser from lib import ldap_utils -from lib.utils import get_user_and_groups, get_comanage_users_by_org, sync_group_to_comanage, get_group_id +#from lib.utils import get_user_and_groups, get_comanage_users_by_org, sync_group_to_comanage, get_group_id import ldapdb.models.fields as ldap_fields import ldapdb.models import logging @@ -148,7 +148,10 @@ def save(self,*args,**kwargs): super(AccountRequest,self).save(*args,**kwargs) if manually_approved: - account_request_approved.send(sender=self.__class__,account_request=self) + logger = logging.getLogger('accounts') + logger.info('Sending account_request_approved signal') + account_request_approved.send(sender=self.__class__, account_request=self) + logger.info('Signal sent: account_request_approved') def clean(self): # Custom validation to make discipline required if organization is 'xsede' diff --git a/rcamp/accounts/urls.py b/rcamp/accounts/urls.py index cddf5d9..d5d791e 100644 --- a/rcamp/accounts/urls.py +++ b/rcamp/accounts/urls.py @@ -6,7 +6,6 @@ AccountRequestVerifyCsuView, AccountRequestIntentView, AccountRequestReviewView, - sync_user_from_comanage ) @@ -36,5 +35,6 @@ AccountRequestReviewView.as_view(), name='account-request-review' ), - path('admin/accounts/comanageuser//sync/', sync_user_from_comanage, name='accounts_comanageuser_sync'), ] + +# removed path('admin/accounts/comanageuser//sync/', sync_user_from_comanage, name='accounts_comanageuser_sync'), \ No newline at end of file diff --git a/rcamp/mailer/migrations/0001_initial.py b/rcamp/mailer/migrations/0001_initial.py index b230cfa..7699615 100644 --- a/rcamp/mailer/migrations/0001_initial.py +++ b/rcamp/mailer/migrations/0001_initial.py @@ -1,12 +1,11 @@ -# Generated by Django 2.2.28 on 2025-03-05 03:31 +# -*- coding: utf-8 -*- +from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): - initial = True - dependencies = [ ] @@ -14,7 +13,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='MailLog', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('date_sent', models.DateTimeField(auto_now_add=True)), ('from_host', models.CharField(max_length=256)), ('recipient_emails', models.CharField(max_length=1024)), @@ -25,13 +24,13 @@ class Migration(migrations.Migration): migrations.CreateModel( name='MailNotifier', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=128)), - ('event', models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128)), - ('mailto', models.TextField(blank=True, null=True)), - ('cc', models.TextField(blank=True, null=True)), - ('bcc', models.TextField(blank=True, null=True)), - ('from_address', models.EmailField(blank=True, max_length=254, null=True)), + ('event', models.CharField(max_length=128, choices=[(b'account_created_from_request', b'account_created_from_request'), (b'account_request_received', b'account_request_received'), (b'allocation_created_from_request', b'allocation_created_from_request'), (b'allocation_request_created_by_user', b'allocation_request_created_by_user'), (b'project_created_by_user', b'project_created_by_user')])), + ('mailto', models.TextField(null=True, blank=True)), + ('cc', models.TextField(null=True, blank=True)), + ('bcc', models.TextField(null=True, blank=True)), + ('from_address', models.EmailField(max_length=254, null=True, blank=True)), ('subject', models.CharField(max_length=256)), ('body', models.TextField()), ], diff --git a/rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py b/rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py new file mode 100644 index 0000000..5226e5c --- /dev/null +++ b/rcamp/mailer/migrations/0002_allocation_expiration_mailer_field_choices.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailer', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='mailnotifier', + name='event', + field=models.CharField(max_length=128, choices=[(b'account_created_from_request', b'account_created_from_request'), (b'account_request_received', b'account_request_received'), (b'allocation_created_from_request', b'allocation_created_from_request'), (b'allocation_expired', b'allocation_expired'), (b'allocation_expiring', b'allocation_expiring'), (b'allocation_request_created_by_user', b'allocation_request_created_by_user'), (b'project_created_by_user', b'project_created_by_user')]), + ), + ] diff --git a/rcamp/mailer/migrations/0003_alter_maillog_id_alter_mailnotifier_event_and_more.py b/rcamp/mailer/migrations/0003_alter_maillog_id_alter_mailnotifier_event_and_more.py new file mode 100644 index 0000000..515f851 --- /dev/null +++ b/rcamp/mailer/migrations/0003_alter_maillog_id_alter_mailnotifier_event_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.20 on 2025-04-02 13:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailer', '0002_allocation_expiration_mailer_field_choices'), + ] + + operations = [ + migrations.AlterField( + model_name='maillog', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='mailnotifier', + name='event', + field=models.CharField(choices=[('account_created_from_request', 'account_created_from_request'), ('account_request_approved', 'account_request_approved'), ('account_request_received', 'account_request_received'), ('allocation_created_from_request', 'allocation_created_from_request'), ('allocation_expired', 'allocation_expired'), ('allocation_expiring', 'allocation_expiring'), ('allocation_request_created_by_user', 'allocation_request_created_by_user'), ('project_created_by_user', 'project_created_by_user')], max_length=128), + ), + migrations.AlterField( + model_name='mailnotifier', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/rcamp/projects/migrations/0001_initial.py b/rcamp/projects/migrations/0001_initial.py index cb7f883..ffe98fb 100644 --- a/rcamp/projects/migrations/0001_initial.py +++ b/rcamp/projects/migrations/0001_initial.py @@ -1,15 +1,13 @@ -# Generated by Django 2.2.28 on 2025-03-05 03:31 +# -*- coding: utf-8 -*- +from __future__ import unicode_literals -from django.conf import settings from django.db import migrations, models -import django.db.models.deletion +from django.conf import settings import lib.fields class Migration(migrations.Migration): - initial = True - dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] @@ -18,28 +16,45 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Allocation', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('allocation_id', models.SlugField(blank=True, null=True, unique=True)), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('allocation_id', models.SlugField(unique=True, null=True, blank=True)), ('amount', models.BigIntegerField()), ('created_on', models.DateField(auto_now_add=True)), ('start_date', models.DateField()), ('end_date', models.DateField()), - ('expiration_notice_sent', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='AllocationRequest', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('abstract', models.TextField()), + ('funding', models.TextField()), + ('proposal', models.FileField(null=True, upload_to=b'proposals/%Y/%m/%d', blank=True)), + ('time_requested', models.BigIntegerField()), + ('amount_awarded', models.BigIntegerField(null=True, blank=True)), + ('disk_space', models.IntegerField(default=0, null=True, blank=True)), + ('software_request', models.TextField(null=True, blank=True)), + ('request_date', models.DateTimeField(auto_now_add=True)), + ('status', models.CharField(default=b'w', max_length=16, choices=[(b'a', b'Approved'), (b'd', b'Denied'), (b'w', b'Waiting'), (b'h', b'Hold'), (b'r', b'Ready For Review'), (b'q', b'Response Requested'), (b'i', b'Denied - Insufficient Resources'), (b'x', b'Denied - Proposal Incomplete'), (b'f', b'Approved - Fully Funded'), (b'p', b'Approved - Partially Funded')])), + ('approved_on', models.DateTimeField(null=True, blank=True)), + ('notes', models.TextField(null=True, blank=True)), + ('allocation', models.ForeignKey(blank=True, to='projects.Allocation', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( name='Project', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('pi_emails', lib.fields.ListField()), - ('organization', models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'AMC')], max_length=128)), + ('organization', models.CharField(max_length=128, choices=[(b'ucb', b'University of Colorado Boulder'), (b'csu', b'Colorado State University'), (b'xsede', b'XSEDE')])), ('title', models.CharField(max_length=256)), ('description', models.TextField()), - ('project_id', models.CharField(blank=True, max_length=24, null=True, unique=True)), + ('project_id', models.CharField(max_length=24, unique=True, null=True, blank=True)), ('created_on', models.DateField(auto_now_add=True)), - ('notes', models.TextField(blank=True, null=True)), - ('parent_account', models.CharField(blank=True, max_length=24, null=True)), - ('qos_addenda', models.CharField(blank=True, max_length=128, null=True)), + ('notes', models.TextField(null=True, blank=True)), + ('parent_account', models.CharField(max_length=24, null=True, blank=True)), + ('qos_addenda', models.CharField(max_length=128, null=True, blank=True)), ('deactivated', models.BooleanField(default=False)), ('collaborators', models.ManyToManyField(related_name='collaborator_on', to=settings.AUTH_USER_MODEL)), ('managers', models.ManyToManyField(related_name='manager_on', to=settings.AUTH_USER_MODEL)), @@ -48,36 +63,26 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Reference', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('description', models.TextField()), ('link', models.TextField()), ('created_on', models.DateField(auto_now_add=True)), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project')), + ('project', models.ForeignKey(to='projects.Project', on_delete=models.CASCADE)), ], ), - migrations.CreateModel( - name='AllocationRequest', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('abstract', models.TextField(blank=True, null=True)), - ('funding', models.TextField(blank=True, null=True)), - ('proposal', models.FileField(blank=True, null=True, upload_to='proposals/%Y/%m/%d')), - ('time_requested', models.BigIntegerField(blank=True, null=True)), - ('amount_awarded', models.BigIntegerField(default=0)), - ('disk_space', models.IntegerField(blank=True, default=0, null=True)), - ('software_request', models.TextField(blank=True, null=True)), - ('request_date', models.DateTimeField(auto_now_add=True)), - ('status', models.CharField(choices=[('a', 'Approved'), ('d', 'Denied'), ('w', 'Waiting'), ('h', 'Hold'), ('r', 'Ready For Review'), ('q', 'Response Requested'), ('i', 'Denied - Insufficient Resources'), ('x', 'Denied - Proposal Incomplete'), ('f', 'Approved - Fully Funded'), ('p', 'Approved - Partially Funded')], default='w', max_length=16)), - ('approved_on', models.DateTimeField(blank=True, null=True)), - ('notes', models.TextField(blank=True, null=True)), - ('allocation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='projects.Allocation')), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project')), - ('requester', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], + migrations.AddField( + model_name='allocationrequest', + name='project', + field=models.ForeignKey(to='projects.Project', on_delete=models.CASCADE), + ), + migrations.AddField( + model_name='allocationrequest', + name='requester', + field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='allocation', name='project', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project'), + field=models.ForeignKey(to='projects.Project', on_delete=models.CASCADE), ), ] diff --git a/rcamp/projects/migrations/0002_auto_20180326_1507.py b/rcamp/projects/migrations/0002_auto_20180326_1507.py new file mode 100644 index 0000000..94d298c --- /dev/null +++ b/rcamp/projects/migrations/0002_auto_20180326_1507.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='allocationrequest', + name='abstract', + field=models.TextField(null=True, blank=True), + ), + migrations.AlterField( + model_name='allocationrequest', + name='funding', + field=models.TextField(null=True, blank=True), + ), + ] diff --git a/rcamp/projects/migrations/0003_auto_20180326_1508.py b/rcamp/projects/migrations/0003_auto_20180326_1508.py new file mode 100644 index 0000000..584f471 --- /dev/null +++ b/rcamp/projects/migrations/0003_auto_20180326_1508.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0002_auto_20180326_1507'), + ] + + operations = [ + migrations.AlterField( + model_name='allocationrequest', + name='time_requested', + field=models.BigIntegerField(null=True, blank=True), + ), + ] diff --git a/rcamp/projects/migrations/0004_auto_20180326_1529.py b/rcamp/projects/migrations/0004_auto_20180326_1529.py new file mode 100644 index 0000000..6ebbc5d --- /dev/null +++ b/rcamp/projects/migrations/0004_auto_20180326_1529.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0003_auto_20180326_1508'), + ] + + operations = [ + migrations.AlterField( + model_name='allocationrequest', + name='amount_awarded', + field=models.BigIntegerField(default=0), + ), + ] diff --git a/rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py b/rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py new file mode 100644 index 0000000..2058a04 --- /dev/null +++ b/rcamp/projects/migrations/0005_allocation_expiration_notice_sent.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0004_auto_20180326_1529'), + ] + + operations = [ + migrations.AddField( + model_name='allocation', + name='expiration_notice_sent', + field=models.BooleanField(default=False), + ), + ] diff --git a/rcamp/projects/migrations/0006_alter_allocation_id_alter_allocationrequest_id_and_more.py b/rcamp/projects/migrations/0006_alter_allocation_id_alter_allocationrequest_id_and_more.py new file mode 100644 index 0000000..eec3cc9 --- /dev/null +++ b/rcamp/projects/migrations/0006_alter_allocation_id_alter_allocationrequest_id_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 4.2.20 on 2025-04-02 13:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0005_allocation_expiration_notice_sent'), + ] + + operations = [ + migrations.AlterField( + model_name='allocation', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='allocationrequest', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='allocationrequest', + name='proposal', + field=models.FileField(blank=True, null=True, upload_to='proposals/%Y/%m/%d'), + ), + migrations.AlterField( + model_name='allocationrequest', + name='status', + field=models.CharField(choices=[('a', 'Approved'), ('d', 'Denied'), ('w', 'Waiting'), ('h', 'Hold'), ('r', 'Ready For Review'), ('q', 'Response Requested'), ('i', 'Denied - Insufficient Resources'), ('x', 'Denied - Proposal Incomplete'), ('f', 'Approved - Fully Funded'), ('p', 'Approved - Partially Funded')], default='w', max_length=16), + ), + migrations.AlterField( + model_name='project', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='project', + name='organization', + field=models.CharField(choices=[('ucb', 'University of Colorado Boulder'), ('csu', 'Colorado State University'), ('xsede', 'XSEDE'), ('amc', 'AMC')], max_length=128), + ), + migrations.AlterField( + model_name='reference', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] From fa8d90b58dc466c3f1ca16e41827d499f4254893 Mon Sep 17 00:00:00 2001 From: Kyle Reinholt Date: Wed, 2 Apr 2025 08:35:55 -0600 Subject: [PATCH 08/10] comment out all instances of comanage --- rcamp/accounts/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rcamp/accounts/admin.py b/rcamp/accounts/admin.py index 7cbc76e..8b979bf 100644 --- a/rcamp/accounts/admin.py +++ b/rcamp/accounts/admin.py @@ -18,7 +18,7 @@ from django.shortcuts import render #from .forms import ComanageSyncForm #from .models import ComanageUser -from comanage.lib import UserCO +#from comanage.lib import UserCO # from lib.utils import get_user_and_groups, get_comanage_users_by_org from django.urls import path from django.utils.html import format_html From 85283ffd923bf45fce3f8bee0c29c72f5464bf85 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Dec 2025 13:34:57 -0700 Subject: [PATCH 09/10] Changes for python3.11 env, and Django 5.2 --- Dockerfile | 18 ++++++++++++------ docker-compose.yml | 45 +++++++++++++++++++++++++++++++++++++-------- requirements.txt | 6 +++--- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8ac7954..01e419a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -# Use Python 3.9 as the base image -FROM python:3.9-slim +# Use Python 3.11 as the base image +FROM python:3.11-slim # Define gosu version ARG GOSU_VERSION=1.16 @@ -7,6 +7,16 @@ ARG GOSU_VERSION=1.16 # Install system dependencies RUN apt-get update && apt-get install -y \ gnupg2 \ + xz-utils \ + dpkg \ + which \ + sssd \ + libpam0g-dev \ + libsqlite3-dev \ + libssl-dev \ + python3-dev \ + libldap2-dev \ + default-libmysqlclient-dev \ curl \ lsb-release \ ca-certificates \ @@ -52,10 +62,6 @@ RUN pip install --upgrade pip && \ pip install wheel && \ pip install -r requirements.txt -# fix dep issues -RUN sed -i '/from django.utils import timezone/a from pytz import utc\ntimezone.utc = utc' /opt/rcamp_venv/lib/python3.9/site-packages/ldapdb/models/fields.py -RUN sed -i 's/from django.conf.urls import url/from django.urls import re_path as url/' /opt/rcamp_venv/lib/python3.9/site-packages/grappelli/urls.py - # Clone and install the django-ldapdb-test-env repository WORKDIR /opt/rcamp diff --git a/docker-compose.yml b/docker-compose.yml index 915d711..9b1bc7b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,36 @@ services: rcamp-uwsgi: + image: rcamp-uwsgi2 build: context: . container_name: rcamp-uwsgi - command: ["python3", "manage.py", "runserver", "0.0.0.0:8000"] + hostname: ${HOSTNAME} + #command: ["python3", "manage.py", "runserver", "0.0.0.0:8000"] env_file: - - dev-environment.env + - .env environment: - UWSGI_UID=${UWSGI_UID} - UWSGI_GID=${UWSGI_GID} volumes: - ./rcamp:/opt/rcamp - ./ldapdb:/opt/ldapdb - - static-content:/opt/static - - media-uploads:/opt/media - - rcamp-logs:/opt/logs - ports: - - "80:8000" - - "5678:5678" # Debugger port + - /var/lib/sss/pipes:/var/lib/sss/pipes:rw + - ./rcamp-pam/nsswitch.conf:/etc/nsswitch.conf + - ./rcamp-pam/pam.d:/etc/pam.d + - ./rcamp-pam/raddb:/etc/raddb + - ./static-content:/opt/static + - ${MEDIA_DIR}:/opt/media + - ./rcamp-logs:/opt/logs +# ports: +# - "80:8000" +# - "443:443" + #- "5678:5678" # Debugger port depends_on: database: condition: service_healthy + logging: + driver: syslog database: image: mysql:8.4 @@ -37,6 +46,26 @@ services: timeout: 5s retries: 5 + nginx: + hostname: ${HOSTNAME} + image: nginx:1.20.0 + container_name: nginx + volumes: + - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro + - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params:ro + - ${SSL_CERT}:/etc/nginx/certs/rcamp.crt:ro + - ${SSL_KEY}:/etc/nginx/certs/rcamp.key:ro + - ${MEDIA_DIR}:/var/www/media:ro + - ./static-content:/var/www/static:ro + - ./nginx-logs:/var/logs/nginx + ports: + - "80:80" + - "443:443" + logging: + driver: syslog + depends_on: + - rcamp-uwsgi + volumes: static-content: media-uploads: diff --git a/requirements.txt b/requirements.txt index 301bcbd..3e913d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,14 +2,14 @@ asgiref==3.8.1 certifi==2025.1.31 charset-normalizer==3.4.1 debugpy==1.8.13 -Django==4.2.20 +Django==5.2 django-auth-ldap==5.1.0 django-crispy-forms==1.13.0 django-easy-pjax==1.2.0 django-extensions==3.2.3 django-filter==22.1 django-grappelli==4.0.1 -django-ldapdb @ git+https://github.com/django-ldapdb/django-ldapdb.git@eb9503c85cd230f45765ec8fcd9fc21dbc81ce4c +django-ldapdb @ git+https://oauth2:glpat-T4wkcqXufHvA53DClNJp_W86MQp1OjE5CA.01.0y13pb1es@gitlab.rc.int.colorado.edu/rc-ops/django-ldap-rc.git@feature/python3.11-update django-material==1.11.3 django-mysql==4.16.0 django-utils==0.0.2 @@ -31,4 +31,4 @@ six==1.16.0 sqlparse==0.5.3 typing_extensions==4.12.2 urllib3==2.3.0 -uWSGI==2.0.20 +uWSGI==2.0.31 From 8c47f965fde287801d9e7cc7c0f0f299fc2554a0 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 6 Jan 2026 13:11:25 -0700 Subject: [PATCH 10/10] Change to create new project html --- rcamp/projects/templates/project-list.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rcamp/projects/templates/project-list.html b/rcamp/projects/templates/project-list.html index 9ed5ef3..2a5b917 100644 --- a/rcamp/projects/templates/project-list.html +++ b/rcamp/projects/templates/project-list.html @@ -45,9 +45,9 @@

{{ project.title }}

{% endfor %} - +

Create a new project

-

Create a new Research Computing project.

+

Create a new Research Computing project by requesting an allocation.