smc-hub
Version:
CoCalc: Backend webserver component
133 lines (113 loc) • 4.45 kB
text/coffeescript
#########################################################################
# This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.
# License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
#########################################################################
###
Testing API functions relating to api keys itself
COPYRIGHT : (c) 2017 SageMath, Inc.
LICENSE : AGPLv3
###
api = require('./apitest')
{setup, teardown, reset, winston} = api
{http_message_api_v1} = require('../../api/handler')
misc = require('smc-util/misc')
async = require('async')
expect = require('expect')
describe 'api key tests -- ', ->
@timeout(5000)
before(setup)
after(teardown)
beforeEach(reset)
it 'ping endpoint is disabled', (done) ->
http_message_api_v1
event : 'ping'
database : api.db
compute_server: api.compute_server
api_key : api.api_key
ip_address : '2.3.4.5'
logger : api.logger
body : {}
cb : (err, resp) ->
winston.info(err, resp)
if not err?
done('there was no error, but there should!')
else
expect(err).toInclude("endpoint 'ping' is not part of the HTTP API")
done()
it 'normal access works', (done) ->
http_message_api_v1
event : 'create_project'
database : api.db
compute_server: api.compute_server
api_key : api.api_key
ip_address : '2.3.4.5'
logger : api.logger
body : {}
cb : (err, resp) ->
winston.info(err, resp)
expect(resp.event).toBe('project_created')
expect(Object.keys(resp)).toInclude('project_id')
done(err)
it 'blocks a wrong api key from creating a project', (done) ->
fake_key = 'sk_173nsmeje32'
http_message_api_v1
event : 'create_project'
database : api.db
compute_server: api.compute_server
api_key : fake_key
ip_address : '3.4.5.6'
logger : api.logger
body : {start: false}
cb : (err, resp) ->
winston.info(err, resp)
if not err?
done('there was no error')
else
expect(err).toInclude('No account found')
expect(resp).toBe(undefined)
done()
it 'blocks missing api key from creating a project', (done) ->
fake_key = 'sk_173nsmeje32'
http_message_api_v1
event : 'create_project'
database : api.db
compute_server: api.compute_server
api_key : ''
ip_address : '3.4.5.6'
logger : api.logger
body : {start: false}
cb : (err, resp) ->
winston.info(err, resp)
if not err?
done('there was no error')
else
expect(err).toInclude('No account found')
expect(resp).toBe(undefined)
done()
it 'blocks banned users', (done) ->
async.series([
(cb) ->
api.db.ban_user
account_id : api.account_id
cb : (err) ->
cb(err)
(cb) ->
http_message_api_v1
event : 'create_project'
database : api.db
compute_server: api.compute_server
api_key : api.api_key
ip_address : '7.8.9.10'
logger : api.logger
body : {}
cb : (err, resp) ->
winston.info(err, resp)
if err?
expect(err).toInclude('BANNED')
cb()
else
cb('no banning error')
], (err, resp) ->
winston.info(err, resp)
done(err)
)