From 1d71bbf1c60d3c9ee042d7796e2d593db02416b0 Mon Sep 17 00:00:00 2001 From: yashhash2 Date: Fri, 10 Jan 2025 22:56:30 +0530 Subject: [PATCH 1/3] first commit --- buildServer/api/forms.py | 14 ++++ buildServer/api/models.py | 45 +++++++++++- buildServer/api/templates/login.html | 97 +++++++++++++++++++++++++ buildServer/api/templates/register.html | 16 ++++ buildServer/api/urls.py | 8 +- buildServer/api/views.py | 84 ++++++++++++++++++--- buildServer/buildServer/settings.py | 2 + 7 files changed, 254 insertions(+), 12 deletions(-) create mode 100644 buildServer/api/forms.py create mode 100644 buildServer/api/templates/login.html create mode 100644 buildServer/api/templates/register.html diff --git a/buildServer/api/forms.py b/buildServer/api/forms.py new file mode 100644 index 0000000..1d177bd --- /dev/null +++ b/buildServer/api/forms.py @@ -0,0 +1,14 @@ +from django import forms +from .models import CustomUser + +class CustomUserCreationForm(forms.ModelForm): + class Meta: + model = CustomUser + fields = ['email', 'first_name', 'last_name', 'password'] + + def save(self, commit=True): + user = super().save(commit=False) + user.set_password(self.cleaned_data["password"]) + if commit: + user.save() + return user diff --git a/buildServer/api/models.py b/buildServer/api/models.py index 71a8362..f540a19 100644 --- a/buildServer/api/models.py +++ b/buildServer/api/models.py @@ -1,3 +1,46 @@ +from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin from django.db import models -# Create your models here. +class CustomUserManager(BaseUserManager): + def create_user(self, email, password=None, **extra_fields): + if not email: + raise ValueError('The Email field must be set') + email = self.normalize_email(email) + user = self.model(email=email, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_superuser(self, email, password=None, **extra_fields): + extra_fields.setdefault('is_staff', True) + extra_fields.setdefault('is_superuser', True) + return self.create_user(email, password, **extra_fields) + +class CustomUser(AbstractBaseUser, PermissionsMixin): + email = models.EmailField(unique=True) + first_name = models.CharField(max_length=30, blank=True) + last_name = models.CharField(max_length=30, blank=True) + is_active = models.BooleanField(default=True) + is_staff = models.BooleanField(default=False) + uid = models.AutoField(primary_key=True) + objects = CustomUserManager() + + USERNAME_FIELD = 'email' + REQUIRED_FIELDS = ['first_name', 'last_name'] + + def __str__(self): + return self.email + + +class DEPLOYMENTS(models.Model): + Status_choices=[ ('QUEUE', 'Queue'), + ('PROG', 'In Progress'), + ('READY', 'Ready'), + ('FAIL', 'Failed'),] + name=models.CharField(max_length=100) + gitURL=models.CharField(max_length=200) + status=models.CharField(choices=Status_choices) + user = models.ForeignKey(CustomUser, to_field='uid', on_delete=models.CASCADE) + def __str__(self): + return self.name + diff --git a/buildServer/api/templates/login.html b/buildServer/api/templates/login.html new file mode 100644 index 0000000..dca87dd --- /dev/null +++ b/buildServer/api/templates/login.html @@ -0,0 +1,97 @@ + + + + + + Login + + + + +
+

Login

+ {% if error_message %} +
{{ error_message }}
+ {% endif %} +
+ {% csrf_token %} +
+ + +
+
+ + +
+ +
+ +
+ + diff --git a/buildServer/api/templates/register.html b/buildServer/api/templates/register.html new file mode 100644 index 0000000..2789eca --- /dev/null +++ b/buildServer/api/templates/register.html @@ -0,0 +1,16 @@ + + + + + Register + + +

Register

+
+ {% csrf_token %} + {{ form.as_p }} + +
+

Already have an account? Login here.

