Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
api
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Merge Requests
0
Merge Requests
0
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
angular-meteor
api
Commits
43b54281
Commit
43b54281
authored
Dec 17, 2019
by
GD-A-150752
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
profile-update
parent
5de1083e
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
110 additions
and
10 deletions
+110
-10
config.ts
server/config.ts
+8
-0
roles.method.ts
server/methods/roles.method.ts
+5
-1
settings.method.ts
server/methods/settings.method.ts
+15
-0
users.method.ts
server/methods/users.method.ts
+40
-1
migrations.ts
server/migrations.ts
+15
-3
role.model.ts
server/models/role.model.ts
+3
-0
settings.publication.ts
server/publications/settings.publication.ts
+16
-1
email.service.ts
server/services/email.service.ts
+8
-4
No files found.
server/config.ts
View file @
43b54281
...
@@ -6,8 +6,16 @@ export const PERMISSIONS = {
...
@@ -6,8 +6,16 @@ export const PERMISSIONS = {
CAN_SEE_ALL_USERS
:
'CAN_SEE_ALL_USERS'
,
CAN_SEE_ALL_USERS
:
'CAN_SEE_ALL_USERS'
,
CAN_ACCESS_DASHBOARD_PAGE
:
'CAN_ACCESS_DASHBOARD_PAGE'
,
CAN_ACCESS_DASHBOARD_PAGE
:
'CAN_ACCESS_DASHBOARD_PAGE'
,
CAN_UPDATE_SETTINGS
:
'CAN_UPDATE_SETTINGS'
,
CAN_UPDATE_SETTINGS
:
'CAN_UPDATE_SETTINGS'
,
CAN_ACCESS_SETTINGS
:
'CAN_ACCESS_SETTINGS'
,
CAN_ACCESS_EMAIL_TEMPLATES
:
'CAN_ACCESS_EMAIL_TEMPLATES'
,
};
};
export
enum
ROLE_RANK
{
ADMIN
=
1
,
USER
,
BLOCKED
,
}
export
const
CONFIG
=
{
export
const
CONFIG
=
{
SiteName
:
'JIBC'
,
SiteName
:
'JIBC'
,
};
};
server/methods/roles.method.ts
View file @
43b54281
import
{
Meteor
}
from
'meteor/meteor'
;
import
{
Meteor
}
from
'meteor/meteor'
;
import
{
first
}
from
'rxjs/operators'
;
import
{
first
}
from
'rxjs/operators'
;
import
{
rolesCollection
}
from
'../collections/role.collection'
;
import
{
rolesCollection
}
from
'../collections/role.collection'
;
import
{
PERMISSIONS
}
from
'../config'
;
import
{
PERMISSIONS
,
ROLE_RANK
}
from
'../config'
;
import
{
RoleModel
}
from
'../models/role.model'
;
import
{
RoleModel
}
from
'../models/role.model'
;
import
{
UtilsService
}
from
'../services/utils.service'
;
import
{
UtilsService
}
from
'../services/utils.service'
;
...
@@ -17,4 +17,8 @@ Meteor.methods({
...
@@ -17,4 +17,8 @@ Meteor.methods({
throw
new
Meteor
.
Error
(
'Unable to add.'
,
JSON
.
stringify
(
e
));
throw
new
Meteor
.
Error
(
'Unable to add.'
,
JSON
.
stringify
(
e
));
}
}
},
},
getRoleSlug
(
id
):
ROLE_RANK
{
return
rolesCollection
.
findOne
(
id
).
Slug
;
},
});
});
server/methods/settings.method.ts
View file @
43b54281
...
@@ -19,4 +19,19 @@ Meteor.methods({
...
@@ -19,4 +19,19 @@ Meteor.methods({
throw
new
Meteor
.
Error
(
403
,
'Not Enough Permissions'
);
throw
new
Meteor
.
Error
(
403
,
'Not Enough Permissions'
);
}
}
},
},
updateEmailTemplates
(
setting
:
any
):
void
{
if
(
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_UPDATE_SETTINGS
))
{
settingsCollection
.
update
(
setting
.
id
,
{
$set
:
{
Value
:
{
SUBJECT
:
setting
.
subject
,
CONTENT
:
setting
.
content
,
},
},
});
}
else
{
throw
new
Meteor
.
Error
(
403
,
'Not Enough Permissions'
);
}
},
});
});
server/methods/users.method.ts
View file @
43b54281
...
@@ -28,13 +28,24 @@ Meteor.methods({
...
@@ -28,13 +28,24 @@ Meteor.methods({
},
},
};
};
const
userId
=
Accounts
.
createUser
(
userObj
);
const
userId
=
Accounts
.
createUser
(
userObj
);
EmailService
.
sendVerificationEmail
(
user
,
userId
);
const
usr
=
Accounts
.
findUserByUsername
(
user
.
username
);
EmailService
.
sendVerificationEmail
(
usr
,
userId
);
return
userId
;
return
userId
;
}
}
throw
new
Meteor
.
Error
(
422
,
'Email address already in use.'
);
throw
new
Meteor
.
Error
(
422
,
'Email address already in use.'
);
},
},
verifyEmailAddress
(
user
:
any
):
any
{
if
(
Accounts
.
findUserByEmail
(
user
.
email
))
{
const
usr
=
Accounts
.
findUserByEmail
(
user
.
email
);
EmailService
.
sendVerificationEmail
(
usr
,
user
.
_id
,
user
.
email
);
return
true
;
}
throw
new
Meteor
.
Error
(
422
,
'Email address already in use.'
);
},
updateUser
(
user
:
any
):
any
{
updateUser
(
user
:
any
):
any
{
if
(
!
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_UPDATE_OWN_USER
))
{
if
(
!
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_UPDATE_OWN_USER
))
{
throw
new
Meteor
.
Error
(
403
,
'Forbidden.'
);
throw
new
Meteor
.
Error
(
403
,
'Forbidden.'
);
...
@@ -50,6 +61,34 @@ Meteor.methods({
...
@@ -50,6 +61,34 @@ Meteor.methods({
}
}
},
},
addEmailAddress
(
user
:
any
):
any
{
if
(
!
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_UPDATE_OWN_USER
))
{
throw
new
Meteor
.
Error
(
403
,
'Forbidden.'
);
}
if
(
Accounts
.
findUserByEmail
(
user
.
email
))
{
throw
new
Meteor
.
Error
(
422
,
'Email address already in use.'
);
}
if
(
user
.
_id
&&
user
.
email
)
{
Accounts
.
addEmail
(
user
.
_id
,
user
.
email
);
return
true
;
}
throw
new
Meteor
.
Error
(
500
,
'Email Address is missing.'
);
},
removeEmailAddress
(
user
:
any
):
any
{
if
(
!
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_UPDATE_OWN_USER
))
{
throw
new
Meteor
.
Error
(
403
,
'Forbidden.'
);
}
if
(
user
.
_id
&&
user
.
email
)
{
Accounts
.
removeEmail
(
user
.
_id
,
user
.
email
);
return
true
;
}
throw
new
Meteor
.
Error
(
500
,
'Email Address is missing.'
);
},
checkUserByEmail
(
email
:
string
):
any
{
checkUserByEmail
(
email
:
string
):
any
{
return
Accounts
.
findUserByEmail
(
email
);
return
Accounts
.
findUserByEmail
(
email
);
},
},
...
...
server/migrations.ts
View file @
43b54281
import
{
settingsCollection
}
from
'./collections/setting.collections'
;
import
{
settingsCollection
}
from
'./collections/setting.collections'
;
import
{
PERMISSIONS
}
from
'./config'
;
import
{
PERMISSIONS
,
ROLE_RANK
}
from
'./config'
;
import
{
rolesCollection
}
from
'./collections/role.collection'
;
import
{
rolesCollection
}
from
'./collections/role.collection'
;
import
{
Meteor
}
from
'meteor/meteor'
;
import
{
Meteor
}
from
'meteor/meteor'
;
...
@@ -15,16 +15,19 @@ Migrations.add({
...
@@ -15,16 +15,19 @@ Migrations.add({
title
:
'Admin'
,
title
:
'Admin'
,
permissions
:
allPermissions
,
permissions
:
allPermissions
,
description
:
''
,
description
:
''
,
Slug
:
ROLE_RANK
.
ADMIN
,
});
});
rolesCollection
.
insert
({
rolesCollection
.
insert
({
title
:
'User'
,
title
:
'User'
,
permissions
:
[
PERMISSIONS
.
CAN_LOGIN
,
PERMISSIONS
.
CAN_UPDATE_OWN_USER
],
permissions
:
[
PERMISSIONS
.
CAN_LOGIN
,
PERMISSIONS
.
CAN_UPDATE_OWN_USER
],
description
:
''
,
description
:
''
,
Slug
:
ROLE_RANK
.
USER
,
});
});
rolesCollection
.
insert
({
rolesCollection
.
insert
({
title
:
'Blocked'
,
title
:
'Blocked'
,
permissions
:
[],
permissions
:
[],
description
:
''
,
description
:
''
,
Slug
:
ROLE_RANK
.
BLOCKED
,
});
});
}
else
{
}
else
{
rolesCollection
.
update
({
title
:
'Admin'
},
{
$set
:
{
permissions
:
allPermissions
}
});
rolesCollection
.
update
({
title
:
'Admin'
},
{
$set
:
{
permissions
:
allPermissions
}
});
...
@@ -35,18 +38,27 @@ Migrations.add({
...
@@ -35,18 +38,27 @@ Migrations.add({
// @ts-ignore
// @ts-ignore
Migrations
.
add
({
Migrations
.
add
({
version
:
2
,
version
:
2
,
name
:
'Adding Admin User'
,
name
:
'Adding Admin
&
User'
,
up
()
{
up
()
{
if
(
!
Meteor
.
users
.
find
({}).
fetch
().
length
)
{
if
(
!
Meteor
.
users
.
find
({}).
fetch
().
length
)
{
Accounts
.
createUser
({
Accounts
.
createUser
({
username
:
'admin'
,
username
:
'admin'
,
password
:
'
admin
'
,
password
:
'
Admin123
'
,
email
:
'ali.arshad@vqode.com'
,
email
:
'ali.arshad@vqode.com'
,
profile
:
{
profile
:
{
name
:
'Admin User'
,
name
:
'Admin User'
,
role
:
rolesCollection
.
findOne
({
title
:
'Admin'
}).
_id
,
role
:
rolesCollection
.
findOne
({
title
:
'Admin'
}).
_id
,
},
},
});
});
Accounts
.
createUser
({
username
:
'lead'
,
password
:
'Qweasdzxc1'
,
email
:
'lead@mailinator.com'
,
profile
:
{
name
:
'Lead'
,
role
:
rolesCollection
.
findOne
({
title
:
'User'
}).
_id
,
},
});
}
}
},
},
});
});
...
...
server/models/role.model.ts
View file @
43b54281
import
{
ROLE_RANK
}
from
'../config'
;
export
interface
RoleModel
{
export
interface
RoleModel
{
_id
?:
string
;
_id
?:
string
;
title
:
string
;
title
:
string
;
permissions
:
string
[];
permissions
:
string
[];
Slug
:
ROLE_RANK
;
description
:
string
;
description
:
string
;
}
}
server/publications/settings.publication.ts
View file @
43b54281
import
{
settingsCollection
}
from
'../collections/setting.collections'
;
import
{
settingsCollection
}
from
'../collections/setting.collections'
;
import
{
UtilsService
}
from
'../services/utils.service'
;
import
{
PERMISSIONS
}
from
'../config'
;
import
{
Meteor
}
from
'meteor/meteor'
;
Meteor
.
publish
(
'settings'
,
()
=>
settingsCollection
.
find
({}));
Meteor
.
publish
(
'settings'
,
()
=>
{
if
(
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_ACCESS_SETTINGS
))
{
return
settingsCollection
.
find
({});
}
throw
new
Meteor
.
Error
(
403
,
'Not Enough Permissions'
);
});
Meteor
.
publish
(
'email-templates'
,
()
=>
{
if
(
UtilsService
.
hasPermission
(
PERMISSIONS
.
CAN_ACCESS_EMAIL_TEMPLATES
))
{
return
settingsCollection
.
find
({
IsEmail
:
true
});
}
throw
new
Meteor
.
Error
(
403
,
'Not Enough Permissions'
);
});
server/services/email.service.ts
View file @
43b54281
import
{
CONFIG
}
from
'../config'
;
import
{
CONFIG
}
from
'../config'
;
import
{
settingsCollection
}
from
'../collections/setting.collections'
;
import
{
settingsCollection
}
from
'../collections/setting.collections'
;
import
{
rolesCollection
}
from
"../collections/role.collection"
;
export
class
EmailService
{
export
class
EmailService
{
static
sendVerificationEmail
(
user
:
any
,
userId
:
string
):
void
{
static
sendVerificationEmail
(
user
:
any
,
userId
:
string
,
email
=
false
):
void
{
Accounts
.
emailTemplates
.
siteName
=
CONFIG
.
SiteName
;
Accounts
.
emailTemplates
.
siteName
=
CONFIG
.
SiteName
;
const
defaultRole
=
rolesCollection
.
findOne
(
user
.
profile
.
role
);
// Will uncomment it later with domain email
// Will uncomment it later with domain email
// Accounts.emailTemplates.from = CONFIG.DomainEmail;
// Accounts.emailTemplates.from = CONFIG.DomainEmail;
...
@@ -16,13 +18,15 @@ export class EmailService {
...
@@ -16,13 +18,15 @@ export class EmailService {
const
token
=
url
.
substr
(
url
.
lastIndexOf
(
'/'
)
+
1
);
const
token
=
url
.
substr
(
url
.
lastIndexOf
(
'/'
)
+
1
);
const
link
=
`
${
process
.
env
.
appUrl
}
#/auth/verify-email/
${
token
}
`
;
const
link
=
`
${
process
.
env
.
appUrl
}
#/auth/verify-email/
${
token
}
`
;
const
content
:
any
=
settingsCollection
.
findOne
({
Key
:
'REGISTER'
});
const
content
:
any
=
settingsCollection
.
findOne
({
Key
:
'REGISTER'
});
return
content
.
Value
.
CONTENT
.
replace
(
/
\$
name/g
,
user
.
name
)
return
content
.
Value
.
CONTENT
.
replace
(
/
\$
name/g
,
user
.
profile
.
name
)
.
replace
(
/
\$
role/g
,
user
.
ro
le
)
.
replace
(
/
\$
role/g
,
defaultRole
.
tit
le
)
.
replace
(
/
\$
link/g
,
link
);
.
replace
(
/
\$
link/g
,
link
);
},
},
};
};
const
mail
=
email
?
email
:
user
.
emails
[
0
].
address
;
console
.
log
(
mail
,
userId
);
Accounts
.
sendVerificationEmail
(
userId
,
user
.
e
mail
);
Accounts
.
sendVerificationEmail
(
userId
,
mail
);
}
}
static
sendForgotPasswordEmail
(
user
:
Meteor
.
User
,
email
:
string
):
void
{
static
sendForgotPasswordEmail
(
user
:
Meteor
.
User
,
email
:
string
):
void
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment