[gist]Introduces $.oauth() to make using OAuth from jQuery as easy as using $.ajax()

from http://oyanglul.us

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
         

          (
          function 
          (
          window
          , 
          document
          , 
          $
          , 
          undefined
          ) 
          {

         
             
          if 
          (
          !
          $
          .
          Deferred
          ) 
          throw 
          'jQuery 1.5 is required to use the jQuery.oauth script!'
          ;

         
             
          function 
          require
          (
          name
          , 
          url
          ) 
          {

         
                 
          if 
          (
          window
          [
          name
          ] 
          === 
          undefined
          )

         
                     
          return 
          $
          .
          ajax
          ({ 
          type
          : 
          'GET'
          , 
          cache
          : 
          true
          , 
          dataType
          : 
          'script'
          , 
          url
          : 
          url 
          });

         
             
          }

         
             
          console
          .
          log
          (
          "blah"
          )

         
             
          $
          .
          oauth 
          = 
          function 
          (
          options
          ) 
          {

         
                 
          var 
          d 
          = 
          $
          .
          Deferred
          ();

         
         
           
         
                 
          $
          .
          when
          (

         
                     
          require
          (
          'str_sha1'
          , 
          'http://oauth.googlecode.com/svn/code/javascript/sha1.js'
          ),

         
                     
          require
          (
          'OAuth'
          , 
          'http://oauth.googlecode.com/svn/code/javascript/oauth.js'
          )

         
                 
          ).
          then
          (
          function 
          () 
          {

         
                     
          $
          .
          ajax
          (
          addOAuthStuffs
          (
          options
          )).
          done
          (
          d
          .
          resolve
          );

         
                 
          });

         
         
           
         
                 
          return 
          $
          .
          extend
          ({

         
                     
          success
          : 
          function 
          () 
          { 
          return 
          this
          .
          then
          .
          apply
          (
          this
          , 
          arguments
          ); 
          },

         
                     
          complete
          : 
          function 
          () 
          { 
          return 
          this
          .
          done
          .
          apply
          (
          this
          , 
          arguments
          ); 
          },

         
                     
          error
          : 
          function 
          () 
          { 
          return 
          this
          .
          fail
          .
          apply
          (
          this
          , 
          arguments
          ); 
          }

         
                 
          }, 
          d
          .
          promise
          ());

         
             
          };

         
         
           
         
             
          function 
          addOAuthStuffs
          (
          options
          ) 
          {

         
                 
          options 
          = 
          $
          .
          extend
          ({ 
          type
          : 
          'GET'
          , 
          consumerKey
          : 
          ''
          , 
          consumerSecret
          : 
          ''
          , 
          tokenSecret
          : 
          ''
          , 
          url
          : 
          '' 
          }, 
          options
          );

         
                 
          if 
          (
          options
          .
          data
          ) 
          {

         
                     
          if 
          (
          typeof 
          options
          .
          data 
          !== 
          "string"
          )

         
                         
          options
          .
          data 
          = 
          $
          .
          param
          (
          options
          .
          data
          );

         
                 
          }

         
         
           
         
                 
          if 
          (
          options
          .
          url
          .
          indexOf
          (
          ':'
          ) 
          == 
          -
          1
          ) 
          {

         
                     
          if 
          (
          options
          .
          url
          .
          substr
          (
          0
          , 
          1
          ) 
          == 
          '/'
          ) 
          {

         
                         
          options
          .
          url 
          = 
          location
          .
          protocol 
          + 
          '//' 
          + 
          location
          .
          host 
          + 
          options
          .
          url
          ;

         
                     
          } 
          else 
          {

         
                         
          options
          .
          url 
          = 
          location
          .
          href
          .
          substr
          (
          0
          , 
          location
          .
          href
          .
          lastIndexOf
          (
          '/'
          ) 
          + 
          1
          ) 
          + 
          options
          .
          url
          ;

         
                     
          }

         
                 
          }

         
         
           
         
                 
          var 
          message 
          = 
          { 
          action
          : 
          options
          .
          url 
          + 
          (
          options
          .
          data 
          && 
          options
          .
          data
          .
          length 
          > 
          0 
          ? 
          '?' 
          + 
          options
          .
          data 
          : 
          ''
          ),

         
                     
          method
          : 
          options
          .
          type
          , 
          parameters
          : 
          [[
          "oauth_version"
          , 
          "1.0"
          ], 
          [
          "oauth_consumer_key"
          , 
          options
          .
          consumerKey
          ]]

         
                 
          };

         
         
           
         
                 
          OAuth
          .
          setTimestampAndNonce
          (
          message
          );

         
                 
          OAuth
          .
          SignatureMethod
          .
          sign
          (
          message
          , 
          { 
          consumerSecret
          : 
          options
          .
          consumerSecret
          , 
          tokenSecret
          : 
          options
          .
          tokenSecret 
          });

         
         
           
         
                 
          var 
          parameterMap 
          = 
          OAuth
          .
          getParameterMap
          (
          message
          );

         
                 
          var 
          baseStr 
          = 
          OAuth
          .
          decodeForm
          (
          OAuth
          .
          SignatureMethod
          .
          getBaseString
          (
          message
          ));

         
                 
          options
          .
          data 
          = 
          baseStr
          [
          2
          ][
          0
          ];

         
         
           
         
                 
          if 
          (
          parameterMap
          .
          parameters
          )

         
                     
          $
          .
          each
          (
          parameterMap
          .
          parameters
          , 
          function 
          (
          item
          , 
          values
          ) 
          {

         
                         
          return 
          $
          .
          each
          (
          values
          , 
          function 
          (
          subitem
          , 
          value
          ) 
          {

         
                             
          if 
          (
          value 
          == 
          'oauth_signature'
          ) 
          {

         
                                 
          options
          .
          data 
          += 
          '&oauth_signature=' 
          + 
          escape
          (
          values
          [
          1
          ]);

         
                                 
          return 
          false
          ;

         
                             
          }

         
                         
          });

         
                     
          });

         
         
           
         
                 
          if 
          (
          options
          .
          url
          .
          indexOf
          (
          '?'
          ) 
          > 
          -
          1
          )

         
                     
          options
          .
          url 
          = 
          options
          .
          url
          .
          substr
          (
          0
          , 
          options
          .
          url
          .
          indexOf
          (
          '?'
          ));

         
         
           
         
                 
          options
          .
          cache 
          = 
          false
          ;

         
                 
          return 
          options
          ;

         
             
          }

         
         

          })(
          window
          , 
          document
          , 
          jQuery
          , 
          location
          );

         

view raw
jquery.oauth.js hosted with ❤ by
GitHub

    原文作者:oyanglulu
    原文地址: https://segmentfault.com/a/1190000000638915
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