+ + diff --git a/buildServer/api/urls.py b/buildServer/api/urls.py index 203da78..aba704e 100644 --- a/buildServer/api/urls.py +++ b/buildServer/api/urls.py @@ -1,8 +1,12 @@ from django.contrib import admin from django.urls import path -import views +from . import views urlpatterns = [ - path('run/',views.run,name="run") + path('run/',views.run,name="run"), + path('register/', views.register, name='register'), + path('login/', views.login_user, name='login'), + path('logout/', views.logout_user, name='logout'), + path('MyDeploy/', views.GetMyDeploys, name='Mydeploys'), ] diff --git a/buildServer/api/views.py b/buildServer/api/views.py index 9e32940..af2a70c 100644 --- a/buildServer/api/views.py +++ b/buildServer/api/views.py @@ -1,10 +1,16 @@ from django.shortcuts import render -from django.http import JsonResponse +from django.http import JsonResponse ,HttpResponse +from django.views import View from django.views.decorators.csrf import csrf_exempt import requests import json import docker import os +from .models import CustomUser,DEPLOYMENTS +from django.shortcuts import render, redirect +from .forms import CustomUserCreationForm +from django.contrib.auth import login, authenticate, logout +from django.contrib.auth.forms import AuthenticationForm @csrf_exempt def run(request): @@ -13,20 +19,27 @@ def run(request): # Parse the JSON request body body = json.loads(request.body) github_url = body.get("githubUrl", None) - docker_user = body.get("dockerUser", None) - docker_pass = body.get("dockerPass", None) - image_name = body.get("imageName", None) - cmd = body.get("cmd", None) - env_content = body.get("env_content", "") - + docker_user = os.getenv("DOCKER_USERNAME") + docker_pass = os.getenv("DOCKER_PASSWORD") + image_name = os.getenv("IMAGE_NAME") + cmd = os.getenv("CMD") + env_content = os.getenv("ENV_CONTENT", "") + name=body.get('name') + user_uid = body.get('user_id') # Validate required parameters - if not all([github_url, docker_user, docker_pass, image_name]): + if not all([github_url, docker_user, docker_pass, image_name,name,user_uid]): return JsonResponse({ "status": "error", - "message": "Missing required parameters (githubUrl, dockerUser, dockerPass, imageName)." + "message": "Missing required parameters (githubUrl, dockerUser, dockerPass, imageName, name, user_id)." }) + try: + user = CustomUser.objects.get(uid=user_uid) + except CustomUser.DoesNotExist: + return JsonResponse({'error': 'User not found'}, status=404) + + # Environment variables env_vars = { "GIT_URL": github_url, @@ -82,6 +95,9 @@ def run(request): print(response.json()) except Exception as e: print(f"Failed to hit webhook URL: {str(e)}") + + deployment = DEPLOYMENTS.objects.create(name=name, gitURL=github_url, status='READY', user=user) + return JsonResponse({ "status": "success", @@ -101,3 +117,53 @@ def run(request): "status": "error", "message": "Invalid request method. Use POST." }) + +def register(request): + if request.method == 'POST': + form = CustomUserCreationForm(request.POST) + if form.is_valid(): + form.save() + return redirect('login') + else: + form = CustomUserCreationForm() + return render(request, 'register.html', {'form': form}) + +def login_user(request): + if request.method == 'POST': + form = AuthenticationForm(request, data=request.POST) + if form.is_valid(): + user = form.get_user() + login(request, user) + return redirect('home') + else: + form = AuthenticationForm() + return render(request, 'login.html', {'form': form}) + +def logout_user(request): + logout(request) + return redirect('login') + +def GetMyDeploys(request): + if request.method == 'GET': + user_id = request.GET.get('user_id') + if not user_id: + return JsonResponse({"error": "User ID is required"}, status=400) + + try: + deploy_data = DEPLOYMENTS.objects.filter(user__uid=user_id, status="READY") + if not deploy_data.exists(): + return JsonResponse({"message": "No Deployed Projects Found"}, status=404) + + deployments = [ + { + "name": deployment.name, + "gitURL": deployment.gitURL, + "status": deployment.status, + "user": deployment.user.uid + } + for deployment in deploy_data + ] + + return JsonResponse(deployments, safe=False, status=200) + except Exception as e: + return JsonResponse({"error": str(e)}, status=500) \ No newline at end of file diff --git a/buildServer/buildServer/settings.py b/buildServer/buildServer/settings.py index 556145f..0803c77 100644 --- a/buildServer/buildServer/settings.py +++ b/buildServer/buildServer/settings.py @@ -122,3 +122,5 @@ # https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +AUTH_USER_MODEL = 'api.CustomUser' # Replace 'myapp' with your app name From cd497815900085d6b1a47112d7b8045693b92ed2 Mon Sep 17 00:00:00 2001 From: yashhash2 Date: Sun, 19 Jan 2025 10:27:36 +0530 Subject: [PATCH 2/3] fix auth user model --- buildServer/buildServer/settings.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/buildServer/buildServer/settings.py b/buildServer/buildServer/settings.py index cc0b57d..db06ac4 100644 --- a/buildServer/buildServer/settings.py +++ b/buildServer/buildServer/settings.py @@ -137,8 +137,4 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' -<<<<<<< HEAD -AUTH_USER_MODEL = 'api.CustomUser' # Replace 'myapp' with your app name -======= AUTH_USER_MODEL= 'api.User' ->>>>>>> a603d17befe95c2eb45876c5baf2da799977ae67 From dfe7406b1339c546aa6b49ebd0567e7ef4e85191 Mon Sep 17 00:00:00 2001 From: yashhash2 Date: Sat, 1 Feb 2025 16:06:19 +0530 Subject: [PATCH 3/3] added templates in frontend --- buildServer/buildServer/urls.py | 3 + buildServer/buildServer/views.py | 4 + buildServer/templates/Deployments.html | 73 ++++++++++++++++ buildServer/templates/home.html | 100 +++++++++++----------- buildServer/templates/login.html | 113 ++++++++++++++++++++----- buildServer/templates/new_deploy.html | 100 ++++++++++++++++++++++ 6 files changed, 325 insertions(+), 68 deletions(-) create mode 100644 buildServer/templates/Deployments.html create mode 100644 buildServer/templates/new_deploy.html diff --git a/buildServer/buildServer/urls.py b/buildServer/buildServer/urls.py index d432147..c92a0a4 100644 --- a/buildServer/buildServer/urls.py +++ b/buildServer/buildServer/urls.py @@ -23,4 +23,7 @@ path('admin/', admin.site.urls), path('', views.home_page), path('api/', include('api.urls')), + path('deployments/', views.deploy_page), + path('deployments/new-deploy/',views.new_deploy), + ] diff --git a/buildServer/buildServer/views.py b/buildServer/buildServer/views.py index d6df4fc..ba126fc 100644 --- a/buildServer/buildServer/views.py +++ b/buildServer/buildServer/views.py @@ -5,4 +5,8 @@ def home_page(request): return render(request, 'home.html') +def deploy_page(request): + return render(request, 'Deployments.html') +def new_deploy(request): + return render(request,'new_deploy.html') \ No newline at end of file diff --git a/buildServer/templates/Deployments.html b/buildServer/templates/Deployments.html new file mode 100644 index 0000000..611888d --- /dev/null +++ b/buildServer/templates/Deployments.html @@ -0,0 +1,73 @@ + + + + + + ContainerOps + + + + + + + +
+
+

