Skip to content

Commit

Permalink
framework: Add Reset Password API
Browse files Browse the repository at this point in the history
fixes formatting issues
  • Loading branch information
AdityaAshvin16 committed Jun 6, 2020
1 parent c2dcefc commit 53edd66
Show file tree
Hide file tree
Showing 2 changed files with 296 additions and 0 deletions.
32 changes: 32 additions & 0 deletions framework/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@
from .api.user import UserBasicObj
from .api.mutation import Mutation as PlatformMutation

import secrets,string

from framework import settings
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags

from_email = settings.EMAIL_HOST_USER

to_tz = timezone.get_default_timezone()


Expand Down Expand Up @@ -200,6 +209,28 @@ def mutate(self, info, username=None, firstName=None, lastName=None, email=None,
profile.save()
return userResponseObj(id=user.id)

class ResetPassword(graphene.Mutation):
class Arguments:
email = graphene.String(required=True)

Output = userStatusObj

def mutate(self, info, email):
user = User.objects.get(email=email)
if user is not None:
newPassword = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(10))
user.set_password(newPassword)
user.save()
context = {
"password" : newPassword,
"username" : user.username
}
message = render_to_string('email/password_reset_email.html', context)
send_mail('Reset Password | amFOSS CMS', strip_tags(message) , from_email, [email], fail_silently=False, html_message=message)
return userStatusObj(status=True)
else:
raise APIException('Email is not registered',
code='WRONG_EMAIL')

class Query(
dairyQuery,
Expand Down Expand Up @@ -270,6 +301,7 @@ class Mutation(membersMutation, attendance.schema.Mutation, registrationMutation
approve_user = ApproveUser.Field()
change_password = ChangePassword.Field()
UpdateProfile = UpdateProfile.Field()
reset_password = ResetPassword.Field()


schema = graphene.Schema(query=Query, mutation=Mutation)
264 changes: 264 additions & 0 deletions templates/email/password_reset_email.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
<!DOCTYPE html>
<html>
<head>

<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Reset Password for amFOSS</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
/**
* Google webfonts. Recommended to include the .woff version for cross-client compatibility.
*/
@media screen {
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v10/ODelI1aHBYDBqgeIAH2zlBM0YzuT7MdOe03otPbuUS0.woff) format('woff');
}

@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v10/toadOcfmlt9b38dHJxOBGFkQc6VGVFSmCnC_l7QZG60.woff) format('woff');
}
}

/**
* Avoid browser level font resizing.
* 1. Windows Mobile
* 2. iOS / OSX
*/
body,
table,
td,
a {
-ms-text-size-adjust: 100%; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}

/**
* Remove extra space added to tables and cells in Outlook.
*/
table,
td {
mso-table-rspace: 0pt;
mso-table-lspace: 0pt;
}

/**
* Better fluid images in Internet Explorer.
*/
img {
-ms-interpolation-mode: bicubic;
}

/**
* Remove blue links for iOS devices.
*/
a[x-apple-data-detectors] {
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
color: inherit !important;
text-decoration: none !important;
}

/**
* Fix centering issues in Android 4.4.
*/
div[style*="margin: 16px 0;"] {
margin: 0 !important;
}

body {
width: 100% !important;
height: 100% !important;
padding: 0 !important;
margin: 0 !important;
}

/**
* Collapse table borders to avoid space between cells.
*/
table {
border-collapse: collapse !important;
}

a {
color: #1a82e2;
}

img {
height: auto;
line-height: 100%;
text-decoration: none;
border: 0;
outline: none;
}
</style>

</head>
<body style="background-color: #e9ecef;">

<!-- start preheader -->
<div class="preheader" style="display: none; max-width: 0; max-height: 0; overflow: hidden; font-size: 1px; line-height: 1px; color: #fff; opacity: 0;">
Hey {{username}}, New password for amFOSS CMS.
</div>
<!-- end preheader -->

<!-- start body -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">

<!-- start logo -->
<tr>
<td align="center" bgcolor="#e9ecef">
<!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td align="center" valign="top" width="600">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
<tr>
<td align="center" valign="top" style="padding: 36px 24px;">
<a href="https://amfoss.in" target="_blank" style="display: inline-block;">
<img src="https://i.imgur.com/KLyN8QY.png" alt="Logo" border="0" style="display: block; width: 15vw;">
</a>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- end logo -->

<!-- start hero -->
<tr>
<td align="center" bgcolor="#e9ecef">
<!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td align="center" valign="top" width="600">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
<tr>
<td align="left" bgcolor="#ffffff" style="padding: 36px 24px 0; font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif; border-top: 3px solid #d4dadf;">
<h1 style="margin: 0; font-size: 32px; font-weight: 700; letter-spacing: -1px; line-height: 48px;">Reset Your Password</h1>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- end hero -->

<!-- start copy block -->
<tr>
<td align="center" bgcolor="#e9ecef">
<!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td align="center" valign="top" width="600">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">

<!-- start copy -->
<tr>
<td align="left" bgcolor="#ffffff" style="padding: 24px; font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px;">
<p>Hey {{username}}, <br> We got a request to reset your password for your amFOSS CMS account. Here are your credentials</p>
<li><b>Username:</b> {{username}}</li>
<li style="margin-bottom: 10px;"><b>Password:</b> {{password}}</li>
</td>
</tr>
<!-- end copy -->

<!-- start button -->
<tr>
<td align="left" bgcolor="#ffffff">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="center" bgcolor="#ffffff" style="padding: 12px;">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" bgcolor="#ffc107" style="border-radius: 6px;">
<a href="https://my.amfoss.in" target="_blank" style="display: inline-block; padding: 16px 36px; font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif; font-size: 16px; color: #000000; text-decoration: none; border-radius: 6px;">Login into amFOSS CMS</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- end button -->

<!-- start copy -->
<tr>
<td align="left" bgcolor="#ffffff" style="padding: 24px; font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px;">
<p style="margin: 0;">If that doesn't work, copy and paste the following link in your browser:</p>
<p style="margin: 0;"><a href="https://my.amfoss.in" target="_blank">https://my.amfoss.in</a></p>
</td>
</tr>
<!-- end copy -->

<!-- start copy -->
<tr>
<td align="left" bgcolor="#ffffff" style="padding: 24px; font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; border-bottom: 3px solid #d4dadf">
<p style="margin: 0;">Cheers,<br> amFOSS Web Team</p>
</td>
</tr>
<!-- end copy -->

</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- end copy block -->

<!-- start footer -->
<tr>
<td align="center" bgcolor="#e9ecef" style="padding: 24px;">
<!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td align="center" valign="top" width="600">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">

<!-- start permission -->
<tr>
<td align="center" bgcolor="#e9ecef" style="padding: 12px 24px; font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; color: #666;">
<p style="margin: 0;">You received this email because we received a request to reset your password for your account. If you didn't request please login with the given credentials to reset your password and you can safely delete this email.</p>
</td>
</tr>
<!-- end permission -->
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- end footer -->

</table>
<!-- end body -->

</body>
</html>

0 comments on commit 53edd66

Please sign in to comment.