Skip to content

Commit 5bcf3ae

Browse files
committed
user registration
1 parent ddfbd77 commit 5bcf3ae

5 files changed

Lines changed: 80 additions & 54 deletions

File tree

pegr/grails-app/assets/stylesheets/pegr.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ footer {
125125
}
126126

127127
#login-form, #register-form {
128-
max-width:330px;
128+
max-width:400px;
129129
padding: 40px 10px;
130130
}
131131

pegr/grails-app/controllers/pegr/UserController.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ class UserController {
105105
}
106106
}
107107

108+
def selfRegister(User user) {
109+
try {
110+
userService.create(user.email, [], false, user.fullName)
111+
flash.message = "You have registered with PEGR. Please login."
112+
} catch (UserException e) {
113+
flash.error = e.message
114+
}
115+
redirect(url: '/login/auth')
116+
}
117+
108118
def generateApiKey() {
109119
try {
110120
userService.generateApiKey()

pegr/grails-app/controllers/pegr/admin/UserAdminController.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class UserAdminController {
162162
if (params.groupIds) {
163163
groupIds = params.list("groupIds")
164164
}
165-
165+
166166
if (cmd.hasErrors()) {
167167
render(view: "index", model: [users: [], cmd: cmd])
168168
return
@@ -201,5 +201,6 @@ class CreateUserCommand implements grails.validation.Validateable {
201201

202202
static constraints = {
203203
email email: true, nullable: false, blank: false
204+
sendEmail nullable: true, blank: true
204205
}
205206
}

pegr/grails-app/services/pegr/UserService.groovy

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -56,39 +56,25 @@ class UserService {
5656
}
5757

5858
@Transactional
59-
def create(String email, List groupIds, Boolean sendEmail){
60-
def username, locked, text
59+
def create(String email, List groupIds, Boolean sendEmail, String fullName=null){
6160
if(User.findByEmail(email)) {
6261
throw new UserException(message: "Email has already been used!")
6362
}
6463

65-
// parse the email
66-
def emailParts = email.split('@')
67-
def emailServer = emailParts[1]
68-
if (emailServer == "psu.edu") {
69-
username = emailParts[0]
70-
if (User.findByUsername(username)) {
71-
throw new UserException(message: "Username ${username} has already been registered with PEGR!")
72-
}
73-
locked = false
74-
def url = grailsLinkGenerator.link(controller: 'login', action: 'auth', absolute: true)
75-
text = "You can now login to PEGR ${url} with PSU Web Access."
76-
} else {
77-
username = email
78-
if (User.findByUsername(username)) {
79-
throw new UserException(message: "Username ${username} has already been registered with PEGR!")
80-
}
81-
locked = true
82-
}
64+
def username = email
65+
if (User.findByUsername(username)) {
66+
throw new UserException(message: "Username ${username} has already been registered with PEGR!")
67+
}
8368

8469
// assign a random password
8570
def password = springSecurityService.encodePassword(utilityService.getRandomString(15))
8671

8772
def user = new User(username: username,
8873
email: email,
8974
password: password,
90-
accountLocked: locked,
91-
enabled: true
75+
accountLocked: false,
76+
enabled: true,
77+
fullName: fullName
9278
)
9379
user.save(flush: true, failOnError: true)
9480

@@ -100,22 +86,23 @@ class UserService {
10086
}
10187
}
10288

103-
// create token
104-
if (emailServer != "psu.edu") {
89+
// send email
90+
if (sendEmail) {
10591
def length = 32
10692
def token = utilityService.getRandomString(length)
10793
new Token(token: token, user: user, date: new Date()).save()
10894

10995
def url = grailsLinkGenerator.link(controller: 'user', action: 'register', params: [token:token], absolute: true)
110-
text = "Your account has been created in PEGR. Please follow the link ${url} to set up your username and password."
111-
}
112-
113-
// send email
114-
if (sendEmail) {
115-
mailService.sendMail {
116-
to email
117-
subject "[PEGR] Account Information"
118-
body text
96+
def text = "Your account has been created in PEGR. Please follow the link ${url} to set up your username and password."
97+
98+
try {
99+
mailService.sendMail {
100+
to email
101+
subject "[PEGR] Account Information"
102+
body text
103+
}
104+
} catch (Exception e) {
105+
throw new UserException(message: "Error sending the email!")
119106
}
120107
}
121108
return user

pegr/grails-app/views/login/auth.gsp

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,56 @@
55
</head>
66
<body>
77
<div class="container-fluid" id="login-form">
8+
<g:if test="${flash.error}">
9+
<div class="alert alert-danger">${flash.error}</div>
10+
</g:if>
11+
<g:if test="${flash.message}">
12+
<div class="alert alert-info">${flash.message}</div>
13+
</g:if>
814
<ul class="nav nav-tabs">
9-
<li class="active"><a href="#">PEGR Login</a></li>
10-
<li><a href="${grailsApplication.config.getProperty('sso.url')}">Single Sign-On</a></li>
15+
<li class="nav-item active">
16+
<a class="nav-link" data-toggle="tab" href="#password-login">PEGR Login</a>
17+
</li>
18+
<li class="nav-item">
19+
<a class="nav-link" href="${grailsApplication.config.getProperty('sso.url')}">Single Sign-On</a>
20+
</li>
21+
<li class="nav-item">
22+
<a class="nav-link" data-toggle="tab" href="#register">Register</a>
23+
</li>
1124
</ul>
12-
<g:form uri="/login/authenticate" method="POST" role="form">
13-
<g:if test="${flash.message}">
14-
<div class="alert alert-danger">${flash.message}</div>
15-
</g:if>
16-
<div class="form-group">
17-
<label for="username">Username </label>
18-
<g:textField class="form-control" name="username" value="${username}" placeholder="Enter Username"/>
25+
<div class="tab-content" style="padding-top:10px">
26+
<div class="tab-pane active" id="password-login">
27+
<g:form uri="/login/authenticate" method="POST" role="form">
28+
<div class="form-group">
29+
<label for="username">Username </label>
30+
<g:textField class="form-control" name="username" value="${username}" placeholder="Enter Username"/>
31+
</div>
32+
<div class="form-group">
33+
<label for="password">Password </label>
34+
<g:passwordField class="form-control" name="password" placeholder="Enter Password"/>
35+
</div>
36+
<div class="form-group">
37+
<label><g:checkBox name="remember-me" value="true"/> Remember me</label> | <g:link controller="user" action="forgetPassword">Forget Password</g:link>
38+
</div>
39+
<div class="form-group">
40+
<g:submitButton name="signIn" value="Sign in" class="btn btn-primary"/>
41+
</div>
42+
</g:form>
1943
</div>
20-
<div class="form-group">
21-
<label for="password">Password </label>
22-
<g:passwordField class="form-control" name="password" placeholder="Enter Password"/>
44+
<div class="tab-pane" id="register">
45+
<g:form uri="/user/selfRegister" method="POST" role="form">
46+
<p>* Single Sign-On users only</p>
47+
<div class="form-group">
48+
<label for="fullName">Full Name </label>
49+
<g:textField class="form-control" name="fullName" value="${fullName}" placeholder="Enter Full Name"/>
50+
<label for="email">Email </label>
51+
<g:textField class="form-control" name="email" value="${email}" placeholder="Enter Email"/>
52+
</div>
53+
<div class="form-group">
54+
<g:submitButton name="signIn" value="Register" class="btn btn-primary"/>
55+
</div>
56+
</g:form>
2357
</div>
24-
<div class="form-group">
25-
<label><g:checkBox name="remember-me" value="true"/> Remember me</label> | <g:link controller="user" action="forgetPassword">Forget Password</g:link>
26-
</div>
27-
<div class="form-group">
28-
<g:submitButton name="signIn" value="Sign in" class="btn btn-primary"/>
29-
</div>
30-
</g:form>
58+
</div>
3159
</div>
3260
</body>

0 commit comments

Comments
 (0)