@lenne.tech/nest-server 2.0.3 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.env.js +18 -5
- package/dist/config.env.js.map +1 -1
- package/dist/core/common/args/filter.args.js +3 -3
- package/dist/core/common/args/filter.args.js.map +1 -1
- package/dist/core/common/args/pagination.args.js +13 -13
- package/dist/core/common/args/pagination.args.js.map +1 -1
- package/dist/core/common/decorators/graphql-user.decorator.js +1 -1
- package/dist/core/common/decorators/graphql-user.decorator.js.map +1 -1
- package/dist/core/common/decorators/rest-user.decorator.js +1 -1
- package/dist/core/common/decorators/rest-user.decorator.js.map +1 -1
- package/dist/core/common/decorators/restricted.decorator.js +3 -3
- package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
- package/dist/core/common/decorators/roles.decorator.js +1 -1
- package/dist/core/common/decorators/roles.decorator.js.map +1 -1
- package/dist/core/common/enums/comparison-operator.enum.js +1 -1
- package/dist/core/common/enums/comparison-operator.enum.js.map +1 -1
- package/dist/core/common/enums/logical-operator.enum.js +1 -1
- package/dist/core/common/enums/logical-operator.enum.js.map +1 -1
- package/dist/core/common/enums/sort-order.emum.js +1 -1
- package/dist/core/common/enums/sort-order.emum.js.map +1 -1
- package/dist/core/common/helpers/file.helper.js +3 -3
- package/dist/core/common/helpers/file.helper.js.map +1 -1
- package/dist/core/common/helpers/input.helper.js +3 -3
- package/dist/core/common/helpers/input.helper.js.map +1 -1
- package/dist/core/common/helpers/service.helper.d.ts +3 -1
- package/dist/core/common/helpers/service.helper.js +23 -1
- package/dist/core/common/helpers/service.helper.js.map +1 -1
- package/dist/core/common/inputs/combined-filter.input.js +3 -3
- package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
- package/dist/core/common/inputs/filter.input.js +3 -3
- package/dist/core/common/inputs/filter.input.js.map +1 -1
- package/dist/core/common/inputs/single-filter.input.js +6 -6
- package/dist/core/common/inputs/single-filter.input.js.map +1 -1
- package/dist/core/common/inputs/sort.input.js +3 -3
- package/dist/core/common/inputs/sort.input.js.map +1 -1
- package/dist/core/common/interceptors/check-response.interceptor.js +3 -3
- package/dist/core/common/interceptors/check-response.interceptor.js.map +1 -1
- package/dist/core/common/interfaces/mailjet-options.interface.d.ts +4 -0
- package/dist/core/common/interfaces/mailjet-options.interface.js +3 -0
- package/dist/core/common/interfaces/mailjet-options.interface.js.map +1 -0
- package/dist/core/common/interfaces/server-options.interface.d.ts +4 -0
- package/dist/core/common/models/core-persistence.model.js +14 -14
- package/dist/core/common/models/core-persistence.model.js.map +1 -1
- package/dist/core/common/pipes/check-input.pipe.js +5 -5
- package/dist/core/common/pipes/check-input.pipe.js.map +1 -1
- package/dist/core/common/scalars/any.scalar.js +1 -1
- package/dist/core/common/scalars/any.scalar.js.map +1 -1
- package/dist/core/common/scalars/date.scalar.js +1 -1
- package/dist/core/common/scalars/date.scalar.js.map +1 -1
- package/dist/core/common/scalars/json.scalar.js +1 -1
- package/dist/core/common/scalars/json.scalar.js.map +1 -1
- package/dist/core/common/services/email.service.js +1 -1
- package/dist/core/common/services/email.service.js.map +1 -1
- package/dist/core/common/services/mailjet.service.d.ts +15 -0
- package/dist/core/common/services/mailjet.service.js +64 -0
- package/dist/core/common/services/mailjet.service.js.map +1 -0
- package/dist/core/common/services/template.service.js +2 -2
- package/dist/core/common/services/template.service.js.map +1 -1
- package/dist/core/modules/auth/core-auth.model.js +2 -2
- package/dist/core/modules/auth/core-auth.model.js.map +1 -1
- package/dist/core/modules/auth/core-auth.module.js +1 -1
- package/dist/core/modules/auth/core-auth.module.js.map +1 -1
- package/dist/core/modules/auth/core-auth.resolver.js +4 -4
- package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
- package/dist/core/modules/auth/guards/auth.guard.js +3 -3
- package/dist/core/modules/auth/guards/auth.guard.js.map +1 -1
- package/dist/core/modules/auth/guards/roles.guard.js +2 -2
- package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
- package/dist/core/modules/auth/jwt.strategy.js +2 -2
- package/dist/core/modules/auth/jwt.strategy.js.map +1 -1
- package/dist/core/modules/auth/services/core-auth.service.js +1 -1
- package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
- package/dist/core/modules/user/core-basic-user.service.d.ts +1 -1
- package/dist/core/modules/user/core-user.model.d.ts +3 -0
- package/dist/core/modules/user/core-user.model.js +35 -18
- package/dist/core/modules/user/core-user.model.js.map +1 -1
- package/dist/core/modules/user/core-user.service.d.ts +4 -3
- package/dist/core/modules/user/core-user.service.js +28 -1
- package/dist/core/modules/user/core-user.service.js.map +1 -1
- package/dist/core/modules/user/inputs/core-user-create.input.js +3 -3
- package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
- package/dist/core/modules/user/inputs/core-user.input.js +15 -15
- package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
- package/dist/core.module.js +5 -3
- package/dist/core.module.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/common/models/persistence.model.js +5 -5
- package/dist/server/common/models/persistence.model.js.map +1 -1
- package/dist/server/modules/auth/auth.model.js +2 -2
- package/dist/server/modules/auth/auth.model.js.map +1 -1
- package/dist/server/modules/auth/auth.module.js +1 -1
- package/dist/server/modules/auth/auth.module.js.map +1 -1
- package/dist/server/modules/auth/auth.resolver.js +4 -4
- package/dist/server/modules/auth/auth.resolver.js.map +1 -1
- package/dist/server/modules/file/file.controller.js +7 -7
- package/dist/server/modules/file/file.controller.js.map +1 -1
- package/dist/server/modules/user/avatar.controller.js +6 -6
- package/dist/server/modules/user/avatar.controller.js.map +1 -1
- package/dist/server/modules/user/inputs/user-create.input.js +1 -1
- package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
- package/dist/server/modules/user/inputs/user.input.js +1 -1
- package/dist/server/modules/user/inputs/user.input.js.map +1 -1
- package/dist/server/modules/user/user.model.d.ts +1 -1
- package/dist/server/modules/user/user.model.js +8 -8
- package/dist/server/modules/user/user.model.js.map +1 -1
- package/dist/server/modules/user/user.module.js +1 -1
- package/dist/server/modules/user/user.module.js.map +1 -1
- package/dist/server/modules/user/user.resolver.d.ts +3 -0
- package/dist/server/modules/user/user.resolver.js +55 -24
- package/dist/server/modules/user/user.resolver.js.map +1 -1
- package/dist/server/modules/user/user.service.d.ts +3 -0
- package/dist/server/modules/user/user.service.js +47 -6
- package/dist/server/modules/user/user.service.js.map +1 -1
- package/dist/server/server.controller.js +5 -5
- package/dist/server/server.controller.js.map +1 -1
- package/dist/server/server.module.js +1 -1
- package/dist/server/server.module.js.map +1 -1
- package/dist/test/test.helper.js +2 -2
- package/dist/test/test.helper.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +48 -54
- package/src/config.env.ts +14 -1
- package/src/core/common/helpers/service.helper.ts +34 -4
- package/src/core/common/interfaces/mailjet-options.interface.ts +4 -0
- package/src/core/common/interfaces/server-options.interface.ts +12 -0
- package/src/core/common/models/core-persistence.model.ts +1 -1
- package/src/core/common/services/mailjet.service.ts +84 -0
- package/src/core/modules/user/core-basic-user.service.ts +3 -3
- package/src/core/modules/user/core-user.model.ts +20 -0
- package/src/core/modules/user/core-user.service.ts +54 -8
- package/src/core.module.ts +3 -1
- package/src/index.ts +1 -0
- package/src/server/modules/user/user.resolver.ts +24 -0
- package/src/server/modules/user/user.service.ts +86 -4
- package/src/server/server.module.ts +0 -1
- package/src/templates/password-reset.ejs +3 -0
- package/src/templates/welcome.ejs +3 -2
- package/src/test/test.helper.ts +2 -2
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Inject,
|
|
3
|
+
Injectable,
|
|
4
|
+
NotFoundException,
|
|
5
|
+
UnauthorizedException,
|
|
6
|
+
UnprocessableEntityException,
|
|
7
|
+
} from '@nestjs/common';
|
|
2
8
|
import * as fs from 'fs';
|
|
3
9
|
import { GraphQLResolveInfo } from 'graphql';
|
|
4
10
|
import envConfig from '../../../config.env';
|
|
@@ -15,6 +21,8 @@ import { InjectModel } from '@nestjs/mongoose';
|
|
|
15
21
|
import { Model } from 'mongoose';
|
|
16
22
|
import { ICorePersistenceModel } from '../../../core/common/interfaces/core-persistence-model.interface';
|
|
17
23
|
import { PubSub } from 'graphql-subscriptions';
|
|
24
|
+
import * as crypto from 'crypto';
|
|
25
|
+
import * as bcrypt from 'bcrypt';
|
|
18
26
|
|
|
19
27
|
/**
|
|
20
28
|
* User service
|
|
@@ -55,17 +63,91 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
|
|
|
55
63
|
*/
|
|
56
64
|
async create(input: UserCreateInput, currentUser?: User, ...args: any[]): Promise<User> {
|
|
57
65
|
const user = await super.create(input, currentUser);
|
|
58
|
-
|
|
66
|
+
|
|
67
|
+
await this.prepareOutput(user, args[0]);
|
|
68
|
+
|
|
59
69
|
await this.pubSub.publish('userCreated', User.map(user));
|
|
70
|
+
|
|
71
|
+
const verificationToken = crypto.randomBytes(32).toString('hex');
|
|
72
|
+
await this.userModel.findByIdAndUpdate(user.id, { $set: { verificationToken } }).exec();
|
|
73
|
+
|
|
60
74
|
await this.emailService.sendMail(user.email, 'Welcome', {
|
|
61
75
|
htmlTemplate: 'welcome',
|
|
62
|
-
templateData: user,
|
|
63
|
-
text,
|
|
76
|
+
templateData: { name: user.username, link: envConfig.email.verificationLink + '/' + verificationToken },
|
|
64
77
|
});
|
|
65
78
|
|
|
66
79
|
return user;
|
|
67
80
|
}
|
|
68
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Verify user with token
|
|
84
|
+
*
|
|
85
|
+
* @param token
|
|
86
|
+
*/
|
|
87
|
+
async verify(token: string): Promise<boolean> {
|
|
88
|
+
const user = await this.userModel.findOne({ verificationToken: token }).exec();
|
|
89
|
+
|
|
90
|
+
if (!user) {
|
|
91
|
+
throw new NotFoundException();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (!user.verificationToken) {
|
|
95
|
+
throw new Error('User has no token');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (user.verified) {
|
|
99
|
+
throw new Error('User already verified');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
await this.userModel.findByIdAndUpdate(user.id, { $set: { verified: true, verificationToken: null } }).exec();
|
|
103
|
+
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Set newpassword for user with token
|
|
109
|
+
*
|
|
110
|
+
* @param token
|
|
111
|
+
* @param newPassword
|
|
112
|
+
*/
|
|
113
|
+
async resetPassword(token: string, newPassword: string): Promise<boolean> {
|
|
114
|
+
const user = await this.userModel.findOne({ passwordResetToken: token }).exec();
|
|
115
|
+
|
|
116
|
+
if (!user) {
|
|
117
|
+
throw new NotFoundException();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const cryptedPassword = await bcrypt.hash(newPassword, 10);
|
|
121
|
+
await this.userModel
|
|
122
|
+
.findByIdAndUpdate(user.id, { $set: { password: cryptedPassword, passwordResetToken: null } })
|
|
123
|
+
.exec();
|
|
124
|
+
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Request email with password reset link
|
|
130
|
+
*
|
|
131
|
+
* @param email
|
|
132
|
+
*/
|
|
133
|
+
async requestPasswordResetMail(email: string): Promise<boolean> {
|
|
134
|
+
const user = await this.userModel.findOne({ email }).exec();
|
|
135
|
+
|
|
136
|
+
if (!user) {
|
|
137
|
+
throw new NotFoundException();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const resetToken = crypto.randomBytes(32).toString('hex');
|
|
141
|
+
await this.userModel.findByIdAndUpdate(user.id, { $set: { passwordResetToken: resetToken } }).exec();
|
|
142
|
+
|
|
143
|
+
await this.emailService.sendMail(user.email, 'Password reset', {
|
|
144
|
+
htmlTemplate: 'password-reset',
|
|
145
|
+
templateData: { name: user.username, link: envConfig.email.passwordResetLink + '/' + resetToken },
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
|
|
69
151
|
/**
|
|
70
152
|
* Get users via filter
|
|
71
153
|
*/
|
|
@@ -4,7 +4,6 @@ import { CoreModule } from '../core.module';
|
|
|
4
4
|
import { AuthModule } from './modules/auth/auth.module';
|
|
5
5
|
import { FileController } from './modules/file/file.controller';
|
|
6
6
|
import { ServerController } from './server.controller';
|
|
7
|
-
import { PubSub } from 'graphql-subscriptions';
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* Server module (dynamic)
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
<h1>Welcome <%=
|
|
2
|
-
<p>
|
|
1
|
+
<h1>Welcome <%= name %>,</h1>
|
|
2
|
+
<p>please confirm your email address.</p>
|
|
3
|
+
<a href="<%= link %>">E-Mail bestätigen</a>
|
package/src/test/test.helper.ts
CHANGED
|
@@ -113,7 +113,7 @@ export class TestHelper {
|
|
|
113
113
|
/**
|
|
114
114
|
* GraphQL request
|
|
115
115
|
* @param graphql
|
|
116
|
-
* @param
|
|
116
|
+
* @param options
|
|
117
117
|
*/
|
|
118
118
|
async graphQl(graphql: string | TestGraphQLConfig, options: TestGraphQLOptions = {}): Promise<any> {
|
|
119
119
|
// Default options
|
|
@@ -148,7 +148,7 @@ export class TestHelper {
|
|
|
148
148
|
graphql = Object.assign(
|
|
149
149
|
{
|
|
150
150
|
arguments: null,
|
|
151
|
-
fields: [
|
|
151
|
+
fields: [],
|
|
152
152
|
name: null,
|
|
153
153
|
type: TestGraphQLType.QUERY,
|
|
154
154
|
},
|