@@ -4,6 +4,10 @@ const CourseGroup = require('../models/courseGroup');
44const User = require ( 'users' ) . User ;
55const _ = require ( 'lodash' ) ;
66
7+ const LOGIN_SUCCESSFUL = 1 ;
8+ const LOGGED_IN_ALREADY = 2 ;
9+ const NO_SUCH_USER = 3 ;
10+
711exports . all = function * ( ) {
812
913 if ( this . method != 'POST' && this . method != 'GET' ) {
@@ -61,23 +65,30 @@ exports.all = function*() {
6165
6266 var isLoggedIn = yield * loginByInvite . call ( this , invite ) ;
6367
64- if ( isLoggedIn ) {
65- yield * askCourseName . call ( this , invite ) ;
66- } else {
68+ if ( isLoggedIn == NO_SUCH_USER ) {
6769 if ( this . user ) this . logout ( ) ;
6870 yield * register . call ( this , invite ) ;
71+
72+ } else {
73+ if ( isLoggedIn == LOGIN_SUCCESSFUL ) {
74+ this . locals . wasLoggedIn = true ;
75+ }
76+ yield * askParticipantDetails . call ( this , invite ) ;
6977 }
7078
7179} ;
7280
73- function * askCourseName ( invite ) {
81+ function * askParticipantDetails ( invite ) {
7482
7583 // NB: this.user is the right user, guaranteed by loginByInvite
7684
7785 if ( this . method == 'POST' ) {
7886 yield acceptParticipant . call ( this , invite ) ;
7987 } else {
80- this . body = this . render ( 'invite/askCourseName' , {
88+
89+ this . locals . title = "Анкета участника\n" + invite . group . title ;
90+
91+ this . body = this . render ( 'invite/askParticipantDetails' , {
8192 errors : { } ,
8293 form : { }
8394 } ) ;
@@ -110,16 +121,15 @@ function* register(invite) {
110121 errors : e . errors ,
111122 form : {
112123 displayName : this . request . body . displayName ,
113- courseName : this . request . body . courseName ,
114124 password : this . request . body . password
115125 }
116126 } ) ;
117127 return ;
118128 }
119129
120130 yield this . login ( user ) ;
121- yield acceptParticipant . call ( this , invite ) ;
122131
132+ this . redirect ( '/courses/invite/' + invite . token ) ;
123133
124134 } else {
125135 this . body = this . render ( 'invite/register' , {
@@ -147,17 +157,23 @@ function* acceptParticipant(invite) {
147157 this . redirect ( '/courses/invite/' + invite . token ) ;
148158}
149159
160+ /**
161+ * Logs in the current user using invite data
162+ * Makes email verified
163+ * @param invite
164+ * @returns LOGIN_SUCCESSFUL / NO_SUCH_USER / LOGGED_IN_ALREADY
165+ */
150166function * loginByInvite ( invite ) {
151167
152168 if ( this . user && this . user . email == invite . email ) {
153- return true ;
169+ return LOGGED_IN_ALREADY ;
154170 }
155171
156172 var userByEmail = yield User . findOne ( {
157173 email : invite . email
158174 } ) . exec ( ) ;
159175
160- if ( ! userByEmail ) return false ;
176+ if ( ! userByEmail ) return NO_SUCH_USER ;
161177
162178 if ( ! userByEmail . verifiedEmail ) {
163179 // if pending verification => invite token confirms email
@@ -166,7 +182,6 @@ function* loginByInvite(invite) {
166182 } ) ;
167183 }
168184
169- this . locals . wasLoggedIn = true ;
170185 yield this . login ( userByEmail ) ;
171- return true ;
186+ return LOGIN_SUCCESSFUL ;
172187}
0 commit comments