ynkap-payment
Version:
Module de paiement Y-Nkap pour Angular - Intégration simple des paiements mobiles (Orange Money, MTN Mobile Money)
67 lines • 7 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export class AuthService {
constructor() {
this.apiKeySubject = new BehaviorSubject(null);
this.isAuthenticatedSubject = new BehaviorSubject(false);
// Vérifier si une clé API existe dans le localStorage
const savedApiKey = localStorage.getItem('ynkap_api_key');
if (savedApiKey) {
this.setApiKey(savedApiKey);
}
}
/**
* Définit la clé API Y-Nkap
* @param apiKey La clé API à utiliser
*/
setApiKey(apiKey) {
if (!this.validateApiKey(apiKey)) {
throw new Error('Clé API invalide');
}
localStorage.setItem('ynkap_api_key', apiKey);
this.apiKeySubject.next(apiKey);
this.isAuthenticatedSubject.next(true);
}
/**
* Récupère la clé API actuelle
* @returns Observable de la clé API
*/
getApiKey() {
return this.apiKeySubject.asObservable();
}
/**
* Vérifie si l'utilisateur est authentifié
* @returns Observable de l'état d'authentification
*/
isAuthenticated() {
return this.isAuthenticatedSubject.asObservable();
}
/**
* Déconnecte l'utilisateur
*/
logout() {
localStorage.removeItem('ynkap_api_key');
this.apiKeySubject.next(null);
this.isAuthenticatedSubject.next(false);
}
/**
* Valide le format de la clé API
* @param apiKey La clé API à valider
* @returns true si la clé est valide
*/
validateApiKey(apiKey) {
// Format attendu : ykap_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
const apiKeyRegex = /^ynkap_[a-zA-Z0-9]{32}$/;
return apiKeyRegex.test(apiKey);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveW5rYXAvc3JjL2xpYi9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7O0FBS25ELE1BQU0sT0FBTyxXQUFXO0lBSXRCO1FBSFEsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDekQsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHbkUsc0RBQXNEO1FBQ3RELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNyQztRQUNELFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osWUFBWSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssY0FBYyxDQUFDLE1BQWM7UUFDbkMseURBQXlEO1FBQ3pELE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDO1FBQzlDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDOytHQTNEVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBhcGlLZXlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICBwcml2YXRlIGlzQXV0aGVudGljYXRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyBWw6lyaWZpZXIgc2kgdW5lIGNsw6kgQVBJIGV4aXN0ZSBkYW5zIGxlIGxvY2FsU3RvcmFnZVxyXG4gICAgY29uc3Qgc2F2ZWRBcGlLZXkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgneW5rYXBfYXBpX2tleScpO1xyXG4gICAgaWYgKHNhdmVkQXBpS2V5KSB7XHJcbiAgICAgIHRoaXMuc2V0QXBpS2V5KHNhdmVkQXBpS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIETDqWZpbml0IGxhIGNsw6kgQVBJIFktTmthcFxyXG4gICAqIEBwYXJhbSBhcGlLZXkgTGEgY2zDqSBBUEkgw6AgdXRpbGlzZXJcclxuICAgKi9cclxuICBzZXRBcGlLZXkoYXBpS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy52YWxpZGF0ZUFwaUtleShhcGlLZXkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2zDqSBBUEkgaW52YWxpZGUnKTtcclxuICAgIH1cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd5bmthcF9hcGlfa2V5JywgYXBpS2V5KTtcclxuICAgIHRoaXMuYXBpS2V5U3ViamVjdC5uZXh0KGFwaUtleSk7XHJcbiAgICB0aGlzLmlzQXV0aGVudGljYXRlZFN1YmplY3QubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFLDqWN1cMOocmUgbGEgY2zDqSBBUEkgYWN0dWVsbGVcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGRlIGxhIGNsw6kgQVBJXHJcbiAgICovXHJcbiAgZ2V0QXBpS2V5KCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFbDqXJpZmllIHNpIGwndXRpbGlzYXRldXIgZXN0IGF1dGhlbnRpZmnDqVxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgZGUgbCfDqXRhdCBkJ2F1dGhlbnRpZmljYXRpb25cclxuICAgKi9cclxuICBpc0F1dGhlbnRpY2F0ZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRMOpY29ubmVjdGUgbCd1dGlsaXNhdGV1clxyXG4gICAqL1xyXG4gIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd5bmthcF9hcGlfa2V5Jyk7XHJcbiAgICB0aGlzLmFwaUtleVN1YmplY3QubmV4dChudWxsKTtcclxuICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkZSBsZSBmb3JtYXQgZGUgbGEgY2zDqSBBUElcclxuICAgKiBAcGFyYW0gYXBpS2V5IExhIGNsw6kgQVBJIMOgIHZhbGlkZXJcclxuICAgKiBAcmV0dXJucyB0cnVlIHNpIGxhIGNsw6kgZXN0IHZhbGlkZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdmFsaWRhdGVBcGlLZXkoYXBpS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIEZvcm1hdCBhdHRlbmR1IDogeWthcF94eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFxyXG4gICAgY29uc3QgYXBpS2V5UmVnZXggPSAvXnlua2FwX1thLXpBLVowLTldezMyfSQvO1xyXG4gICAgcmV0dXJuIGFwaUtleVJlZ2V4LnRlc3QoYXBpS2V5KTtcclxuICB9XHJcbn0gIl19