summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2024-05-25 07:59:48 +0530
committerSunil Shetye2024-05-25 13:32:32 +0530
commit5da499ad70d1038ea66b30ca21e4b49ad4063fa3 (patch)
tree61b7fa4c7bc8bba4ce176e5e250ed23f036d097c
parent875de28dde75b6330e8f2b6ffd08bc6301ed6cd8 (diff)
downloadCommon-Interface-Project-5da499ad70d1038ea66b30ca21e4b49ad4063fa3.tar.gz
Common-Interface-Project-5da499ad70d1038ea66b30ca21e4b49ad4063fa3.tar.bz2
Common-Interface-Project-5da499ad70d1038ea66b30ca21e4b49ad4063fa3.zip
set username as email
-rw-r--r--blocks/authAPI/models.py31
-rw-r--r--blocks/authAPI/serializers.py6
-rw-r--r--blocks/authAPI/templates/activate_user.html60
-rw-r--r--blocks/blocks/settings.py10
-rw-r--r--blocks/eda-frontend/src/pages/signUp.js51
-rw-r--r--blocks/eda-frontend/src/redux/actions/actions.js2
-rw-r--r--blocks/eda-frontend/src/redux/actions/authActions.js22
-rwxr-xr-xblocks/init.sh15
8 files changed, 120 insertions, 77 deletions
diff --git a/blocks/authAPI/models.py b/blocks/authAPI/models.py
index 7d79b7c7..b7c7275d 100644
--- a/blocks/authAPI/models.py
+++ b/blocks/authAPI/models.py
@@ -1,7 +1,34 @@
from django.db import models
-from django.contrib.auth.models import AbstractUser
+from django.contrib.auth.models import AbstractUser, BaseUserManager
+
+
+class CustomUserManager(BaseUserManager):
+ """Custome user manager."""
+ def create_user(self, email, username, password=None, **extra_kwargs):
+ """Create and saves a User with the given email, username, and password."""
+ if not email:
+ raise ValueError("Users must have an email address")
+
+ user = self.model(email=self.normalize_email(email), username=username)
+ user.set_password(password)
+ user.save(using=self._db)
+ return user
+
+ def create_superuser(self, email, username, password=None, **extra_kwargs):
+ """Create and saves a superuser with the given email, username, and password."""
+
+ user = self.create_user(email, username, password=password)
+ user.is_staff = True
+ user.is_superuser = True
+ user.save(using=self._db)
+ return user
class User(AbstractUser):
id = models.AutoField(primary_key=True)
- email = models.EmailField(unique=True)
+ email = models.EmailField(max_length=150, unique=True)
+ username = models.CharField(max_length=150, unique=True)
+
+ USERNAME_FIELD = 'email'
+ REQUIRED_FIELDS = ['username']
+ objects = CustomUserManager()
diff --git a/blocks/authAPI/serializers.py b/blocks/authAPI/serializers.py
index 92286aec..1bde4387 100644
--- a/blocks/authAPI/serializers.py
+++ b/blocks/authAPI/serializers.py
@@ -6,6 +6,12 @@ from djoser.conf import settings
User = get_user_model()
+class UserCreateSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = User
+ fields = ("id", "username", "email", "password")
+
+
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(required=False,
style={"input_type": "password"})
diff --git a/blocks/authAPI/templates/activate_user.html b/blocks/authAPI/templates/activate_user.html
index 23973370..4074b96b 100644
--- a/blocks/authAPI/templates/activate_user.html
+++ b/blocks/authAPI/templates/activate_user.html
@@ -3,51 +3,32 @@
<head>
- <!-- Basic Page Needs
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+ <!-- Basic Page Needs -->
<meta charset="utf-8">
<title>Activate Account</title>
<meta name="description" content="">
- <!-- Mobile Specific Metas
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+ <!-- Mobile Specific Metas -->
<meta name="viewport" content="width=device-width, initial-scale=1">
- <!-- FONT
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+ <!-- FONT -->
<link href="//fonts.googleapis.com/css?family=Raleway:400,300,600" rel="stylesheet" type="text/css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
- <!-- CSS
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+ <!-- CSS -->
<link rel="stylesheet" href="/css/normalize.css">
<link rel="stylesheet" href="/css/skeleton.css">
<style>
- html,
- body {
+ html, body {
min-height: 100%;
}
- .button {
- border-color: #33C3F0;
- }
-
- .footer {
- position: absolute;
- bottom: 0;
- min-width: 100%;
- padding: 10px;
- text-align: center;
- }
-
#clickhere {
cursor: pointer;
}
</style>
- <!-- Script
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
-
+ <!-- Script -->
<script>
function sendData() {
@@ -56,54 +37,37 @@
data: { uid: '{{ uid }}', token: '{{ token }}' },
type: "POST",
dataType: "json",
- //on success
success: function (data) {
window.location.replace('{{ redirect_url }}');
},
- //on error
error: function (err) {
- // ToDo: Error message popup
console.log(err)
$('#error-text').text(err.statusText)
-
}
});
}
-
</script>
- <!-- Favicon
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
- <!-- <link rel="icon" type="image/png" href="images/favicon.png"> -->
+ <!-- Favicon -->
+ <link rel="icon" type="image/x-icon" href="/favicon.ico">
</head>
<body>
-
-
- <!-- Primary Page Layout
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+ <!-- Primary Page Layout -->
<div class="container">
<div class="row">
- <div style="padding-top: 30%; align-content: center;">
+ <div style="padding-top: 10%; align-content: center;">
<h1 style="text-align: center;">To Activate Your Account
<a id="clickhere" onClick="sendData();"><strong><u>Click Here</u><strong></a></h1>
</div>
- <div style="padding-top: 30%; align-content: center;">
+ <div style="padding-top: 10%; align-content: center;">
<h1 style="text-align: center; color: #e25555;" id="error-text"> </h1>
</div>
</div>
</div>
- <div class="container footer">
- <footer class="twelve columns">
- Made with <span style="color: #e25555;">&hearts;</span> by <a
- href="https://github.com/frg-fossee">frg-fossee</a>
- </footer>
- </div> <!-- end footer div.container -->
- </div>
- <!-- End Document
- –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+ <!-- End Document -->
</body>
</html>
diff --git a/blocks/blocks/settings.py b/blocks/blocks/settings.py
index 20f1e671..cbcf4fde 100644
--- a/blocks/blocks/settings.py
+++ b/blocks/blocks/settings.py
@@ -142,6 +142,8 @@ GOOGLE_OAUTH_REDIRECT_URI = os.environ.get('GOOGLE_OAUTH_REDIRECT_URI',
'http://localhost/api/auth/google-callback')
POST_ACTIVATE_REDIRECT_URL = os.environ.get('POST_ACTIVATE_REDIRECT_URL',
'http://localhost/')
+DOMAIN = os.environ.get('EMAIL_DOMAIN', 'localhost')
+SITE_NAME = os.environ.get('EMAIL_SITE_NAME', 'Xcos')
DJOSER = {
'LOGIN_FIELD': 'email',
@@ -150,12 +152,16 @@ DJOSER = {
'PASSWORD_CHANGED_EMAIL_CONFIRMATION': True,
'SEND_CONFIRMATION_EMAIL': True,
'SET_PASSWORD_RETYPE': True,
- 'PASSWORD_RESET_CONFIRM_URL': 'password/reset/confirm/{uid}/{token}',
- 'ACTIVATION_URL': 'api/auth/users/activate/{uid}/{token}',
+ 'PASSWORD_RESET_CONFIRM_URL': 'api/auth/password/reset/confirm/{uid}/{token}',
+ 'ACTIVATION_URL': 'api/auth/users/activate/{uid}/{token}/',
'SEND_ACTIVATION_EMAIL': True,
'SOCIAL_AUTH_TOKEN_STRATEGY': 'authAPI.token.TokenStrategy',
'SOCIAL_AUTH_ALLOWED_REDIRECT_URIS': [GOOGLE_OAUTH_REDIRECT_URI],
'SERIALIZERS': {
+ 'user_create': 'authAPI.serializers.UserCreateSerializer',
+ 'user': 'authAPI.serializers.UserCreateSerializer',
+ 'current_user': 'authAPI.serializers.UserCreateSerializer',
+ 'user_delete': 'djoser.serializers.UserDeleteSerializer',
'token_create': 'authAPI.serializers.TokenCreateSerializer',
},
}
diff --git a/blocks/eda-frontend/src/pages/signUp.js b/blocks/eda-frontend/src/pages/signUp.js
index 0457b664..b60da8dc 100644
--- a/blocks/eda-frontend/src/pages/signUp.js
+++ b/blocks/eda-frontend/src/pages/signUp.js
@@ -59,13 +59,16 @@ export default function SignUp () {
const history = useHistory()
- const [username, setUsername] = useState('')
- const [password, setPassword] = useState('')
const [email, setEmail] = useState('')
+ const [password, setPassword] = useState('')
+ const [reenterPassword, setReenterPassword] = useState('')
const [accept, setAccept] = useState(true)
const [showPassword, setShowPassword] = useState(false)
const handleClickShowPassword = () => setShowPassword(!showPassword)
const handleMouseDownPassword = () => setShowPassword(!showPassword)
+ const [showReenterPassword, setShowReenterPassword] = useState(false)
+ const handleClickShowReenterPassword = () => setShowReenterPassword(!showReenterPassword)
+ const handleMouseDownReenterPassword = () => setShowReenterPassword(!showReenterPassword)
// Function call for google oAuth sign up.
const handleGoogleSignup = () => {
@@ -95,21 +98,8 @@ export default function SignUp () {
margin='normal'
required
fullWidth
- id='username'
- label='Username'
- name='username'
- autoComplete='email'
- value={username}
- onChange={e => setUsername(e.target.value)}
- autoFocus
- />
- <TextField
- variant='outlined'
- margin='normal'
- required
- fullWidth
id='email'
- label='email'
+ label='Email'
name='email'
type='email'
autoComplete='email'
@@ -144,6 +134,33 @@ export default function SignUp () {
onChange={e => setPassword(e.target.value)}
autoComplete='current-password'
/>
+ <TextField
+ variant='outlined'
+ margin='normal'
+ required
+ fullWidth
+ name='reenterPassword'
+ label='Reenter Password'
+ InputProps={{
+ endAdornment: (
+ <InputAdornment position='end'>
+ <IconButton
+ size='small'
+ aria-label='toggle password visibility'
+ onClick={handleClickShowReenterPassword}
+ onMouseDown={handleMouseDownReenterPassword}
+ >
+ {showReenterPassword ? <Visibility fontSize='small' /> : <VisibilityOff fontSize='small' />} {/* Handle password visibility */}
+ </IconButton>
+ </InputAdornment>
+ )
+ }}
+ type={showReenterPassword ? 'text' : 'password'}
+ id='reenterPassword'
+ value={reenterPassword}
+ onChange={e => setReenterPassword(e.target.value)}
+ autoComplete='current-password'
+ />
<FormControlLabel
control={<Checkbox checked={accept} onChange={e => setAccept(e.target.checked)} color='primary' />}
label='I accept the Terms of Use & Privacy Policy'
@@ -152,7 +169,7 @@ export default function SignUp () {
fullWidth
variant='contained'
color='primary'
- onClick={() => dispatch(signUp(email, username, password, history))}
+ onClick={() => dispatch(signUp(email, password, reenterPassword, history))}
className={classes.submit}
disabled={!accept}
>
diff --git a/blocks/eda-frontend/src/redux/actions/actions.js b/blocks/eda-frontend/src/redux/actions/actions.js
index 5913d9e7..2dea52ec 100644
--- a/blocks/eda-frontend/src/redux/actions/actions.js
+++ b/blocks/eda-frontend/src/redux/actions/actions.js
@@ -23,7 +23,7 @@ export const SET_RESULT_GRAPH = 'SET_RESULT_GRAPH'
export const SET_RESULT_TEXT = 'SET_RESULT_TEXT'
export const SET_RESULT_TASK_ID = 'SET_RESULT_TASK_ID'
-// Actions for handling user authentication and registeration
+// Actions for handling user authentication and registration
export const USER_LOADING = 'USER_LOADING'
export const USER_LOADED = 'USER_LOADED'
export const LOGIN_SUCCESSFUL = 'LOGIN_SUCCESSFUL'
diff --git a/blocks/eda-frontend/src/redux/actions/authActions.js b/blocks/eda-frontend/src/redux/actions/authActions.js
index 43f82715..84819eb4 100644
--- a/blocks/eda-frontend/src/redux/actions/authActions.js
+++ b/blocks/eda-frontend/src/redux/actions/authActions.js
@@ -111,11 +111,12 @@ export const login = (username, password, toUrl) => {
}
// Handle api call for user sign up
-export const signUp = (email, username, password, history) => (dispatch) => {
+export const signUp = (email, password, reenterPassword, history) => (dispatch) => {
const body = {
email,
- username,
- password
+ username: email,
+ password,
+ re_password: reenterPassword
}
// add headers
@@ -140,13 +141,20 @@ export const signUp = (email, username, password, history) => (dispatch) => {
.catch((err) => {
const res = err.response
if (res.status === 400 || res.status === 403 || res.status === 401) {
- if (res.data.username !== undefined) {
- if (res.data.username[0].search('already') !== -1 && res.data.username[0].search('exists') !== -1) { dispatch(signUpError('Username Already Taken.')) }
+ const data = res.data
+ if (data.email !== undefined) {
+ dispatch(signUpError(data.email[0]))
+ } else if (data.password !== undefined) {
+ dispatch(signUpError(data.password[0]))
+ } else if (data.re_password !== undefined) {
+ dispatch(signUpError(data.re_password[0]))
+ } else if (data.non_field_errors !== undefined) {
+ dispatch(signUpError(data.non_field_errors[0]))
} else {
- dispatch(signUpError('Enter Valid Credentials.'))
+ dispatch(signUpError('Enter valid credentials.'))
}
} else {
- dispatch(signUpError('Something went wrong! Registeration Failed'))
+ dispatch(signUpError('Something went wrong! Registration Failed'))
}
})
}
diff --git a/blocks/init.sh b/blocks/init.sh
new file mode 100755
index 00000000..1557ef11
--- /dev/null
+++ b/blocks/init.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+### SETTINGS: Modify as required ###
+EMAIL='sunilshetye@rocketmail.com'
+PASSWORD=''
+### END OF SETTINGS ###
+
+rm -f xcosblocks.sqlite3
+
+./manage.py makemigrations -v0
+./manage.py migrate -v0
+./manage.py loaddata xcosblocks
+
+echo "from authAPI.models import User; User.objects.create_superuser('$EMAIL', '$EMAIL', '$PASSWORD')" |
+ ./manage.py shell