Browse Source

Merge branch 'dev' of https://github.com/abpframework/abp into dev

pull/1969/head
mehmet-erim 7 years ago
parent
commit
c49ae7d93b
  1. 6
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs
  2. 7
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
  3. 4
      modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebAutoMapperProfile.cs
  4. 1
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml
  5. 4
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs
  6. 1
      modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs
  7. 16
      npm/ng-packs/.vscode/settings.json
  8. 36
      npm/ng-packs/packages/core/src/lib/services/config-state.service.ts
  9. 4
      npm/ng-packs/packages/core/src/lib/services/session-state.service.ts
  10. 52
      npm/ng-packs/packages/core/src/lib/states/config.state.ts
  11. 6
      npm/ng-packs/packages/core/src/lib/states/profile.state.ts
  12. 6
      npm/ng-packs/packages/core/src/lib/states/session.state.ts
  13. 21
      npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts
  14. 21
      npm/ng-packs/packages/core/src/lib/tests/profile-state.service.spec.ts
  15. 21
      npm/ng-packs/packages/core/src/lib/tests/session-state.service.spec.ts
  16. 22
      npm/ng-packs/packages/feature-management/src/lib/tests/feature-management-state.service.spec.ts
  17. 4
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.html
  18. 2
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts
  19. 21
      npm/ng-packs/packages/identity/src/lib/tests/identity-state.service.spec.ts
  20. 21
      npm/ng-packs/packages/permission-management/src/lib/tests/permission-management-state.service.spec.ts
  21. 21
      npm/ng-packs/packages/tenant-management/src/lib/tests/tenant-management-state.service.spec.ts
  22. 21
      npm/ng-packs/packages/theme-basic/src/lib/tests/layout-state.service.spec.ts

6
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs

