mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-16 08:15:55 +10:00
200 lines
4.8 KiB
CoffeeScript
200 lines
4.8 KiB
CoffeeScript
https = require 'https'
|
|
querystring = require 'querystring'
|
|
_ = require 'underscore'
|
|
|
|
class HipChatClient
|
|
|
|
host: 'api.hipchat.com'
|
|
|
|
constructor: (@apikey, @agent) ->
|
|
@rateLimits =
|
|
limit: 0
|
|
remaining: 0
|
|
reset: 0
|
|
|
|
createRoom: (params, callback) ->
|
|
data =
|
|
name: params.name
|
|
owner_user_id: params.owner_user_id
|
|
privacy: params.privacy ? 'public'
|
|
topic: params.topic
|
|
guest_access: if params.guest_access then 1 else 0
|
|
|
|
options = @_prepareOptions
|
|
method: 'post'
|
|
path: '/v1/rooms/create'
|
|
query: data
|
|
@_sendRequest options, callback
|
|
|
|
listRooms: (callback) ->
|
|
options = @_prepareOptions
|
|
method: 'get'
|
|
path: '/v1/rooms/list'
|
|
@_sendRequest options, callback
|
|
|
|
showRoom: (room, callback) ->
|
|
options = @_prepareOptions
|
|
method: 'get'
|
|
path: '/v1/rooms/show'
|
|
query:
|
|
room_id: room
|
|
@_sendRequest options, callback
|
|
|
|
deleteRoom: (room, callback) ->
|
|
options = @_prepareOptions
|
|
method: 'post'
|
|
path: '/v1/rooms/delete'
|
|
query:
|
|
room_id: room
|
|
@_sendRequest options, callback
|
|
|
|
|
|
getHistory: (params, callback) ->
|
|
data =
|
|
room_id: params.room_id || params.room
|
|
date: params.date ? 'recent'
|
|
timezone: params.timezone ? 'UTC'
|
|
|
|
options = @_prepareOptions
|
|
method: 'get'
|
|
path: '/v1/rooms/history'
|
|
query: data
|
|
|
|
@_sendRequest options, callback
|
|
|
|
postMessage: (params, callback) ->
|
|
data =
|
|
room_id: params.room_id || params.room
|
|
from: params.from ? 'node-hipchat'
|
|
message: params.message
|
|
notify: if params.notify then 1 else 0
|
|
color: params.color ? 'yellow'
|
|
message_format: params.message_format ? 'html'
|
|
|
|
options = @_prepareOptions
|
|
method: 'post'
|
|
path: '/v1/rooms/message'
|
|
data: data
|
|
|
|
@_sendRequest options, callback
|
|
|
|
# users/* methods
|
|
|
|
showUser: (user_id, callback) ->
|
|
options = @_prepareOptions
|
|
method: 'get'
|
|
path: '/v1/users/show'
|
|
query:
|
|
user_id: user_id
|
|
@_sendRequest options, callback
|
|
|
|
listUsers: (callback) ->
|
|
options = @_prepareOptions
|
|
method: 'get'
|
|
path: '/v1/users/list'
|
|
@_sendRequest options, callback
|
|
|
|
|
|
deleteUser: (user_id, callback) ->
|
|
options = @_prepareOptions
|
|
method: 'post'
|
|
path: '/v1/users/delete'
|
|
query:
|
|
user_id: user_id
|
|
@_sendRequest options, callback
|
|
|
|
|
|
createUser: (params, callback) ->
|
|
data =
|
|
email: params.email
|
|
name: params.name
|
|
mention_name: params.name.replace(/\s+/g, '')
|
|
title: params.title
|
|
is_group_admin: if params.is_group_admin then 1 else 0
|
|
password: params.password
|
|
timezone: params.timezone ? 'UTC'
|
|
|
|
|
|
options = @_prepareOptions
|
|
method: 'post'
|
|
path: '/v1/users/create'
|
|
data: data
|
|
|
|
|
|
@_sendRequest options, callback
|
|
|
|
updateUser: (params, callback) ->
|
|
data =
|
|
user_id: params.user_id
|
|
email: params.email
|
|
name: params.name
|
|
mention_name: params.name.replace(/\s+/g, '')
|
|
title: params.title
|
|
is_group_admin: if params.is_group_admin then 1 else 0
|
|
password: params.password
|
|
timezone: params.timezone ? 'UTC'
|
|
|
|
options = @_prepareOptions
|
|
method: 'post'
|
|
path: '/v1/users/update'
|
|
data: data
|
|
|
|
@_sendRequest options, callback
|
|
|
|
|
|
getRateLimits: () ->
|
|
@rateLimits
|
|
|
|
|
|
# private methods
|
|
|
|
_prepareOptions: (op) ->
|
|
#console.log ">>> _prepareOptions"
|
|
#console.log op
|
|
#console.log "<<< _prepareOptions"
|
|
|
|
op.host = @host
|
|
|
|
op.query = {} unless op.query?
|
|
op.query['auth_token'] = @apikey
|
|
op.query = querystring.stringify(op.query)
|
|
op.path += '?' + op.query
|
|
|
|
if op.method is 'post' and op.data?
|
|
op.data = querystring.stringify(op.data)
|
|
op.headers = {} unless op.headers?
|
|
op.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
|
op.headers['Content-Length'] = op.data.length
|
|
|
|
if(@agent)
|
|
op.agent = @agent
|
|
|
|
return op
|
|
|
|
_sendRequest: (options, callback) ->
|
|
req = https.request(options)
|
|
|
|
req.on 'response', (res) =>
|
|
buffer = ''
|
|
res.on 'data', (chunk) ->
|
|
buffer += chunk
|
|
res.on 'end', =>
|
|
headers = res.headers
|
|
@rateLimits =
|
|
limit: headers['x-ratelimit-limit'],
|
|
remaining: headers['x-ratelimit-remaining'],
|
|
reset: headers['x-ratelimit-reset']
|
|
|
|
if callback?
|
|
if res.statusCode is 200
|
|
value = if options.json is false then buffer else JSON.parse(buffer)
|
|
callback(value, null)
|
|
else
|
|
callback(null, buffer)
|
|
|
|
if options.data? then req.write('' + options.data)
|
|
req.end()
|
|
|
|
|
|
exports = module.exports = HipChatClient
|