class Backuppy::CLI

Public Instance Methods

start() click to toggle source
# File lib/backuppy.rb, line 21
def start
  Backuppy.logger.info "Started the service"

  loop do
    # Get all the mails
    begin
      emails = Mail.all
    rescue => e
      Backuppy.logger.warn "Could not fetch mails: #{e}"

      # When mail server is not responding - act like we did not get
      # any mails
      emails = []
    end

    if emails.length > 0

      Backuppy.logger.info "Fetched #{emails.length} new mails"

      emails.each do |mail|
        Backuppy.logger.info "Checking mail from #{mail.from}"

        # Get all the allowed senders from ENV variable
        whitelist = ENV['ALLOWED_SENDERS'].gsub(' ', '').split(',')
        next unless (mail.from - whitelist).empty?

        # Return if no attachments available
        next unless mail.multipart?

        # Iterate over all attachments
        mail.attachments.each do |attachment|

          next unless attachment.content_type.start_with?('image/')

          # Extract filename from attachment
          filename = "#{ENV['BACKUP_DIR']}/#{attachment.filename}"
          begin
            File.open(filename, 'w+b', 0644) do |f|
              Backuppy.logger.info "Writing #{filename} to disk"
              f.write attachment.decoded
            end
          rescue => e
            Backuppy.logger.warn "Could not save file: #{e}"
          end
        end
      end

      # Delete all messages
      Backuppy.logger.info 'Deleting all mails'
      Mail.delete_all

    end

    sleep ENV['FETCH_INTERVAL'].to_i || 60
  end
end