@ -1,9 +1,13 @@
using Volo.Abp.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
{
public class IdentityUserUpdateDto : IdentityUserCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
[StringLength(IdentityUserConsts.MaxPasswordLength)]
public string Password { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

7
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs

@ -72,6 +72,13 @@ namespace Volo.Abp.Identity
(await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
await UpdateUserByInput(user, input);
(await _userManager.UpdateAsync(user)).CheckErrors();
if (!input.Password.IsNullOrEmpty())
{
(await _userManager.RemovePasswordAsync(user)).CheckErrors();
(await _userManager.AddPasswordAsync(user, input.Password)).CheckErrors();
}
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);

4
modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebAutoMapperProfile.cs

@ -1,4 +1,5 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Volo.Abp.Identity.Web.Pages.Identity.Roles;
using CreateUserModalModel = Volo.Abp.Identity.Web.Pages.Identity.Users.CreateModalModel;
using EditUserModalModel = Volo.Abp.Identity.Web.Pages.Identity.Users.EditModalModel;
@ -16,7 +17,8 @@ namespace Volo.Abp.Identity.Web
private void CreateUserMappings()
{
//List
CreateMap<IdentityUserDto, EditUserModalModel.UserInfoViewModel>();
CreateMap<IdentityUserDto, EditUserModalModel.UserInfoViewModel>()
.Ignore(x => x.Password);
//CreateModal
CreateMap<CreateUserModalModel.UserInfoViewModel, IdentityUserCreateDto>()

1
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml

@ -19,6 +19,7 @@
<abp-input asp-for="UserInfo.UserName" />
<abp-input asp-for="UserInfo.Name" />
<abp-input asp-for="UserInfo.Surname" />
<abp-input asp-for="UserInfo.Password" />
<abp-input asp-for="UserInfo.Email" />
<abp-input asp-for="UserInfo.PhoneNumber" />
<abp-input asp-for="UserInfo.LockoutEnabled" />

4
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs

@ -72,6 +72,10 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
[StringLength(IdentityUserConsts.MaxSurnameLength)]
public string Surname { get; set; }
[StringLength(IdentityUserConsts.MaxPasswordLength)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[EmailAddress]
[StringLength(IdentityUserConsts.MaxEmailLength)]

1
modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs

@ -100,6 +100,7 @@ namespace Volo.Abp.Identity
LockoutEnabled = true,
TwoFactorEnabled = true,
PhoneNumber = CreateRandomPhoneNumber(),
Password = "123qwe4R*",
Email = CreateRandomEmail(),
RoleNames = new[] { "admin", "moderator" },
ConcurrencyStamp = johnNash.ConcurrencyStamp,

16
npm/ng-packs/.vscode/settings.json

@ -5,18 +5,18 @@
"tslint.rulesDirectory": "../node_modules/codelyzer",
"typescript.tsdk": "../node_modules/typescript/lib",
"workbench.colorCustomizations": {
"activityBar.background": "#90164b",
"activityBar.background": "#258ecd",
"activityBar.foreground": "#e7e7e7",
"activityBar.inactiveForeground": "#e7e7e799",
"activityBarBadge.background": "#0e1c04",
"activityBarBadge.foreground": "#e7e7e7",
"titleBar.activeBackground": "#640f34",
"titleBar.inactiveBackground": "#640f3499",
"activityBarBadge.background": "#f0aed7",
"activityBarBadge.foreground": "#15202b",
"titleBar.activeBackground": "#1d70a2",
"titleBar.inactiveBackground": "#1d70a299",
"titleBar.activeForeground": "#e7e7e7",
"titleBar.inactiveForeground": "#e7e7e799",
"statusBar.background": "#640f34",
"statusBarItem.hoverBackground": "#90164b",
"statusBar.background": "#1d70a2",
"statusBarItem.hoverBackground": "#258ecd",
"statusBar.foreground": "#e7e7e7"
},
"peacock.color": "#640f34"
"peacock.color": "#1D70A2"
}

36
npm/ng-packs/packages/core/src/lib/services/config-state.service.ts

@ -12,15 +12,39 @@ export class ConfigStateService {
return this.store.selectSnapshot(ConfigState.getAll);
}
getOne(key: string) {
return this.store.selectSnapshot(ConfigState.getOne(key));
getApplicationInfo() {
return this.store.selectSnapshot(ConfigState.getApplicationInfo);
}
getDeep(keys: string[] | string) {
return this.store.selectSnapshot(ConfigState.getDeep(keys));
getOne(...args: Parameters<typeof ConfigState.getOne>) {
return this.store.selectSnapshot(ConfigState.getOne(...args));
}
getSetting(key: string) {
return this.store.selectSnapshot(ConfigState.getSetting(key));
getDeep(...args: Parameters<typeof ConfigState.getDeep>) {
return this.store.selectSnapshot(ConfigState.getDeep(...args));
}
getRoute(...args: Parameters<typeof ConfigState.getRoute>) {
return this.store.selectSnapshot(ConfigState.getRoute(...args));
}
getApiUrl(...args: Parameters<typeof ConfigState.getApiUrl>) {
return this.store.selectSnapshot(ConfigState.getApiUrl(...args));
}
getSetting(...args: Parameters<typeof ConfigState.getSetting>) {
return this.store.selectSnapshot(ConfigState.getSetting(...args));
}
getSettings(...args: Parameters<typeof ConfigState.getSettings>) {
return this.store.selectSnapshot(ConfigState.getSettings(...args));
}
getGrantedPolicy(...args: Parameters<typeof ConfigState.getGrantedPolicy>) {
return this.store.selectSnapshot(ConfigState.getGrantedPolicy(...args));
}
getLocalization(...args: Parameters<typeof ConfigState.getLocalization>) {
return this.store.selectSnapshot(ConfigState.getLocalization(...args));
}
}

4
npm/ng-packs/packages/core/src/lib/services/session-state.service.ts

@ -2,7 +2,9 @@ import { Injectable } from '@angular/core';
import { Store } from '@ngxs/store';
import { SessionState } from '../states';
@Injectable()
@Injectable({
providedIn: 'root',
})
export class SessionStateService {
constructor(private store: Store) {}

52
npm/ng-packs/packages/core/src/lib/states/config.state.ts

@ -130,58 +130,6 @@ export class ConfigState {
return selector;
}
/**
*
* @deprecated, Use getLocalization instead. To be delete in v1
*/
static getCopy(key: string, ...interpolateParams: string[]) {
if (!key) key = '';
const keys = key.split('::') as string[];
const selector = createSelector(
[ConfigState],
(state: Config.State) => {
if (!state.localization) return key;
const { defaultResourceName } = state.environment.localization;
if (keys[0] === '') {
if (!defaultResourceName) {
throw new Error(
`Please check your environment. May you forget set defaultResourceName?
Here is the example:
{ production: false,
localization: {
defaultResourceName: 'MyProjectName'
}
}`,
);
}
keys[0] = snq(() => defaultResourceName);
}
let copy = (keys as any).reduce((acc, val) => {
if (acc) {
return acc[val];
}
return undefined;
}, state.localization.values);
interpolateParams = interpolateParams.filter(params => params != null);
if (copy && interpolateParams && interpolateParams.length) {
interpolateParams.forEach(param => {
copy = copy.replace(/[\'\"]?\{[\d]+\}[\'\"]?/, param);
});
}
return copy || key;
},
);
return selector;
}
static getLocalization(key: string | Config.LocalizationWithDefault, ...interpolateParams: string[]) {
let defaultValue: string;

6
npm/ng-packs/packages/core/src/lib/states/profile.state.ts

@ -1,8 +1,8 @@
import { State, Action, StateContext, Selector } from '@ngxs/store';
import { GetProfile, ChangePassword, UpdateProfile } from '../actions/profile.actions';
import { Action, Selector, State, StateContext } from '@ngxs/store';
import { tap } from 'rxjs/operators';
import { ChangePassword, GetProfile, UpdateProfile } from '../actions/profile.actions';
import { Profile } from '../models/profile';
import { ProfileService } from '../services/profile.service';
import { tap } from 'rxjs/operators';
@State<Profile.State>({
name: 'ProfileState',

6
npm/ng-packs/packages/core/src/lib/states/session.state.ts

@ -1,10 +1,10 @@
import { Action, Selector, State, StateContext } from '@ngxs/store';
import { from } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { GetAppConfiguration } from '../actions/config.actions';
import { SetLanguage, SetTenant } from '../actions/session.actions';
import { ABP, Session } from '../models';
import { GetAppConfiguration } from '../actions/config.actions';
import { LocalizationService } from '../services/localization.service';
import { from, combineLatest } from 'rxjs';
import { switchMap } from 'rxjs/operators';
@State<Session.State>({
name: 'SessionState',

21
npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { ConfigStateService } from '../services/config-state.service';
import { ConfigState } from '../states';
import { Store } from '@ngxs/store';
describe('ConfigStateService', () => {
let service: ConfigStateService;
let spectator: SpectatorService<ConfigStateService>;
const createService = createServiceFactory({ service: ConfigStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all ConfigState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
ConfigState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

21
npm/ng-packs/packages/core/src/lib/tests/profile-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { ProfileStateService } from '../services/profile-state.service';
import { ProfileState } from '../states/profile.state';
import { Store } from '@ngxs/store';
describe('ProfileStateService', () => {
let service: ProfileStateService;
let spectator: SpectatorService<ProfileStateService>;
const createService = createServiceFactory({ service: ProfileStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all ProfileState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
ProfileState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

21
npm/ng-packs/packages/core/src/lib/tests/session-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { SessionStateService } from '../services/session-state.service';
import { SessionState } from '../states/session.state';
import { Store } from '@ngxs/store';
describe('SessionStateService', () => {
let service: SessionStateService;
let spectator: SpectatorService<SessionStateService>;
const createService = createServiceFactory({ service: SessionStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all SessionState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
SessionState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

22
npm/ng-packs/packages/feature-management/src/lib/tests/feature-management-state.service.spec.ts

@ -0,0 +1,22 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { Store } from '@ngxs/store';
import { FeatureManagementStateService } from '../services/feature-management-state.service';
import { FeatureManagementState } from '../states';
describe('FeatureManagementStateService', () => {
let service: FeatureManagementStateService;
let spectator: SpectatorService<FeatureManagementStateService>;
const createService = createServiceFactory({ service: FeatureManagementStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all FeatureManagementState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
FeatureManagementState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

4
npm/ng-packs/packages/identity/src/lib/components/users/users.component.html

@ -137,9 +137,9 @@
<input type="text" id="surname" class="form-control" formControlName="surname" />
</div>
<div *ngIf="!selected.userName" class="form-group">
<div class="form-group">
<label for="password">{{ 'AbpIdentity::Password' | abpLocalization }}</label
><span> * </span>
><span *ngIf="!selected.userName"> * </span>
<input
type="password"
id="password"

2
npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts

@ -94,6 +94,8 @@ export class UsersComponent implements OnInit {
if (!this.selected.userName) {
this.form.addControl('password', new FormControl('', [Validators.required, Validators.maxLength(32)]));
} else {
this.form.addControl('password', new FormControl('', [Validators.maxLength(32)]));
}
});
}

21
npm/ng-packs/packages/identity/src/lib/tests/identity-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { IdentityStateService } from '../services/identity-state.service';
import { IdentityState } from '../states/identity.state';
import { Store } from '@ngxs/store';
describe('IdentityStateService', () => {
let service: IdentityStateService;
let spectator: SpectatorService<IdentityStateService>;
const createService = createServiceFactory({ service: IdentityStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all IdentityState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
IdentityState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

21
npm/ng-packs/packages/permission-management/src/lib/tests/permission-management-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { PermissionManagementStateService } from '../services/permission-management-state.service';
import { PermissionManagementState } from '../states/permission-management.state';
import { Store } from '@ngxs/store';
describe('PermissionManagementStateService', () => {
let service: PermissionManagementStateService;
let spectator: SpectatorService<PermissionManagementStateService>;
const createService = createServiceFactory({ service: PermissionManagementStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all PermissionManagementState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
PermissionManagementState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

21
npm/ng-packs/packages/tenant-management/src/lib/tests/tenant-management-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { TenantManagementStateService } from '../services/tenant-management-state.service';
import { TenantManagementState } from '../states/tenant-management.state';
import { Store } from '@ngxs/store';
describe('TenantManagementStateService', () => {
let service: TenantManagementStateService;
let spectator: SpectatorService<TenantManagementStateService>;
const createService = createServiceFactory({ service: TenantManagementStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all TenantManagementState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
TenantManagementState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});

21
npm/ng-packs/packages/theme-basic/src/lib/tests/layout-state.service.spec.ts

@ -0,0 +1,21 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { LayoutStateService } from '../services/layout-state.service';
import { LayoutState } from '../states/layout.state';
import { Store } from '@ngxs/store';
describe('LayoutStateService', () => {
let service: LayoutStateService;
let spectator: SpectatorService<LayoutStateService>;
const createService = createServiceFactory({ service: LayoutStateService, mocks: [Store] });
beforeEach(() => {
spectator = createService();
service = spectator.service;
});
test('should have the all LayoutState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
LayoutState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
});
});
});
Loading…
Cancel
Save