Skip to content

Instantly share code, notes, and snippets.

@geoffroycochard
Created October 13, 2016 22:38
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geoffroycochard/c73b2f460bb54b9ed86df17af8d5f8b6 to your computer and use it in GitHub Desktop.
Save geoffroycochard/c73b2f460bb54b9ed86df17af8d5f8b6 to your computer and use it in GitHub Desktop.
OroPlatform API WSSE Header generation client Side in Angular2
import { Injectable } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import { Account } from '../model/account-model';
import hashes = require('crypto-js');
import moment = require('moment');
@Injectable()
export class AccountService {
private actionUrl: string;
private headers: Headers;
constructor(private _http: Http) {
this.actionUrl = 'http://dawkins.ut14php7.lo/app_dev.php/api/accounts/4625';
// $userName = 'your username';
// $userPassword = 'your password';
// $nonce = uniqid();
// $created = date('c');
// $digest = base64_encode(sha1(base64_decode($nonce) . $created . $userPassword, true));
// $digest = base64_encode(sha1($nonce . $created . $userPassword, true));
var username = 'admin';
var password = '289cb21479bc8818234b513511ac22981e3a43df';
var nonce = '';
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var length = 13;
for(var i = 0; i < length; i++) {
nonce += possible.charAt(Math.floor(Math.random() * possible.length));
}
//2016-07-21T11:50:37+00:00
var now = moment.utc( new Date() ).format();
var created = now;
console.log(created);
// // Generating digest from secret, creation and nonce
// var nonceDecode64 = hashes.enc.Base
var _sha1 = hashes.SHA1(nonce+created+password);
var digest = _sha1.toString(hashes.enc.Base64);
nonce = hashes.enc.Utf8.parse(nonce);
nonce = hashes.enc.Base64.stringify(nonce);
// var hash = hashes.SHA1(nonce+created+password);
// var digest = hashes.enc.Base64.stringify(hash);
var str = 'UsernameToken Username="'+username+'", PasswordDigest="'+digest+'", Nonce="'+nonce+'", Created="'+created+'"';
console.log(str);
this.headers = new Headers();
this.headers.append('Authorization', 'WSSE profile="UsernameToken"');
this.headers.append('X-WSSE', str);
}
public GetAllAccounts = (): Observable<Account[]> => {
//noinspection TypeScriptUnresolvedFunction
return this._http.get(this.actionUrl, { headers: this.headers})
.map((response: Response) => response.json())
.catch(this.handleError);
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment