Skip to content

Commit

Permalink
Merge pull request #387 from EverythingMe/feature/api_key_auth
Browse files Browse the repository at this point in the history
Record event when accessing query result from API
  • Loading branch information
arikfr committed Mar 12, 2015
2 parents 73955c7 + 7f6c7f0 commit 7db5449
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
12 changes: 12 additions & 0 deletions migrations/0004_allow_null_in_event_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from playhouse.migrate import PostgresqlMigrator, migrate

from redash.models import db

if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)

with db.database.transaction():
migrate(
migrator.drop_not_null('events', 'user_id')
)
21 changes: 19 additions & 2 deletions redash/controllers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@
import csv
import hashlib
import json
import numbers
import cStringIO
import datetime
import time
import logging

from flask import render_template, send_from_directory, make_response, request, jsonify, redirect, \
Expand Down Expand Up @@ -490,6 +489,24 @@ def get(self, query_id=None, query_result_id=None, filetype='json'):
query_result = models.QueryResult.get_by_id(query_result_id)

if query_result:
if isinstance(self.current_user, models.ApiUser):
event = {
'user_id': None,
'action': 'api_get',
'timestamp': int(time.time()),
'api_key': self.current_user.id,
'file_type': filetype
}

if query_id:
event['object_type'] = 'query'
event['object_id'] = query_id
else:
event['object_type'] = 'query_result'
event['object_id'] = query_result_id

record_event.delay(event)

if filetype == 'json':
data = json.dumps({'query_result': query_result.to_dict()}, cls=utils.JSONEncoder)
return make_response(data, 200, cache_headers)
Expand Down
2 changes: 1 addition & 1 deletion redash/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,7 @@ def delete_instance(self, *args, **kwargs):


class Event(BaseModel):
user = peewee.ForeignKeyField(User, related_name="events")
user = peewee.ForeignKeyField(User, related_name="events", null=True)
action = peewee.CharField()
object_type = peewee.CharField()
object_id = peewee.CharField(null=True)
Expand Down

0 comments on commit 7db5449

Please sign in to comment.