| 
									
										
										
										
											2017-02-27 00:15:00 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-13 06:32:13 +09:00
										 |  |  | class Settings::ExportsController < Settings::BaseController | 
					
						
							| 
									
										
										
										
											2018-02-21 23:21:32 +01:00
										 |  |  |   include Authorization | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 00:15:00 +01:00
										 |  |  |   layout 'admin' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   before_action :authenticate_user! | 
					
						
							| 
									
										
										
										
											2019-09-19 20:58:19 +02:00
										 |  |  |   before_action :require_not_suspended! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   skip_before_action :require_functional! | 
					
						
							| 
									
										
										
										
											2017-02-27 00:15:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-19 20:29:41 +01:00
										 |  |  |   def show | 
					
						
							| 
									
										
										
										
											2018-02-21 23:21:32 +01:00
										 |  |  |     @export  = Export.new(current_account) | 
					
						
							|  |  |  |     @backups = current_user.backups | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def create | 
					
						
							| 
									
										
										
										
											2019-03-11 00:50:31 +01:00
										 |  |  |     raise Mastodon::NotPermittedError unless user_signed_in? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     backup = nil | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     RedisLock.acquire(lock_options) do |lock| | 
					
						
							|  |  |  |       if lock.acquired? | 
					
						
							|  |  |  |         authorize :backup, :create? | 
					
						
							|  |  |  |         backup = current_user.backups.create! | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         raise Mastodon::RaceConditionError | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-02-21 23:21:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     BackupWorker.perform_async(backup.id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     redirect_to settings_export_path | 
					
						
							| 
									
										
										
										
											2017-03-19 20:29:41 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2019-03-11 00:50:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def lock_options | 
					
						
							|  |  |  |     { redis: Redis.current, key: "backup:#{current_user.id}" } | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2019-09-19 20:58:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def require_not_suspended! | 
					
						
							|  |  |  |     forbidden if current_account.suspended? | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-27 00:15:00 +01:00
										 |  |  | end |