Skip to content

Instantly share code, notes, and snippets.

@joecliff
joecliff / cryptojs_base64_encrypt_decrypt.js
Last active Oct 20, 2021
An example of base64 usage in cryptojs
View cryptojs_base64_encrypt_decrypt.js
var CryptoJS = require("crypto-js");//replace thie with script tag in browser env
//encrypt
var rawStr = "hello world!";
var wordArray = CryptoJS.enc.Utf8.parse(rawStr);
var base64 = CryptoJS.enc.Base64.stringify(wordArray);
console.log('encrypted:', base64);
//decrypt
var parsedWordArray = CryptoJS.enc.Base64.parse(base64);
@joecliff
joecliff / cryptojs_wordarray.js
Last active Jun 10, 2021
cryptojs WordArray usage
View cryptojs_wordarray.js
/**
* cryptojs use WordArray (CryptoJS.lib.WordArray) as parameter/result frequently.
* A WordArray object represents an array of 32-bit words. When you pass a string,
* it's automatically converted to a WordArray encoded as UTF-8.
*/
var CryptoJS = require("crypto-js");
// convert String to WordArray
var wordArray = CryptoJS.enc.Utf8.parse('Hello, World!');
@joecliff
joecliff / express_download_name_proxy.js
Last active Jan 18, 2019
make a proxy to convert http download file name in express
View express_download_name_proxy.js
var request = require('request');
function setDownloadName(req, res, fileName) {
var userAgent = (req.headers['user-agent'] || '').toLowerCase();
if (userAgent.indexOf('chrome') > -1) {
res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent(fileName));
} else if (userAgent.indexOf('firefox') >-1) {
res.setHeader('Content-Disposition', 'attachment; filename*="utf8\'\'' + encodeURIComponent(fileName) + '"');
} else {
res.setHeader('Content-Disposition', 'attachment; filename=' + new Buffer(fileName).toString('binary'));
@joecliff
joecliff / file
Created Nov 13, 2017
freedom_public
View file
{"0.7669349809659356":"-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nCharset: UTF-8\r\n\r\nxv8AAABSBAAAAAATCCqGSM49AwEHAgME0b5ofxFbwFsuDX+S26Fc5vclkP1NIu1B\r\n935+8V12CSu4iYmjamXdf6Cp9oquew2R7aadwpnxL3MmUd4+sHWAAs3/AAAACDxn\r\naXRodWI+wv8AAACOBBATCABA/wAAAAWCWgnILP8AAAACiwn/AAAACZCg4yCEZqNX\r\npv8AAAAFlQgJCgv/AAAABJYDAQL/AAAAApsD/wAAAAKeAQAA6HsA/2ahuiBgRKgh\r\nTEjbHxO1PVUSY5PYl6+If8ehiNIu6n8hAQDGEvXgqT/JE4kVhD+31ANwiSpElHh8\r\nKOcKWI9oynumZ87/AAAAVgQAAAAAEggqhkjOPQMBBwIDBCBem++V4+GlvZNdQZuM\r\n/wuVbhxeNbQePMTiVJ7wTApTUqZaGReeh9nEAHXVQ1wAig7Cmsnhj0dTxnDB6e/l\r\n44IDAQgHwv8AAABtBBgTCAAf/wAAAAWCWgnILP8AAAAJkKDjIIRmo1em/wAAAAKb\r\nDAAApLUA/1R8W9gl/H2X/1DueTOr0Cv/rInBfCzvdGdQB0WmPKllAP9215qBXsia\r\n9VWfRao3lG87EMYzrz7pzfTHZU3LEXvFfw==\r\n=A4Rt\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n"}
@joecliff
joecliff / hilight_keywords.js
Last active Aug 29, 2015
js highlight words function, support chinese
View hilight_keywords.js
'use strict';
function convertKeywordsToRegStr(keywords) {
return '(' + keywords.trim().replace(/[^\w\u4E00-\u9FA5]+/g, '|') + ')';
}
function getHighlightFn(keywords, highlightClass) {
var regexpStr = convertKeywordsToRegStr(keywords);
if (regexpStr.length === 2) {
return function (sourceText) {
@joecliff
joecliff / convert_decimal_to_hexdecimal.js
Last active Aug 29, 2015
convert decimal to hexdecimal in js (js进制转换)
View convert_decimal_to_hexdecimal.js
var num=12;
//12 -> c
var hex=12.toString(16);//same for other conditions
@joecliff
joecliff / recover_from_error.js
Last active Aug 29, 2015
recover from error in q.js
View recover_from_error.js
'use strict';
var Q = require('q');
function prepare(data) {
// return Q(data);
return Q.reject(new Error('special error1'));
}
function judgeError(err) {
console.log('catch: ', err);
@joecliff
joecliff / preferable_error_hander_location.js
Last active Aug 29, 2015
preferable error handler location for promise style codes in nodejs
View preferable_error_hander_location.js
/**
* always put errorHandler in the last 'then' with a 'null' logic handler,
* so that all errors will be caught
*/
someModule.promiseFunc()
.then(function (data) {
//TODO other logic
})
.then(null, errorHandler);
@joecliff
joecliff / cryptojs_aes.js
Last active Aug 29, 2015
crypto-js aes encrypt descrypt
View cryptojs_aes.js
var CryptoJS = require("crypto-js");//replace this with script tag in browser env
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase").toString();
console.log(encrypted);
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase").toString(CryptoJS.enc.Utf8);
console.log(decrypted);
@joecliff
joecliff / methodScopeInQ.js
Last active Aug 29, 2015
使用q.js调用不支持promise的方法时的作用域问题
View methodScopeInQ.js
//最好总是使用带this绑定的q方法(相对保险)
Q.ninvoke(object, methodName, ...args); //直接执行
Q.nbind(nodeMethod, thisArg, ...args); //返回绑定参数后的方法
//不带直接绑定this作用域的,如果方法内用到了this,可能需要手动绑定
Q.nfcall(obj.method.bind(obj), ...args)
Q.nfapply(obj.method.bind(obj), args)
//其他类似 ...