From 885d36c3cb577397ca09a55ab37edcfb1cb0a836 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Sat, 27 Oct 2012 00:13:35 +0200 Subject: [PATCH] more work on auth --- OauthImplementation.js | 88 +++++++++--------- Tentia.xcodeproj/project.pbxproj | 12 +++ .../UserInterfaceState.xcuserstate | Bin 33663 -> 32804 bytes enc-base64-min.js | 8 ++ hmac-sha256.js | 17 ++++ index_oauth.html | 3 +- 6 files changed, 85 insertions(+), 43 deletions(-) create mode 100644 enc-base64-min.js create mode 100644 hmac-sha256.js diff --git a/OauthImplementation.js b/OauthImplementation.js index a9d2ef5..8a9abf5 100644 --- a/OauthImplementation.js +++ b/OauthImplementation.js @@ -6,8 +6,21 @@ // Licence: BSD (see attached LICENCE.txt file). // -function getURL(url, type, callback, data) { +function getURL(url, type, callback, data, auth_header) { $.ajax({ + beforeSend: function(xhr) { + if (data) { + xhr.setRequestHeader("Content-Length", data.length); + } + + if (auth_header) { + var header_data = 'MAC id=' + auth_header.mac_key_id + + ', ts="' + auth_header.time_stamp + + '", nonce="' + auth_header.nonce + + '", mac="' + auth_header.mac + '"'; + xhr.setRequestHeader("Authorization", header_data); + }; + }, url: url, accepts: "application/vnd.tent.v0+json", contentType: "application/vnd.tent.v0+json", @@ -16,9 +29,10 @@ function getURL(url, type, callback, data) { data: data, processData: false, error: function(xhr, ajaxOptions, thrownError) { - alert(xhr.statusText); - alert(ajaxOptions); - alert(thrownError); + alert("getURL ERROR:"); + alert(xhr.statusText); + alert(ajaxOptions); + alert(thrownError); } }); } @@ -76,7 +90,7 @@ OauthImplementation.prototype.requestProfileURL = function (entity) { OauthImplementation.prototype.register = function (url) { var those = this; getURL(url, "GET", function(resp) { - this.profile = JSON.parse(resp.responseText); + those.profile = JSON.parse(resp.responseText); var callback = function(resp) { var data = JSON.parse(resp.responseText); those.authRequest(data); @@ -99,58 +113,48 @@ OauthImplementation.prototype.authRequest = function(register_data) { + "&state=" + this.state + "&tent_post_types=" + escape("https://tent.io/types/posts/status/v0.1.0"); - controller.openURL_(those.apiRoot() + auth); + controller.openURL_(this.apiRoot() + auth); } OauthImplementation.prototype.requestAccessToken = function(responseBody) { // /oauthtoken?code=51d0115b04d1ed94001dde751c5b360f&state=aQfH1VEohYsQr86qqyv - var urlVars = getUrlVars(responseBody); if(this.state && this.state != "" && urlVars["state"] == this.state) { - var code = urlVars["code"]; var url = this.apiRoot() + "/apps/" + this.register_data["id"] + "/authorizations"; + var nonce = makeid(4); + var time_stamp = (new Date).getTime(); + var requestBody = JSON.stringify({ + 'code' : urlVars["code"], + 'token_type' : "mac" + }); + + var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, this.register_data["mac_key"]); + hmac.update(requestBody); + var hash = hmac.finalize(); + + var auth_header = { + mac_key_id: this.register_data["mac_key_id"], + time_stamp: time_stamp, + nonce: nonce, + mac: hash.toString(CryptoJS.enc.Base64) + } + + var those = this; + var callback = function(resp) { + alert("requestAccessTokenTicketFinished") + alert(resp.responseText); + //those.requestAccessTokenTicketFinished(data); + }; + + getURL(url, "POST", callback, requestBody, auth_header); } else { alert("State is not the same: {" + this.state + "} vs {" + urlVars["state"] + "}") } this.state = null; // reset the state - - - /* - var urlVars = getUrlVars(responseBody); - - var url = OAUTH_ACCESS_TOKEN_URL; - var _this = this; - var accessTokenKey = getUrlVars(responseBody) - - var message = { method:"POST" , action:url }; - - OAuth.completeRequest(message, - { consumerKey : OAUTH_CONSUMER_KEY - , consumerSecret: OAUTH_CONSUMER_SECRET - , token : urlVars["oauth_token"] - , tokenSecret : urlVars["oauth_verifier"] - }); - - $.ajax({ - beforeSend: function(xhr) { - xhr.setRequestHeader("Authorization", OAuth.getAuthorizationHeader("", message.parameters)); - }, - url: url, - type: 'POST', - dataType: 'text', - success: function(data) { - _this.requestAccessTokenTicketFinished(data); - }, - error:function (xhr, ajaxOptions, thrownError) { - alert(xhr.statusText); - alert(ajaxOptions); - alert(thrownError); - } - });*/ } diff --git a/Tentia.xcodeproj/project.pbxproj b/Tentia.xcodeproj/project.pbxproj index 84cf7eb..437bb60 100644 --- a/Tentia.xcodeproj/project.pbxproj +++ b/Tentia.xcodeproj/project.pbxproj @@ -20,6 +20,10 @@ 1F705EA6117889FA00C85707 /* sprite-icons.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F705EA5117889FA00C85707 /* sprite-icons.png */; }; 1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F70619E1178FBB300C85707 /* Carbon.framework */; }; 1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F77DB46118C5F1C007C7F1E /* Constants.m */; }; + 1F9816C8163915A100AFD4EE /* enc-base64-min.js in Sources */ = {isa = PBXBuildFile; fileRef = 1F9816C6163915A100AFD4EE /* enc-base64-min.js */; }; + 1F9816C9163915A100AFD4EE /* hmac-sha256.js in Sources */ = {isa = PBXBuildFile; fileRef = 1F9816C7163915A100AFD4EE /* hmac-sha256.js */; }; + 1F9816CA16391C4A00AFD4EE /* enc-base64-min.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F9816C6163915A100AFD4EE /* enc-base64-min.js */; }; + 1F9816CB16391C4A00AFD4EE /* hmac-sha256.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F9816C7163915A100AFD4EE /* hmac-sha256.js */; }; 1F98DC9E124BFFD7004289ED /* pin.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F98DC9D124BFFD7004289ED /* pin.png */; }; 1FA09847144602530079E258 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA09846144602530079E258 /* libicucore.dylib */; }; 1FC254941427BC050035D84B /* index_oauth.html in Resources */ = {isa = PBXBuildFile; fileRef = 1FC254931427BC050035D84B /* index_oauth.html */; }; @@ -77,6 +81,8 @@ 1F70619E1178FBB300C85707 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; 1F77DB45118C5F1C007C7F1E /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Constants.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 1F77DB46118C5F1C007C7F1E /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = Constants.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 1F9816C6163915A100AFD4EE /* enc-base64-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "enc-base64-min.js"; sourceTree = ""; }; + 1F9816C7163915A100AFD4EE /* hmac-sha256.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hmac-sha256.js"; sourceTree = ""; }; 1F98DC9D124BFFD7004289ED /* pin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pin.png; sourceTree = ""; }; 1FA09846144602530079E258 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; 1FC254911427ADF90035D84B /* OauthImplementation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; lineEnding = 0; path = OauthImplementation.js; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.javascript; }; @@ -157,6 +163,8 @@ 1FFA36C71177D861006C8562 /* WebKit */ = { isa = PBXGroup; children = ( + 1F9816C6163915A100AFD4EE /* enc-base64-min.js */, + 1F9816C7163915A100AFD4EE /* hmac-sha256.js */, 1F245D6E1632AEFE00E4469A /* jso.js */, 1F4673E61180F654006CC37C /* Core.js */, 1FC254911427ADF90035D84B /* OauthImplementation.js */, @@ -296,6 +304,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1F9816CA16391C4A00AFD4EE /* enc-base64-min.js in Resources */, + 1F9816CB16391C4A00AFD4EE /* hmac-sha256.js in Resources */, 1FC2549F1427DC7F0035D84B /* Constants.js in Resources */, 1FC254951427BF150035D84B /* OauthImplementation.js in Resources */, 1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */, @@ -332,6 +342,8 @@ 1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */, 1F618ECA12DB5E6100E500D9 /* TweetModel.m in Sources */, 1F245D6F1632AEFE00E4469A /* jso.js in Sources */, + 1F9816C8163915A100AFD4EE /* enc-base64-min.js in Sources */, + 1F9816C9163915A100AFD4EE /* hmac-sha256.js in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate b/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate index 49cb47123838faab637ce47966dd4d6b66df3428..d6ba683fcb080665076b016dac3b19d385052a1b 100644 GIT binary patch delta 18223 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�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 G`+oo#eB`76 delta 18863 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 Bk{JL1 diff --git a/enc-base64-min.js b/enc-base64-min.js new file mode 100644 index 0000000..acff43d --- /dev/null +++ b/enc-base64-min.js @@ -0,0 +1,8 @@ +/* +CryptoJS v3.0.2 +code.google.com/p/crypto-js +(c) 2009-2012 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){var h=CryptoJS,i=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();for(var b=[],a=0;a>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var b=b.replace(/\s/g,""),e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c)); +for(var c=[],a=0,d=0;d>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return i.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); diff --git a/hmac-sha256.js b/hmac-sha256.js new file mode 100644 index 0000000..a143d84 --- /dev/null +++ b/hmac-sha256.js @@ -0,0 +1,17 @@ +/* +CryptoJS v3.0.2 +code.google.com/p/crypto-js +(c) 2009-2012 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(h,i){var e={},f=e.lib={},l=f.Base=function(){function a(){}return{extend:function(j){a.prototype=this;var d=new a;j&&d.mixIn(j);d.$super=this;return d},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var d in a)a.hasOwnProperty(d)&&(this[d]=a[d]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.$super.extend(this)}}}(),k=f.WordArray=l.extend({init:function(a,j){a= +this.words=a||[];this.sigBytes=j!=i?j:4*a.length},toString:function(a){return(a||m).stringify(this)},concat:function(a){var j=this.words,d=a.words,c=this.sigBytes,a=a.sigBytes;this.clamp();if(c%4)for(var b=0;b>>2]|=(d[b>>>2]>>>24-8*(b%4)&255)<<24-8*((c+b)%4);else if(65535>>2]=d[b>>>2];else j.push.apply(j,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a= +l.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return k.create(d,b/2)}},q=o.Latin1={stringify:function(a){for(var b= +a.words,a=a.sigBytes,d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return k.create(d,b)}},r=o.Utf8={stringify:function(a){try{return decodeURIComponent(escape(q.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return q.parse(unescape(encodeURIComponent(a)))}},b=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=k.create(); +this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,g=c/(4*e),g=a?h.ceil(g):h.max((g|0)-this._minBufferSize,0),a=g*e,c=h.min(4*a,c);if(a){for(var f=0;fg;)e(b)&&(8>g&&(k[g]=f(h.pow(b,0.5))),o[g]=f(h.pow(b,1/3)),g++),b++})();var m=[],l=l.SHA256=e.extend({_doReset:function(){this._hash=f.create(k.slice(0))},_doProcessBlock:function(e,f){for(var b=this._hash.words,g=b[0],a=b[1],j=b[2],d=b[3],c=b[4],h=b[5],l=b[6],k=b[7],n=0;64> +n;n++){if(16>n)m[n]=e[f+n]|0;else{var i=m[n-15],p=m[n-2];m[n]=((i<<25|i>>>7)^(i<<14|i>>>18)^i>>>3)+m[n-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+m[n-16]}i=k+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&h^~c&l)+o[n]+m[n];p=((g<<30|g>>>2)^(g<<19|g>>>13)^(g<<10|g>>>22))+(g&a^g&j^a&j);k=l;l=h;h=c;c=d+i|0;d=j;j=a;a=g;g=i+p|0}b[0]=b[0]+g|0;b[1]=b[1]+a|0;b[2]=b[2]+j|0;b[3]=b[3]+d|0;b[4]=b[4]+c|0;b[5]=b[5]+h|0;b[6]=b[6]+l|0;b[7]=b[7]+k|0},_doFinalize:function(){var e=this._data,f=e.words,b=8*this._nDataBytes, +g=8*e.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+64>>>9<<4)+15]=b;e.sigBytes=4*f.length;this._process()}});i.SHA256=e._createHelper(l);i.HmacSHA256=e._createHmacHelper(l)})(Math); +(function(){var h=CryptoJS,i=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(e,f){e=this._hasher=e.create();"string"==typeof f&&(f=i.parse(f));var h=e.blockSize,k=4*h;f.sigBytes>k&&(f=e.finalize(f));for(var o=this._oKey=f.clone(),m=this._iKey=f.clone(),q=o.words,r=m.words,b=0;b - + +