Merge branch 'master' of https://git.loafle.net/overflow/overflow-webapp
This commit is contained in:
commit
3cdee810bb
|
@ -37,12 +37,18 @@ export class Effects {
|
||||||
@Effect({ dispatch: false })
|
@Effect({ dispatch: false })
|
||||||
signinSuccess$ = this.actions$
|
signinSuccess$ = this.actions$
|
||||||
.ofType(ActionType.SigninSuccess)
|
.ofType(ActionType.SigninSuccess)
|
||||||
|
.map((action: SigninSuccess) => action.payload)
|
||||||
.do(
|
.do(
|
||||||
() => {
|
(result: Map<string, any>) => {
|
||||||
let queryString: string;
|
const authToken = result['authToken'];
|
||||||
if (this.cookieService.check('AuthToken')) {
|
// console.log(`authToken: ${authToken}`);
|
||||||
queryString = `AuthToken=${this.cookieService.get('AuthToken')}`;
|
|
||||||
}
|
const expires = new Date();
|
||||||
|
expires.setDate(expires.getDate() + 1);
|
||||||
|
this.cookieService.set('authToken', authToken, expires, '/');
|
||||||
|
|
||||||
|
const queryString = `authToken=${authToken}`;
|
||||||
|
|
||||||
this.rpcClient.connect(queryString);
|
this.rpcClient.connect(queryString);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,14 +12,10 @@ import 'rxjs/add/observable/throw';
|
||||||
import { RESTError } from '../error';
|
import { RESTError } from '../error';
|
||||||
|
|
||||||
export class RESTClient {
|
export class RESTClient {
|
||||||
private readonly httpHeaders: HttpHeaders;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private _baseURL: string,
|
private _baseURL: string,
|
||||||
private _httpClient: HttpClient,
|
private _httpClient: HttpClient,
|
||||||
) {
|
) {
|
||||||
this.httpHeaders = new HttpHeaders()
|
|
||||||
.set('Content-Type', 'application/json');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public get httpClient(): HttpClient {
|
public get httpClient(): HttpClient {
|
||||||
|
@ -39,11 +35,15 @@ export class RESTClient {
|
||||||
reportProgress?: boolean;
|
reportProgress?: boolean;
|
||||||
withCredentials?: boolean;
|
withCredentials?: boolean;
|
||||||
}): Observable<T> {
|
}): Observable<T> {
|
||||||
const headers: HttpHeaders = this.httpHeaders;
|
// options.withCredentials = true;
|
||||||
|
|
||||||
return this._httpClient
|
return this._httpClient
|
||||||
.request(method, Location.joinWithSlash(this._baseURL, entry), options)
|
.request<T>(method, Location.joinWithSlash(this._baseURL, entry), options)
|
||||||
.map((response: string) => <T>JSON.parse(response))
|
.map(
|
||||||
|
(response: T) => {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
)
|
||||||
.catch((error: HttpErrorResponse) => {
|
.catch((error: HttpErrorResponse) => {
|
||||||
const aryMsg = error.error.message.split('|');
|
const aryMsg = error.error.message.split('|');
|
||||||
const resError: RESTError = {
|
const resError: RESTError = {
|
||||||
|
|
|
@ -17,13 +17,13 @@ export class MemberService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public signin(email: string, password: string): Observable<DomainMember> {
|
public signin(email: string, password: string): Observable<any> {
|
||||||
const body = {
|
const body = {
|
||||||
signinId: email,
|
signinId: email,
|
||||||
signinPw: password,
|
signinPw: password,
|
||||||
};
|
};
|
||||||
|
|
||||||
return this.restClient.request<DomainMember>('post', '/account/signin', {
|
return this.restClient.request<any>('post', '/account/signin', {
|
||||||
body: body,
|
body: body,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ export class Signin implements Action {
|
||||||
export class SigninSuccess implements Action {
|
export class SigninSuccess implements Action {
|
||||||
readonly type = ActionType.SigninSuccess;
|
readonly type = ActionType.SigninSuccess;
|
||||||
|
|
||||||
constructor(public payload: DomainMember) {}
|
constructor(public payload: any) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SigninFailure implements Action {
|
export class SigninFailure implements Action {
|
||||||
|
|
|
@ -47,8 +47,8 @@ export class Effects {
|
||||||
this._options = payload.options;
|
this._options = payload.options;
|
||||||
return this.memberService.signin(payload.email, payload.password);
|
return this.memberService.signin(payload.email, payload.password);
|
||||||
})
|
})
|
||||||
.map((domainMember: DomainMember) => {
|
.map((result: any) => {
|
||||||
return new SigninSuccess(domainMember);
|
return new SigninSuccess(result);
|
||||||
})
|
})
|
||||||
.catch((error: RESTError) => {
|
.catch((error: RESTError) => {
|
||||||
return of(new SigninFailure(error));
|
return of(new SigninFailure(error));
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
} from './auth.state';
|
} from './auth.state';
|
||||||
|
|
||||||
import { Member } from '../../model';
|
import { Member } from '../../model';
|
||||||
|
import { DomainMember } from '../../../domain/model';
|
||||||
|
|
||||||
export function reducer(state = initialState, action: Actions): State {
|
export function reducer(state = initialState, action: Actions): State {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
|
@ -22,13 +23,14 @@ export function reducer(state = initialState, action: Actions): State {
|
||||||
}
|
}
|
||||||
|
|
||||||
case ActionType.SigninSuccess: {
|
case ActionType.SigninSuccess: {
|
||||||
|
const domainMember = action.payload['domainMember'];
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
signined: true,
|
signined: true,
|
||||||
error: null,
|
error: null,
|
||||||
pending: false,
|
pending: false,
|
||||||
member: action.payload.member,
|
member: domainMember.member,
|
||||||
domain: action.payload.domain,
|
domain: domainMember.domain,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ export class ListComponent implements OnInit, AfterContentInit {
|
||||||
ngAfterContentInit() {
|
ngAfterContentInit() {
|
||||||
this.store.select(AuthSelector.select('domain')).subscribe(
|
this.store.select(AuthSelector.select('domain')).subscribe(
|
||||||
(domain: Domain) => {
|
(domain: Domain) => {
|
||||||
|
console.log(domain);
|
||||||
this.store.dispatch(new ListStore.ReadAllByDomain(domain));
|
this.store.dispatch(new ListStore.ReadAllByDomain(domain));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
|
|
||||||
<ng-container matColumnDef="ip">
|
<ng-container matColumnDef="ip">
|
||||||
<mat-header-cell *matHeaderCellDef mat-sort-header> IP </mat-header-cell>
|
<mat-header-cell *matHeaderCellDef mat-sort-header> IP </mat-header-cell>
|
||||||
<mat-cell *matCellDef="let element"> {{element.host.ip}} </mat-cell>
|
<mat-cell *matCellDef="let element"> </mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="os">
|
<ng-container matColumnDef="os">
|
||||||
<mat-header-cell *matHeaderCellDef mat-sort-header> OS </mat-header-cell>
|
<mat-header-cell *matHeaderCellDef mat-sort-header> OS </mat-header-cell>
|
||||||
<mat-cell *matCellDef="let element"> {{element.host.os.meta}} </mat-cell>
|
<mat-cell *matCellDef="let element"> </mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="cidr">
|
<ng-container matColumnDef="cidr">
|
||||||
|
|
|
@ -19,8 +19,8 @@ import { ListSelector } from '../../store';
|
||||||
})
|
})
|
||||||
export class ListComponent implements OnInit, AfterContentInit {
|
export class ListComponent implements OnInit, AfterContentInit {
|
||||||
probes$ = this.store.pipe(select(ListSelector.select('probes')));
|
probes$ = this.store.pipe(select(ListSelector.select('probes')));
|
||||||
pageSize = '25';
|
// pageSize = '25';
|
||||||
length = '100';
|
// length = '100';
|
||||||
|
|
||||||
displayedColumns = ['name', 'ip', 'os', 'cidr', 'targetCnt', 'date', 'authBy'];
|
displayedColumns = ['name', 'ip', 'os', 'cidr', 'targetCnt', 'date', 'authBy'];
|
||||||
dataSource: MatTableDataSource<Probe>;
|
dataSource: MatTableDataSource<Probe>;
|
||||||
|
@ -33,15 +33,6 @@ export class ListComponent implements OnInit, AfterContentInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngAfterContentInit() {
|
ngAfterContentInit() {
|
||||||
this.probes$.subscribe(
|
|
||||||
(probes: Probe[]) => {
|
|
||||||
this.dataSource = new MatTableDataSource(probes);
|
|
||||||
this.dataSource.sort = this.sort;
|
|
||||||
},
|
|
||||||
(error: RPCError) => {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
this.store.select(AuthSelector.select('domain')).subscribe(
|
this.store.select(AuthSelector.select('domain')).subscribe(
|
||||||
(domain: Domain) => {
|
(domain: Domain) => {
|
||||||
|
@ -52,34 +43,45 @@ export class ListComponent implements OnInit, AfterContentInit {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// temporary data
|
this.probes$.subscribe(
|
||||||
const data: Probe[] = new Array();
|
(probes: Probe[]) => {
|
||||||
for (let i = 0; i < 100; i++) {
|
console.log(probes);
|
||||||
const p: Probe = {
|
this.dataSource = new MatTableDataSource(probes);
|
||||||
id: i,
|
|
||||||
displayName: String('displayName' + i),
|
|
||||||
host: {
|
|
||||||
ip: i,
|
|
||||||
os: {
|
|
||||||
meta: 'blahblahblah'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
cidr: String('cidr' + i),
|
|
||||||
targets: [
|
|
||||||
{
|
|
||||||
id: i,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
authorizeDate: new Date(),
|
|
||||||
authorizeMember: {
|
|
||||||
'name': String('insanity')
|
|
||||||
},
|
|
||||||
};
|
|
||||||
data.push(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.dataSource = new MatTableDataSource(data);
|
|
||||||
this.dataSource.sort = this.sort;
|
this.dataSource.sort = this.sort;
|
||||||
|
},
|
||||||
|
(error: RPCError) => {
|
||||||
|
console.log(error.message);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// // temporary data
|
||||||
|
// const data: Probe[] = new Array();
|
||||||
|
// for (let i = 0; i < 100; i++) {
|
||||||
|
// const p: Probe = {
|
||||||
|
// id: i,
|
||||||
|
// displayName: String('displayName' + i),
|
||||||
|
// host: {
|
||||||
|
// ip: i,
|
||||||
|
// os: {
|
||||||
|
// meta: 'blahblahblah'
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// cidr: String('cidr' + i),
|
||||||
|
// targets: [
|
||||||
|
// {
|
||||||
|
// id: i,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// authorizeDate: new Date(),
|
||||||
|
// authorizeMember: {
|
||||||
|
// 'name': String('insanity')
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// data.push(p);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// this.dataSource = new MatTableDataSource(data);
|
||||||
|
// this.dataSource.sort = this.sort;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
|
|
@ -16,6 +16,6 @@ export interface Probe {
|
||||||
cidr?: string;
|
cidr?: string;
|
||||||
authorizeDate?: Date;
|
authorizeDate?: Date;
|
||||||
authorizeMember?: Member;
|
authorizeMember?: Member;
|
||||||
host?: InfraHost;
|
// host?: InfraHost;
|
||||||
targets?: Target[];
|
targets?: Target[];
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,12 @@ import {
|
||||||
import {
|
import {
|
||||||
State,
|
State,
|
||||||
initialState,
|
initialState,
|
||||||
|
adapter,
|
||||||
} from './detail.state';
|
} from './detail.state';
|
||||||
|
|
||||||
import { Probe } from '../../model';
|
import { Probe } from '../../model';
|
||||||
|
|
||||||
|
|
||||||
export function reducer(state = initialState, action: Actions): State {
|
export function reducer(state = initialState, action: Actions): State {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case ActionType.Read: {
|
case ActionType.Read: {
|
||||||
|
|
|
@ -2,18 +2,39 @@ import { RPCError } from 'packages/core/rpc/error';
|
||||||
|
|
||||||
import { Probe } from '../../model';
|
import { Probe } from '../../model';
|
||||||
|
|
||||||
export interface State {
|
// export interface State {
|
||||||
|
// error: RPCError | null;
|
||||||
|
// isPending: boolean;
|
||||||
|
// probe: Probe | null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export const initialState: State = {
|
||||||
|
// error: null,
|
||||||
|
// isPending: false,
|
||||||
|
// probe: null,
|
||||||
|
// };
|
||||||
|
|
||||||
|
// export const getProbe = (state: State) => state.probe;
|
||||||
|
// export const getError = (state: State) => state.error;
|
||||||
|
// export const isPending = (state: State) => state.isPending;
|
||||||
|
|
||||||
|
import { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';
|
||||||
|
|
||||||
|
export interface State extends EntityState<Probe> {
|
||||||
error: RPCError | null;
|
error: RPCError | null;
|
||||||
isPending: boolean;
|
isPending: boolean;
|
||||||
probe: Probe | null;
|
probe: Probe | null;
|
||||||
}
|
}
|
||||||
|
export const adapter: EntityAdapter<Probe> = createEntityAdapter<Probe>();
|
||||||
export const initialState: State = {
|
export const initialState: State = adapter.getInitialState({
|
||||||
error: null,
|
error: null,
|
||||||
isPending: false,
|
isPending: false,
|
||||||
probe: null,
|
probe: null,
|
||||||
};
|
});
|
||||||
|
|
||||||
export const getProbe = (state: State) => state.probe;
|
// export const {
|
||||||
export const getError = (state: State) => state.error;
|
// selectIds,
|
||||||
export const isPending = (state: State) => state.isPending;
|
// selectEntities,
|
||||||
|
// selectAll,
|
||||||
|
// selectTotal,
|
||||||
|
// } = adapter.getSelectors();
|
||||||
|
|
|
@ -32,3 +32,7 @@ export const ListSelector = new StateSelector<ProbeListStore.State>(createSelect
|
||||||
selectProbeState,
|
selectProbeState,
|
||||||
(state: State) => state.list
|
(state: State) => state.list
|
||||||
));
|
));
|
||||||
|
export const DetailSelector = new StateSelector<ProbeDetailStore.State>(createSelector(
|
||||||
|
selectProbeState,
|
||||||
|
(state: State) => state.detail
|
||||||
|
));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user