Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Nap-reference-web implementerer version 1 af eventkataloget og da det er et angular projekt, er der gjort brug af nap-angular-sdk'et. 

nap-reference-web gør brug af det udstillet interface i nap-angular-sdk, og nedenfor er der kodeudsnit af hvordan det er blevet brugt. 

Session-Open og Session-close (security)

Session-open starter en trusted session hvor brugerens SAMLassertion overføres. Session-close lukker sessionen og brugerens SAMLassertion slettes. Denne funktionalitet findes i auth-servicen.

Der er lavet en AuthService, som sørger for at håndtere sessioner. Nedenstående funktionalitet findes i src/app/services/auth.service.ts.

I constructoren lytter man på indkommende beskeder fra NAP SDK'et, og filtrere de beskeder, således det kun er relevante beskeder for auth servicen, her SessionOpen og SessionClose. I constructoren bliver der ligeledes sendt en besked til NAP SDK'et om man gerne vil anmode om at starte en ny trusted session (SessionOpen), hvor brugeres SAMLAssertion overføres.

Hvis der logges ud, sendes en besked med SessionClose, og brugerens SAMLAssertion slettes.

Code Block
languagejs
export class AuthService {
 
Code Block
languagejs
export class AuthService {
 private sessionMessageSubject = new BehaviorSubject<NAPMessage | undefined>(
    undefined
  );

  /**
   * The current session
   *
   * @memberof AuthService
   */
  public session$ = this.sessionMessageSubject.asObservable();

  constructor(private napSDK: NapAngularService) {
    this.napSDK.incomming$
      .pipe(
        filterEvents([
          NAPEventCatalogue.v1.SessionOpen,
          NAPEventCatalogue.v1.SessionClose,
        ])
      )
      .subscribe((napMessage) => {
        if (napMessage.event.type === NAPEventCatalogue.v1.SessionOpen) {
          this.sessionMessageSubject.next(napMessage);
        } else {
          this.sessionMessageSubject.next(undefined);
        }
      });

    const napMsg: NAPMessage = {
      date: new Date().toISOString(),
      id: UUID(),
      event: { type: NAPEventCatalogue.v1.SessionOpen },
    };

    // Ask for the SAMLassertion in host
    this.napSDK.sendMessage(napMsg);
  }

  /**
   * Tricker logout event
   */
  logout(): void {
    this.sessionMessageSubject.next(undefined);
    const napMsg: NAPMessage = {
      date: new Date().toISOString(),
      id: UUID(),
 UUID(),
      event: { type: NAPEventCatalogue.v1.SessionClose },
    };
   event: { type: NAPEventCatalogue.v1.SessionClose },
    };
    this.napSDK.sendMessage(napMsg);
  }
}

Patient-Open og Patient-close

 this.napSDK.sendMessage(napMsg);
  }
}


Patient-Open og Patient-close

I komponenten appointment (src/app/appoinment/), vises de forskellige aftaler for den givne patient.

For at få den nuværende patient, sendes en besked med typen PatientOpen igennem SDK'et. Dette gøres i constructoren.

Herefter lyttes der på indkommende beskeder med typen PatientOpen. Der gøres brug af en hjælpe metode i nap-typescript-sdk, FHIRValueGetter.getPatientInfo(), som konvertere den indkommende besked til et objekt som indeholder patient oplysningerne.  

Hvis den nuværende patient skal lukkes, set fra det indlejrede systems perspektiv, sendes der en besked med typen PatientClose.Patient-open sender den brugervalgte patient journal og patient-close lukker den bruger valgte patient (set fra det indlejrede systems perspektiv). Et eksempel på dette kan ses i appointment.component


Code Block
  constructor(
    private napSDK: NapAngularService,
    private appointmentService: AppointmentService,
    private authService: AuthService
  ) {
    const napMsg: NAPMessage = {
      date: new Date().toISOString(),
      id: UUID(),
      event: {
        type: NAPEventCatalogue.v1.PatientOpen,
      },
    };
    this.napSDK.sendMessage(napMsg);
  }

  public currentPatient$: Observable<NAPPatientInfo | undefined> = this.napSDK.incomming$.pipe(
    filterEvent(NAPEventCatalogue.v1.PatientOpen),
    map(message => FHIRValueGetter.getPatientInfo(message))
  );

...