2lemetry CORS + browserify + angular

by franklovecchio

HTML

<script src="http://www.webtoolkit.info/djs/webtoolkit.base64.js"></script>
<script src="https://gist.github.com/franklovecchio/21e291f495b85617291b/raw/99ca39332736873cd4e82c8767d2054eaae01933/api.js"></script>
<div ng-controller="Page">
  <button ng-click="help()">help</button>
  <button ng-click="test()">account, get</button>
</div>

CoffeeScript

@Page = ($scope, $http, $timeout) ->

  $scope.help = () -> api.help()

  ###class ApiInterface
    
    raw: '{"auth":{"authenticate":"GET"},"account":{"getAccount": "GET"}}'
    help: () -> console.log 'help'
    
    setup: () ->
    
      console.log "new ApiInterface with #{@opts.username} and #{@opts.password}"

      for fn,def of JSON.parse @raw 
        console.log "Creating proto #{fn}"
        for key,val of def
          console.log "Adding function #{key} as type #{val}"
        
          @[fn] = { }
            
          @[fn][key] = { }
          @[fn][key].raw = @raw
          @[fn][key].info = key
          
          @[fn][key].http = { }
          @[fn][key].http.get = @get
            
          @[fn][key].help = () -> console.log @info
          @[fn][key].exec = (opts) -> # Opts are not post params, those are just built?
            
            if @info is 'authenticate' # pretend
              url = 'https://api-v2.m2m.io/2/auth'
                
            if @info is 'getAccount'
              url = 'https://api-v2.m2m.io/2/account'    

            @http.get url, opts

    constructor: (@opts) -> @setup()###
            
  class Api extends ApiInterface 
        
    constructor: (@opts) ->
    
      # Must be called if overriding.
      @setup()
        
      # validate user/pass
        
      # Create a config object to store auth headers.
      @config = { }
    
      $http.defaults.useXDomain = true
    
      @config = @getBasicAuthHeader()
            
      @auth.authenticate.exec
        cb: (resp) =>
          
          console.log resp
          
          @token = resp.token  
          @config = @getBearerHeader()
            
          console.log 'new config: ' + JSON.stringify(@config)
            
          # TODO validate token
            
          @opts.cb resp
            
    getBasicAuthHeader: () ->

      userPass = @base64Encode "#{@opts.username}:#{@opts.password}"

      headers:
       ...