Merge branch 'development' of github.com:Rushilwiz/SkoolOS into development

This commit is contained in:
Nathaniel Kenschaft 2020-06-14 23:12:01 -04:00
commit 5fe9863677
24 changed files with 324 additions and 365 deletions

View File

@ -66,15 +66,12 @@ class Student:
def __init__(self, data):
# teacher info already stored in API
# intitialze fields after GET request
self.first_name=data['first_name']
self.last_name=data['last_name']
self.git=data['git']
self.username=data['ion_user']
self.url= "http://127.0.0.1:8000/api/students/" + self.username + "/"
self.email = data['email']
self.grade = data['grade']
self.student_id=data['student_id']
self.completed = data['completed']
self.user = data['user']
#classes in id form (Example: 4,5)
#storing actual classes
cid=data['classes'].split(",")
@ -132,15 +129,12 @@ class Student:
os.chdir(cdir)
self.repo = 'https://github.com/' + self.git + '/' + self.username + '.git'
data={
'first_name':self.first_name,
'last_name':self.last_name,
'user':self.user,
'git':self.git,
'ion_user':self.username,
'student_id':self.student_id,
'added_to':self.snew,
'url':self.url,
'classes':self.sclass,
'email':self.email,
'grade':self.grade,
'completed':self.completed,
'repo':self.repo
@ -284,15 +278,13 @@ class Student:
#update teacher instance in db, classes field
data={
'first_name':self.first_name,
'last_name':self.last_name,
'user':self.user,
'git':self.git,
'ion_user':self.username,
'student_id':self.student_id,
'added_to':self.snew,
'url':self.url,
'classes':self.sclass,
'email':self.email,
'grade':self.grade,
'completed':self.completed
}
@ -327,15 +319,13 @@ class Student:
command("git push -u origin " + self.username + " --tags")
self.completed = self.completed + "," + parts[1] + "/" + parts[2]
data={
'first_name':self.first_name,
'last_name':self.last_name,
'user':self.user,
'git':self.git,
'ion_user':self.username,
'student_id':self.student_id,
'added_to':self.snew,
'url':self.url,
'classes':self.sclass,
'email':self.email,
'grade':self.grade,
'completed':self.completed
}

View File

@ -2,7 +2,7 @@ from django.contrib import admin
from .models import (
DefFiles,
Assignment,
Classes,
Class,
Teacher,
Student
)
@ -13,4 +13,4 @@ admin.site.register(Teacher)
admin.site.register(Student)
admin.site.register(DefFiles)
admin.site.register(Assignment)
admin.site.register(Classes)
admin.site.register(Class)

View File

@ -30,7 +30,7 @@
#
# ####################################
#
# from api.models import Assignment, Student, Classes, Teacher, DefFiles
# from api.models import Assignment, Student, Class, Teacher, DefFiles
# from datetime import datetime
#
# f1 = DefFiles(
@ -76,8 +76,8 @@
# A3.files.add(f4)
# A3.save()
#
# #classes
# math = Classes(
# #Class
# math = Class(
# name='Math5',
#
# )
@ -86,7 +86,7 @@
# math.assignments.add(A2)
# math.save()
#
# english = Classes(
# english = Class(
# name='English',
# )
# english.save()
@ -104,8 +104,8 @@
# repo="https://github.com/therealraffi/2022rkhondak.git",
# )
# raffu.save()
# raffu.classes.add(math)
# raffu.classes.add(english)
# raffu.Class.add(math)
# raffu.Class.add(english)
# raffu.save()
#
# #teachers
@ -115,7 +115,7 @@
# ion_user="eharris1"
# )
# ng.save()
# ng.classes.add(math)
# ng.Class.add(math)
# ng.save()
#
# chao = Teacher(
@ -124,5 +124,5 @@
# ion_user="AKBailey"
# )
# chao.save()
# chao.classes.add(english)
# chao.Class.add(english)
# chao.save()

View File

@ -1,4 +1,4 @@
# Generated by Django 3.0.7 on 2020-06-14 19:14
# Generated by Django 3.0.7 on 2020-06-14 23:00
from django.conf import settings
from django.db import migrations, models
@ -14,6 +14,19 @@ class Migration(migrations.Migration):
]
operations = [
migrations.CreateModel(
name='Class',
fields=[
('name', models.CharField(max_length=100, primary_key=True, serialize=False)),
('description', models.CharField(default='Class Description', max_length=500)),
('repo', models.URLField(blank=True, default='')),
('path', models.CharField(default='', max_length=100)),
('assignments', models.TextField(blank=True, default='')),
('default_file', models.CharField(blank=True, default='', max_length=100)),
('confirmed', models.TextField(blank=True, default='')),
('unconfirmed', models.TextField(blank=True, default='')),
],
),
migrations.CreateModel(
name='DefFiles',
fields=[
@ -28,13 +41,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Teacher',
fields=[
('created', models.DateTimeField(auto_now_add=True)),
('first_name', models.CharField(max_length=100)),
('last_name', models.CharField(max_length=100)),
('classes', models.CharField(blank=True, default='', max_length=100)),
('ion_user', models.CharField(max_length=100, primary_key=True, serialize=False)),
('git', models.CharField(max_length=100)),
('email', models.CharField(blank=True, default='', max_length=100)),
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('git', models.CharField(blank=True, default='', max_length=100)),
('classes', models.ManyToManyField(to='api.Class')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
@ -42,21 +51,12 @@ class Migration(migrations.Migration):
name='Student',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('website', models.CharField(blank=True, default='https://google.com', max_length=150)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Classes',
fields=[
('name', models.CharField(max_length=100, primary_key=True, serialize=False)),
('grade', models.IntegerField(blank=True, default=0)),
('git', models.CharField(blank=True, default='', max_length=100)),
('repo', models.URLField(blank=True, default='')),
('path', models.CharField(default='', max_length=100)),
('teacher', models.CharField(default='', max_length=100)),
('assignments', models.TextField(blank=True, default='')),
('default_file', models.CharField(blank=True, default='', max_length=100)),
('confirmed', models.TextField(blank=True, default='')),
('unconfirmed', models.TextField(blank=True, default='')),
('classes', models.CharField(blank=True, default='', max_length=100)),
('added_to', models.CharField(blank=True, default='', max_length=100)),
('completed', models.TextField(blank=True, default='')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),

View File

@ -1,52 +0,0 @@
# Generated by Django 3.0.7 on 2020-06-14 20:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='student',
name='website',
),
migrations.AddField(
model_name='student',
name='added_to',
field=models.CharField(blank=True, default='', max_length=100),
),
migrations.AddField(
model_name='student',
name='classes',
field=models.CharField(blank=True, default='', max_length=100),
),
migrations.AddField(
model_name='student',
name='completed',
field=models.TextField(blank=True, default=''),
),
migrations.AddField(
model_name='student',
name='git',
field=models.CharField(blank=True, default='https://github.com/', max_length=100),
),
migrations.AddField(
model_name='student',
name='grade',
field=models.IntegerField(blank=True, default=9),
),
migrations.AddField(
model_name='student',
name='repo',
field=models.URLField(blank=True, default=''),
),
migrations.AddField(
model_name='student',
name='student_id',
field=models.IntegerField(blank=True, default=0),
),
]

View File

@ -0,0 +1,31 @@
# Generated by Django 3.0.7 on 2020-06-15 00:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='class',
name='confirmed',
),
migrations.AddField(
model_name='class',
name='confirmed',
field=models.ManyToManyField(blank=True, related_name='confirmed', to='api.Student'),
),
migrations.RemoveField(
model_name='class',
name='unconfirmed',
),
migrations.AddField(
model_name='class',
name='unconfirmed',
field=models.ManyToManyField(blank=True, related_name='unconfirmed', to='api.Student'),
),
]

View File

@ -1,43 +0,0 @@
# Generated by Django 3.0.7 on 2020-06-14 20:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0002_auto_20200614_2034'),
]
operations = [
migrations.RemoveField(
model_name='student',
name='student_id',
),
migrations.RemoveField(
model_name='teacher',
name='created',
),
migrations.RemoveField(
model_name='teacher',
name='email',
),
migrations.RemoveField(
model_name='teacher',
name='first_name',
),
migrations.RemoveField(
model_name='teacher',
name='last_name',
),
migrations.AlterField(
model_name='student',
name='git',
field=models.CharField(blank=True, default='', max_length=100),
),
migrations.AlterField(
model_name='student',
name='grade',
field=models.IntegerField(blank=True),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.7 on 2020-06-15 02:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0002_auto_20200615_0046'),
]
operations = [
migrations.AlterField(
model_name='teacher',
name='classes',
field=models.ManyToManyField(blank=True, related_name='teacher', to='api.Class'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0.7 on 2020-06-14 21:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0003_auto_20200614_2044'),
]
operations = [
migrations.AlterField(
model_name='student',
name='grade',
field=models.IntegerField(blank=True, default=0),
),
]

View File

@ -0,0 +1,22 @@
# Generated by Django 3.0.7 on 2020-06-15 02:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0003_auto_20200615_0233'),
]
operations = [
migrations.RemoveField(
model_name='teacher',
name='classes',
),
migrations.AddField(
model_name='class',
name='teachers',
field=models.ManyToManyField(blank=True, related_name='teachers', to='api.Teacher'),
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.0.7 on 2020-06-15 00:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0004_auto_20200614_2107'),
]
operations = [
migrations.RemoveField(
model_name='student',
name='id',
),
migrations.AddField(
model_name='student',
name='ion_user',
field=models.CharField(default='2022rkhondak', max_length=100, primary_key=True, serialize=False),
preserve_default=False,
),
]

View File

@ -1,52 +1,7 @@
from django.db import models
from django.contrib.auth.models import User
class DefFiles(models.Model):
name=models.CharField(max_length=100)
path=models.CharField(max_length=100)
assignment=models.CharField(max_length=100, default="")
classes=models.CharField(max_length=100)
teacher=models.CharField(max_length=100)
class Assignment(models.Model):
owner = models.ForeignKey('auth.User', related_name='assignments', on_delete=models.CASCADE)
name=models.CharField(max_length=100, primary_key=True)
due_date=models.DateTimeField()
# files = models.ManyToManyField(DefFiles)
files=models.CharField(max_length=100, default="", blank=True)
path=models.CharField(max_length=100)
classes=models.CharField(max_length=100)
teacher=models.CharField(max_length=100)
def __str__(self):
return '%s' % (self.name)
class Classes(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(primary_key=True, max_length=100)
repo=models.URLField(default="", blank=True)
path=models.CharField(max_length=100, default="")
teacher=models.CharField(max_length=100, default="")
assignments=models.TextField(default="", blank=True)
default_file=models.CharField(max_length=100, default="", blank=True)
confirmed=models.TextField(default="", blank=True)
unconfirmed=models.TextField(default="", blank=True)
# assignments = models.ManyToManyField(Assignment, default="")
# default_file = models.ManyToManyField(DefFiles)
def save(self, *args, **kwargs):
return super(Classes, self).save(*args, **kwargs)
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# classes = models.ManyToManyField(Classes, default="")
classes=models.CharField(max_length=100, default="", blank=True)
ion_user=models.CharField(primary_key=True, max_length=100)
git=models.CharField(max_length=100)
def save(self, *args, **kwargs):
super(Teacher, self).save(*args, **kwargs)
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
@ -62,3 +17,67 @@ class Student(models.Model):
def __str__(self):
return f"{self.user.username}'s Profile"
class Class(models.Model):
name = models.CharField(primary_key=True, max_length=100)
description = models.CharField(default="Class Description", max_length=500)
repo=models.URLField(default="", blank=True)
path=models.CharField(max_length=100, default="")
assignments=models.TextField(default="", blank=True)
default_file=models.CharField(max_length=100, default="", blank=True)
confirmed=models.ManyToManyField(Student, blank=True, related_name='confirmed')
unconfirmed=models.ManyToManyField(Student, blank=True, related_name='unconfirmed')
# assignments = models.ManyToManyField(Assignment, default="")
# default_file = models.ManyToManyField(DefFiles)
def save(self, *args, **kwargs):
return super(Class, self).save(*args, **kwargs)
def __str__(self):
return self.name
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
classes=models.ManyToManyField(Class, blank=True, related_name='classes')
git=models.CharField(max_length=100, default="", blank=True)
def __str__(self):
return f"{self.user.username}'s Profile"
def save(self, *args, **kwargs):
super(Teacher, self).save(*args, **kwargs)
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
ion_user=models.CharField(primary_key=True, max_length=100)
grade = models.IntegerField(default=0, blank=True)
git=models.CharField(default="", max_length=100, blank=True)
repo=models.URLField(default="", blank=True)
classes=models.CharField(max_length=100, default="", blank=True)
added_to=models.CharField(max_length=100, default="", blank=True)
completed=models.TextField(default="", blank=True)
class Assignment(models.Model):
owner = models.ForeignKey('auth.User', related_name='assignments', on_delete=models.CASCADE)
name=models.CharField(max_length=100, primary_key=True)
due_date=models.DateTimeField()
# files = models.ManyToManyField(DefFiles)
files=models.CharField(max_length=100, default="", blank=True)
path=models.CharField(max_length=100)
classes=models.CharField(max_length=100)
teacher=models.CharField(max_length=100)
def __str__(self):
return '%s' % (self.name)
class DefFiles(models.Model):
name=models.CharField(max_length=100)
path=models.CharField(max_length=100)
assignment=models.CharField(max_length=100, default="")
classes=models.CharField(max_length=100)
teacher=models.CharField(max_length=100)

View File

@ -13,7 +13,7 @@ class IsOwnerOrReadOnly(permissions.BasePermission):
return True
# Write permissions are only allowed to the owner of the snippet.
return obj.owner == request.user or request.user.is_superuser
return obj.user == request.user or request.user.is_superuser
class isTeacher(permissions.BasePermission):
#only teachers can make classes and assignmenst

View File

@ -5,8 +5,8 @@ from django.contrib.auth.models import User
from .permissions import IsOwnerOrReadOnly,isTeacher
class UserSerializer(serializers.HyperlinkedModelSerializer):
students = serializers.PrimaryKeyRelatedField(many=True, queryset=Student.objects.all())
teachers = serializers.PrimaryKeyRelatedField(many=True, queryset=Teacher.objects.all())
# students = serializers.PrimaryKeyRelatedField(many=True, queryset=Student.objects.all())
# teachers = serializers.PrimaryKeyRelatedField(many=True, queryset=Teacher.objects.all())
class Meta:
model = User
@ -38,11 +38,10 @@ class ClassesSerializer(serializers.HyperlinkedModelSerializer):
class StudentSerializer(serializers.HyperlinkedModelSerializer):
# classes = ClassesSerializer(many=True, read_only=True,allow_null=True)
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Student
# fields = ['url','first_name', 'last_name', 'grade','email','student_id', 'git','ion_user','classes','added_to','completed', 'repo','owner']
fields = ['grade','email','student_id', 'git','ion_user','classes','added_to','completed', 'repo','owner']
fields = ['url','grade', 'ion_user','git','user','classes','added_to','completed', 'repo']
class TeacherSerializer(serializers.ModelSerializer):
# classes = ClassesSerializer(many=True, read_only=True,allow_null=True)

View File

@ -9,8 +9,8 @@ urlpatterns = [
path('teachers/<str:pk>/', views.TeacherDetail.as_view()),
path('assignments/', views.AssignmentList.as_view()),
path('assignments/<str:pk>/', views.AssignmentDetail.as_view()),
path('classes/', views.ClassesList.as_view()),
path('classes/<str:pk>/', views.ClassesDetail.as_view()),
path('classes/', views.ClassList.as_view()),
path('classes/<str:pk>/', views.ClassDetail.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
urlpatterns = format_suffix_patterns(urlpatterns)

View File

@ -1,5 +1,5 @@
from .models import Student, Teacher, Classes, Assignment, DefFiles
from .serializers import StudentSerializer, TeacherSerializer, ClassesSerializer, AssignmentSerializer, UserSerializer
from .models import Student, Teacher, Class, Assignment, DefFiles
from .serializers import StudentSerializer, TeacherSerializer, ClassSerializer, AssignmentSerializer, UserSerializer
from rest_framework import generics, viewsets, permissions, response, status
from django.http import Http404
from rest_framework.views import APIView
@ -14,7 +14,7 @@ from rest_framework.response import Response
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
permission_Class = [permissions.IsAuthenticated]
class StudentViewSet(viewsets.ModelViewSet):
@ -23,7 +23,7 @@ class StudentViewSet(viewsets.ModelViewSet):
"""
queryset = Student.objects.all()
serializer_class = StudentSerializer
permission_classes = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
permission_Class = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
@ -34,18 +34,18 @@ class TeacherViewSet(viewsets.ModelViewSet):
"""
queryset = Teacher.objects.all()
serializer_class = TeacherSerializer
permission_classes = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
permission_Class = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class ClassesViewSet(viewsets.ModelViewSet):
class ClassViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Classes.objects.all()
serializer_class = ClassesSerializer
permission_classes = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
queryset = Class.objects.all()
serializer_class = ClassSerializer
permission_Class = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
def perform_create(self, serializer):
if(self.request.user.groups.filter(name__in=['teachers']).exists() or self.request.user.is_superuser):
@ -61,7 +61,7 @@ class AssignmentViewSet(viewsets.ModelViewSet):
"""
queryset = Assignment.objects.all()
serializer_class = AssignmentSerializer
permission_classes = [permissions.IsAuthenticated, isTeacher, IsOwnerOrReadOnly]
permission_Class = [permissions.IsAuthenticated, isTeacher, IsOwnerOrReadOnly]
def perform_create(self, serializer):
if(self.request.user.groups.filter(name__in=['teachers']).exists() or self.request.user.is_superuser):
@ -76,4 +76,4 @@ class AssignmentViewSet(viewsets.ModelViewSet):
# """
# queryset = DefFiles.objects.all()
# serializer_class = DefFilesSerializer
# permissions_classes = [permissions.IsAuthenticatedOrReadOnly]
# permissions_Class = [permissions.IsAuthenticatedOrReadOnly]

View File

@ -9,7 +9,7 @@ router = routers.DefaultRouter()
router.register(r'students', api_views.StudentViewSet)
router.register(r'teachers', api_views.TeacherViewSet)
router.register(r'assignments', api_views.AssignmentViewSet)
router.register(r'classes', api_views.ClassesViewSet)
router.register(r'classes', api_views.ClassViewSet)
# router.register(r'files', api_views.DefFilesViewSet)
router.register(r'users', api_views.UserViewSet)

View File

@ -13,22 +13,20 @@ body {
color: #333333;
margin-top: 5rem;
font-family: 'Segoe UI';
margin-left: 2.5rem;
margin-right: 2.5rem;
}
h1, h2, h3, h4, h5, h6 {
color: #444444;
}
ul {
margin: 0;
}
.bg-steel {
background: #3cba54;
}
.site-header .navbar-nav .nav-link {
color: #cbd5db;
color: #e1e1e1;
}
.site-header .navbar-nav .nav-link:hover {
@ -38,63 +36,3 @@ ul {
.site-header .navbar-nav .nav-link.active {
font-weight: 500;
}
.content-section {
background: #ffffff;
padding: 10px 20px;
border: 1px solid #dddddd;
border-radius: 3px;
margin-bottom: 20px;
}
.article-title {
color: #444444;
}
a.article-title:hover {
color: #428bca;
text-decoration: none;
}
.article-content {
white-space: pre-line;
}
.article-img {
height: 65px;
width: 65px;
margin-right: 16px;
}
.article-metadata {
padding-bottom: 1px;
margin-bottom: 4px;
border-bottom: 1px solid #e3e3e3
}
.article-metadata a:hover {
color: #333;
text-decoration: none;
}
.article-svg {
width: 25px;
height: 25px;
vertical-align: middle;
}
.account-img {
height: 125px;
width: 125px;
margin-right: 20px;
margin-bottom: 16px;
}
.account-heading {
font-size: 2.5rem;
}
.nounderline {
text-decoration: none !important;
color: black !important;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -21,8 +21,8 @@
<nav class="navbar navbar-expand-md navbar-dark bg-steel fixed-top">
<div class="container">
<a class="navbar-brand" href="#">
<img src="/docs/4.3/assets/brand/bootstrap-solid.svg" width="30" height="30" class="d-inline-block align-top" alt="">
Bootstrap
<img src="{% static 'skoolos/tj_trans.png' %}" width="30" height="30" class="d-inline-block align-top" alt="">
SkoolOS
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>

View File

@ -1,3 +1,15 @@
{% extends "skoolos/base.html" %}
{% block content %}
<div class="content-section">
{% for class in classes %}
<div class="card-columns">
<a class="card" href="#" style="text-decoration: none;">
<div class="card-body">
<h5 class="card-title">{{ class.name }}</h5>
<p class="card-text">{{ class.description }}</p>
</div>
</a>
</div>
{% endfor %}
</div>
{% endblock content %}

View File

@ -1,10 +1,24 @@
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from api.models import Student, Teacher
# Create your views here.
@login_required()
def home (request):
try:
student = Student.objects.get(user=request.user)
return render(request, "skoolos/home.html", {'classes': student.confirmed.all()})
except Student.DoesNotExist:
pass
try:
teacher = Teacher.objects.get(user=request.user)
return render(request, "skoolos/home.html", {'classes': teacher.classes})
except Teacher.DoesNotExist:
pass
return render(request, "skoolos/home.html")
@login_required()

View File

@ -100,9 +100,9 @@ def create_account (request):
token.delete()
if isStudent:
profile = Student(user=user, git=git, grade=grade)
profile = Student(owner=user, git=git, grade=grade, ion_user=username)
else:
profile = Teacher(user=user, git=git)
profile = Teacher(owner=user, git=git, ion_user=username)
profile.save()
@ -145,4 +145,4 @@ def create_account (request):
def logout(request):
auth_logout(request)
messages.success(request, "You've been logged out!")
return redirect(request, "/login")
return redirect("/login")

View File

@ -35,50 +35,71 @@ def main():
print("")
if not os.path.exists(".profile"):
# try:
# URL = "http://127.0.0.1:8000/api/"
# r = requests.get(url = URL)
# print("Stop any processes running on http://127.0.0.1:8000/ before continuing")
# except:
# pass
try:
URL = "http://127.0.0.1:8000/api/"
r = requests.get(url = URL)
except:
print("Stop any processes running on http://127.0.0.1:8000/ before continuing")
sys.exit(0)
input("Welcome to SkoolOS. Press any key to create an account")
#webbrowser.open("http://127.0.0.1:8000/login", new=2)
authenticate()
# else:
# try:
# URL = "http://127.0.0.1:8000/api/"
# f = open('.profile','r')
# data = json.loads(f.read())
# f.close()
# PWD = data['password']
# USER = data['username']
# r = requests.get(url = URL, auth=(USER,PWD))
# except:
# print("Incorrect password.")
# sys.exit(0)
# if(data['is_student']):
# studentCLI()
# else:
# teacherCLI()
else:
f = open('.profile','r')
data = json.loads(f.read())
f.close()
PWD = data['password']
USER = data['username']
print(data['username'])
if(data['is_student']):
studentCLI(USER, PWD)
else:
teacherCLI()
# while True:
# pass
def studentCLI():
def studentCLI(user, password):
from CLI import student
data = getStudent(USER)
print(data)
data = getStudent(user, password)
student = student.Student(data)
print(student)
choices = ['1) View Class','2) Exit SkoolOS']
questions = [
{
'type': 'list',
'name': 'choice',
'choices':choices,
'message': 'Select class: ',
},
]
choice = prompt(questions)
choice = int(choice['choice'].split(")")[0])
if(choice == 1):
carray = student.sclass.split(",")
if(len(carray) == 1 and carray[0] == ""):
print("No classes")
return
courses = [
{
'type': 'list',
'name': 'course',
'choices':carray,
'message': 'Select class: ',
},
]
course = prompt(courses)
if(choice == 2):
student.exitCLI()
def teacherCLI():
from CLI.teacher import Teacher
print("fail")
def getStudent(ion_user):
def getStudent(ion_user, password):
URL = "http://127.0.0.1:8000/api/students/" + ion_user + "/"
r = requests.get(url = URL, auth=('raffukhondaker','hackgroup1'))
r = requests.get(url = URL, auth=(ion_user,password))
if(r.status_code == 200):
data = r.json()
return data
@ -210,55 +231,40 @@ def authenticate():
pwd = data['pwd']
user = data['username']
print(r.status_code)
r = requests.get(url = "http://localhost:8000/students/" + user + "/", auth=(user,pwd))
r = requests.get(url = "http://localhost:8000/api/students/" + user + "/", auth=(user,pwd))
is_student = False
if(r.status_code == 200):
is_student = True
print("Welcome, student " + user)
r = requests.get(url = "http://localhost:8000/api/students/" + user + "/", auth=(user,pwd))
profile = r.json()
username = profile['ion_user']
grade = profile['grade']
profile = {
'username':username,
'grade':grade,
'is_student':is_student,
'password':pwd,
}
profileFile = open(".profile", "w")
profileFile.write(json.dumps(profile))
profileFile.close()
else:
print("Welcome, teacher " + user)
#print(code)
print(state)
payload = {'grant_type': 'authorization_code', 'code': code, 'redirect_uri': redirect_uri, 'client_id': client_id,
'client_secret': client_secret, 'csrfmiddlewaretoken': state}
token = requests.post("https://ion.tjhsst.edu/oauth/token/", data=payload).json()
#print(token)
headers = {'Authorization': f"Bearer {token['access_token']}"}
# And finally get the user's profile!
profile = requests.get("https://ion.tjhsst.edu/api/profile", headers=headers).json()
#pprint.pprint(profile)
username = profile['ion_username']
email = profile['tj_email']
first_name = profile['first_name']
last_name = profile['last_name']
is_student = profile['is_student']
password = ""
#password creation
profile = {
'username':username,
'email':email,
'first_name':first_name,
'last_name':last_name,
'is_student':is_student,
'password':password,
}
os.chdir(cdir)
profileFile = open(".profile", "w")
profileFile.write(json.dumps(profile))
profileFile.close()
#try to make password
password = makePass()
profile['password'] = password
profileFile = open(".profile", "w")
profileFile.write(json.dumps(profile))
profileFile.close()
r = requests.get(url = "http://localhost:8000/api/teachers/" + user + "/", auth=(user,pwd))
profile = r.json()
username = profile['ion_user']
grade = profile['grade']
profile = {
'username':username,
'grade':grade,
'is_student':is_student,
'password':pwd,
}
profileFile = open(".profile", "w")
profileFile.write(json.dumps(profile))
profileFile.close()
sys.exit