| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- settings = require("settings-sharelatex")
- request = require("request")
- logger = require("logger-sharelatex")
- timeout = if process.env.NODE_ENV == "production" then 500 else 5000
- logger.log "using timeout of #{timeout}ms for sixpack server calls"
- generate_client_id = ->
- # from http://stackoverflow.com/questions/105034
- 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace /[xy]/g, (c) ->
- r = Math.random() * 16 | 0
- v = if c == 'x' then r else r & 0x3 | 0x8
- v.toString 16
- _request_uri = (endpoint, params) ->
- query_string = []
- e = encodeURIComponent
- for key of params
- if params.hasOwnProperty(key)
- vals = params[key]
- if Object::toString.call(vals) != '[object Array]'
- vals = [ vals ]
- i = 0
- while i < vals.length
- query_string.push e(key) + '=' + e(vals[i])
- i += 1
- if query_string.length
- endpoint += '?' + query_string.join('&')
- endpoint
- _request = (uri, params, callback)->
- opts =
- uri:_request_uri(uri, params)
- json:true
- timeout:timeout
- request.get opts, (err, res, body)->
- callback err, body
- module.exports = sixpack =
- client: (user_id)->
- client = new sixpack.Session(user_id, settings.apis.sixpack.url)
- return client
- Session : (client_id, base_url, ip_address, user_agent) ->
- @client_id = client_id or sixpack.generate_client_id()
- @base_url = base_url or sixpack.base_url
- participate: (experiment_name, alternatives, force, callback) =>
- if typeof force == 'function'
- callback = force
- force = null
- if !/^[a-z0-9][a-z0-9\-_ ]*$/.test(experiment_name)
- return callback(new Error('Bad experiment_name'))
- if alternatives.length < 2
- return callback(new Error('Must specify at least 2 alternatives'))
- i = 0
- while i < alternatives.length
- if !/^[a-z0-9][a-z0-9\-_ ]*$/.test(alternatives[i])
- return callback(new Error('Bad alternative name: ' + alternatives[i]))
- i += 1
- params =
- client_id: @client_id
- experiment: experiment_name
- alternatives: alternatives
- if force != null and _in_array(alternatives, force)
- return callback(null,
- 'status': 'ok'
- 'alternative': 'name': force
- 'experiment':
- 'version': 0
- 'name': experiment_name
- 'client_id': @client_id)
- _request @base_url + '/participate', params, (err, res) ->
- if err?
- res =
- status: 'failed'
- error: err
- alternative: name: alternatives[0]
- callback null, res
- convert: (experiment_name, callback)=>
- if !/^[a-z0-9][a-z0-9\-_ ]*$/.test(experiment_name)
- return callback(new Error('Bad experiment_name'))
- params =
- client_id: @client_id
- experiment: experiment_name
- if @ip_address
- params.ip_address = @ip_address
- if @user_agent
- params.user_agent = @user_agent
- _request @base_url + '/convert', params, (err, res) ->
- if err?
- res =
- status: 'failed'
- error: err
- callback null, res
|