27 lines
742 B
Ruby
27 lines
742 B
Ruby
|
class MetadataParser
|
||
|
|
||
|
def initialize(app)
|
||
|
@app = app
|
||
|
end
|
||
|
|
||
|
def call(env)
|
||
|
request = Rack::Request.new(env)
|
||
|
auth = Rack::Auth::Basic::Request.new(env)
|
||
|
|
||
|
if request.post? && request.path == '/api/asciicasts'
|
||
|
if request.params['asciicast']['meta'] # pre "format 1" client
|
||
|
meta = JSON.parse(request.params['asciicast']['meta'][:tempfile].read)
|
||
|
request.params['asciicast']['meta'] = meta
|
||
|
|
||
|
username, token = meta.delete('username'), meta.delete('user_token')
|
||
|
if token.present? && !auth.provided? || !auth.basic?
|
||
|
env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(username, token)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
@app.call(env)
|
||
|
end
|
||
|
|
||
|
end
|