ContainerOps

+ +
+
+ + +
+

Your Deployments

+
+ + Deploy new project + +
+ + +
+
+

© 2023 ContainerOps. All rights reserved.

+
+
+ + + + + diff --git a/buildServer/templates/home.html b/buildServer/templates/home.html index 4ec3886..01c46f0 100644 --- a/buildServer/templates/home.html +++ b/buildServer/templates/home.html @@ -1,48 +1,52 @@ -{% extends 'layout.html'%} - -{% block title%} - Hello -{%endblock%} - -{% block navbar %} - - {% comment %} Have the logout button only when you have logged in {% endcomment %} - {%if user.is_authenticated%} - - - - | - - - - - | - - - - {%else%} - - - - - | - - - - - | - - - {%endif%} - -{%endblock%} - -{%block content%} - {%if user.is_authenticated%} - - Hii {{user.username}}! - - {%else%} - Hello - {%endif%} -{% endblock %} \ No newline at end of file + + + + + + ContainerOps + + + + + + + + + + +
+
+

Welcome to ContainerOps

+

Deploy your GitHub projects with ease. Enter your GitHub URL below to get started.

+ + + + + +
+
+ + + + + diff --git a/buildServer/templates/login.html b/buildServer/templates/login.html index a0e3fd3..529c53d 100644 --- a/buildServer/templates/login.html +++ b/buildServer/templates/login.html @@ -1,20 +1,93 @@ -{% extends 'layout.html'%} -{% load static %} - -{% block title%} - Login -{%endblock%} - - - -{%block content%} - -
Login
-
- {% csrf_token %} - {{form.as_p}} - - -
- -{% endblock %} \ No newline at end of file + + + + + + ContainerOps Login + + + + +
+

Login to ContainerOps

+

Enter your credentials or use GitHub OAuth

+
+
+ + +
+
+ + +
+ +
OR CONTINUE WITH
+ +

Don't have an account? Sign up

+
+
+ + \ No newline at end of file diff --git a/buildServer/templates/new_deploy.html b/buildServer/templates/new_deploy.html new file mode 100644 index 0000000..c0a1a76 --- /dev/null +++ b/buildServer/templates/new_deploy.html @@ -0,0 +1,100 @@ + + + + + + ContainerOps + + + + + +
+
+

ContainerOps

+ +
+
+ + +
+

Select a Repository to Deploy

+ + +
+ +
+ + +
+

Your Deployments

+
    + +
+
+
+ + +
+
+

© 2023 ContainerOps. All rights reserved.

+
+
+ + + +