Files
mapknitter/app/controllers/images_controller.rb
Álax de Carvalho Alves cee7479cf4 Setting Action Cable (#956)
* Configurations update for rails 4.0

* ActiveSupport::Testing::Performance extracted to a gem

* ruby prof required as a dependency

* disable rubocop on bin folder

* http patch

* Comment out to allow testing

* no longer supports plugin loading

* lock to sprockets 2.12

* Active record patches

* remove deprecated test syntax

* fix failing tests

* change new super class

* replace right_aws with right_aws_api

right_aws is no longer maintained, was throwing an error

* lock to rails 4.2.11.1

* change rails version in install script

* remove deprecation warnings

* Change test lib to minitest, add  minitest reporters

* make app work

* active record find patches

* root_in_json include defaulted to false

* confirm option removed in link helper

* cookies serializer changed to hybrid

* Change render :text to :plain

render :text will be deprecated and poses a security risk

* console for dev web

* Check and fix interface functionality

* fix export functionality

* add protected attributes for the warpable model

* fix image upload

* Fix comments and images failing tests

* include mass assignment security in annotations

* render html for update images

* clear mail array before every test

* Fix codeclimate issues

* skip failing test

The test is failing because of different names in model(warpable) and
controller(images) skipping this for now until we decide if we want to
standardize the names

* replace unprotected redirects

* Fix codeclimate issues

* Autofixing rubocop offenses and Problematic test for #578 (#667)

* Autofixing rubocop offenses

* Adding Rubocop to Travis pipelines and development branch

* Fixing maps controller test

* Fixing remaining offenses

* change post test to create since action new is a get action

* remove unprotected redirects

* Fix codeclimate issues

* Add yarn

* Remove error log

* Fix oauth icons

* Modify package.json

* Add yarn install to start.sh

* Add leaflet google

* Remove leaflet-google from package json

* remove passenger error logs

* Fix install script

* Remove flag

* Fix gemfile.lock

* Fix gemfile.lock

* Fix login

* Upgrade Gemfile to Rails 5.0

* require rake'

* Change config files

* Add application record

* Bump mysql

* Local builds for Travis runners (#672)

* Using local mysql for travis

* Fix codeclimate issues

* Refactoring yamls

* Autofixing rubocop offenses and Problematic test for #578 (#667)

* Autofixing rubocop offenses

* Adding Rubocop to Travis pipelines and development branch

* Fixing maps controller test

* Fixing remaining offenses

* Fixing unit tests

* Adding docker build to travis pipelines

* Adding docker build to travis pipelines

* Staging builds in travis

* fix travis.yml

* Upgrading sintax of assets and using required gems

* Using updated version of GDAL and installing required dependencies

* Enabling cache in between builds

* Test yarn for travis

* Conditionalize rake db:setup for travis

* Add semicolon

* Remove comment

* modify database.yml

* Migrate seperately

* Run create only for production

* Locking newer Rails v

* Running update task

* Adding missing bootsnap gem

* Fixing missing database

* Adding missing listen gem

* Fixing schema example version

* Fixing migration versions

* Updating dependencies for Rails 5

* Adding ApplicationMailer abstraction

* Adding required initializers

* Prefer require_relative instead of full path

* Making associations not required by default

* Regenerating schema file

* Hotfixing MassAssigment

* Upgrade web-console, remove mysql adapter override

* Remove attr_accessible

* Add rails-controller-testing gem

* Follow new syntax for tests

* Remove extra web-console from gemfile

* Regenerating lock file

* Fixing rubocop offenses and bundler version

* Using correct Paperclip class as in https://github.com/rails/rails/issues/26404#issuecomment-502129936

* Fix images functional tests

* images controller test typecast to string

* Fix rails logger

* Fix map tests

* Bumping rubocop version

* Autofixing rubocop offenses

* Including performance cop to rubocop

* Refactoring deprecated routing and secret_token

* Fixing routes for feed controller

* Using correct routes for RSS builder

* Fixing missing routes

* Fixing travis bundler and yarn cache

* Fixing bundle path

* Splitting bundle and yarn verifications

* Autofixing rubocop offenses

* Fixing prod host for travis, private class usage and rubocop offenses

* Upgrade to Rails 5.2 (#685)

* Upgrade Gemfile to Rails 5.0

* require rake'

* Change config files

* Add application record

* Bump mysql

* Locking newer Rails v

* Running update task

* Adding missing bootsnap gem

* Fixing missing database

* Adding missing listen gem

* Fixing schema example version

* Fixing migration versions

* Updating dependencies for Rails 5

* Adding ApplicationMailer abstraction

* Adding required initializers

* Prefer require_relative instead of full path

* Making associations not required by default

* Regenerating schema file

* Hotfixing MassAssigment

* Upgrade web-console, remove mysql adapter override

* Remove attr_accessible

* Add rails-controller-testing gem

* Follow new syntax for tests

* Remove extra web-console from gemfile

* Regenerating lock file

* Fixing rubocop offenses and bundler version

* Using correct Paperclip class as in https://github.com/rails/rails/issues/26404#issuecomment-502129936

* Fix images functional tests

* images controller test typecast to string

* Fix rails logger

* Fix map tests

* Bumping rubocop version

* Autofixing rubocop offenses

* Including performance cop to rubocop

* Refactoring deprecated routing and secret_token

* Fixing routes for feed controller

* Using correct routes for RSS builder

* Fixing missing routes

* Fixing travis bundler and yarn cache

* Fixing bundle path

* Splitting bundle and yarn verifications

* Fixing prod host for travis, private class usage and rubocop offenses

* Enforcing params usage on get method

* Using correct folder names to Rails >5 conventions

* Enforcing params wrapping and adding missing front_ui route

* Precompiling assets before serving

* Improving Jenkins startup script

* WIP action cable setup

* basic action cable setup complete

* minor change

* minor changes

* few changes

* Using supported docker yaml version by Jenkins

* Adding task to check database existance

* Improving start script

* Improving Makefile's recipes and target

* Adding task to check database existance

* Improving start script

* Improving Makefile's recipes and target

* Improving Makefile's recipes and target

* Patching https://github.com/publiclab/mapknitter/pull/803

* Improving Jenkins setup

* initial working functionality complete

* Fix map loading

* h

* Fixing Leaflet-Environmental-Layers map loading

* h

* leaflet

* fix

* change

* updates

* stop precompiling assets

* precompile

* Using correct Yarn, NPM and Node version, avoiding mismatch

* Removing unwanted tags.js invocation

* Improving Makefile recipe

* Using node_modules/ as dependencies folder, since https://github.com/sass/node-sass/issues/2050#issuecomment-317233552

* Upgrading Yarn dependencies

* Removing duplicate rubocop directive

* Removing test/ from codeclimate checks

* Removing fixed FIXME comments

* Removing fixed FIXME comments

* Updating docs in README

* Refactoring code

* Bumping recaptcha and include methods

* Adding Foreman gem

* Scheduling Puma and Passenger servers

* WIP action cable setup

* basic action cable setup complete

* minor change

* minor changes

* few changes

* initial working functionality complete

* Refactoring code

* Adding Foreman gem

* Scheduling Puma and Passenger servers

* few minor fix

* added a few tests

* Refactoring connection module

* Fixing migration version

* Using strong params in requests

* Using strong params in requests

* Use Rack::Test::UploadedFile instead of ActionDispatch::Http::UploadedFile

* added documentation

* added more docs

* added tests

* Fix minor asset issue

* Remove manual asset references and add them to application js

* Fix asset ordering in application.js

* Configure System tests  (#936)

* Add new system tests and fix minor asset loading

* modify test

* Add chromedriver to travis

* Add sudo

* Add dependencies to dockerfile

* Properly installing chrome and chromedriver

* Using puma as dependency and correct image controller

* added a few tests

* a few changes

* remove unnecessary render

* few test fixes

* action cable setup (#805)

* WIP action cable setup

* basic action cable setup complete

* minor change

* minor changes

* few changes

* initial working functionality complete

* Refactoring code

* Adding Foreman gem

* Scheduling Puma and Passenger servers

* WIP action cable setup

* basic action cable setup complete

* minor change

* minor changes

* few changes

* initial working functionality complete

* Refactoring code

* Adding Foreman gem

* Scheduling Puma and Passenger servers

* few minor fix

* added a few tests

* Refactoring connection module

* Using strong params in requests

* added documentation

* added more docs

* added tests

* Using puma as dependency and correct image controller

* added a few tests

* a few changes

* remove unnecessary render

* few test fixes

* Fixing CodeClimate issues

* Synch editing add ons (#957)

* few bug fixes

* separate editing channels for different maps

* test fixes

* rubocop fixes

* Undoing unwanted pattern set by Rubocop
2019-08-30 16:19:26 -04:00

126 lines
3.9 KiB
Ruby

require 'open-uri'
class ImagesController < ApplicationController
rescue_from Errno::ENOENT, Errno::ETIMEDOUT,
OpenURI::HTTPError, Timeout::Error,
with: :url_upload_not_found
protect_from_forgery except: %i(update delete)
# Convert model to json without including root name. Eg. 'warpable'
ActiveRecord::Base.include_root_in_json = false
# proxy, used if MapKnitter is being backed by Amazon S3 file storage,
# to enable client-side distortion using webgl-distort, which requires same-origin
def fetch
if Rails.env.production?
if params[:url][0..42] == 'https://s3.amazonaws.com/grassrootsmapping/'
url = URI.parse(params[:url])
result = Net::HTTP.get_response(url)
send_data result.body, type: result.content_type, disposition: 'inline'
end
else
redirect_to params[:url]
end
end
# assign attributes directly after rails update
def create
@warpable = Warpable.new
@warpable.history = 'None'
@warpable.image = params[:uploaded_data]
map = Map.find_by(slug: params[:map_id])
@warpable.map_id = map.id
map.updated_at = Time.now
map.save
respond_to do |format|
if @warpable.save
format.html { render json: [@warpable.fup_json].to_json, content_type: 'text/html' }
format.json { render json: { files: [@warpable.fup_json] }, status: :created, location: @warpable.image.url }
else
format.html { render action: 'new' }
format.json { render json: { files: [@warpable.fup_error_json] }, layout: false }
end
end
end
# mapknitter.org/import/<map-name>/?url=http://myurl.com/image.jpg
def import
map = Map.find_by_name params[:name]
@warpable = Warpable.new
@warpable.map_id = map.id
@warpable.url = params[:url]
map.updated_at = Time.now
map.save
if @warpable.save
redirect_to '/maps/' + params[:name]
else
flash[:notice] = 'Sorry, the image failed to import.'
redirect_to '/map/edit/' + params[:name]
end
end
def url_upload_not_found
flash[:notice] = 'Sorry, the URL you provided was not valid.'
redirect_to '/map/edit/' + params[:id]
end
def show
@image = Warpable.find params[:id]
respond_to do |format|
format.html
format.json { render json: @image.map(&:fup_json) }
end
end
def update
@warpable = Warpable.find params[:warpable_id]
if Map.find(@warpable.map_id).anonymous? || logged_in?
nodes = []
author = @warpable.map.author
# is it really necessary to make new points each time?
params[:points].split(':').each do |point|
lon = point.split(',')[0]
lat = point.split(',')[1]
node = Node.new(color: 'black',
lat: lat,
lon: lon,
author: author,
name: '')
node.save
nodes << node
end
@warpable.nodes = nodes.collect(&:id).join(',')
@warpable.locked = params[:locked]
@warpable.cm_per_pixel = @warpable.get_cm_per_pixel
@warpable.save
respond_to do |format|
format.html { render html: 'success' }
format.json { render json: @warpable.map.fetch_map_data }
end
else
render plain: 'You must be logged in to update the image, unless the map is anonymous.'
end
end
def revert
@warpable = Warpable.find params[:id]
version = @warpable.versions.find(params[:version])
version.reify&.save
redirect_to @warpable.map
end
def destroy
@warpable = Warpable.find params[:id]
if logged_in? && current_user.can_delete?(@warpable)
@warpable.destroy
respond_to do |format|
format.html { redirect_to @warpable.map }
format.json { render json: @warpable.map.fetch_map_data }
end
else
flash[:error] = 'You must be logged in to delete images.'
redirect_to '/login'
end
end
end