osa 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22c6dd2dc64261089df031e75fee841e1416276244674dce617792aacbb12fca
4
- data.tar.gz: f0442134bc13835edcbacea2aa594fdc95202e47beed2e71c29f5214bbae2335
3
+ metadata.gz: 257c4fb16627c69c705da1ca2c95fe5b120f7706cbbacec3cb5b54cec8aa4e97
4
+ data.tar.gz: 003041712c82eeb6d9e686de02a36372517dfda89c5d1b4ca58920efc1a06cfd
5
5
  SHA512:
6
- metadata.gz: ca001d8b232f9bfa8bcfde6e75be2a6e1a7b2d025254e22af2feec25625d979e3bd10a88325cee888442b5686b22c7f93fd1866225d7bb6ca38e27e9c62e05af
7
- data.tar.gz: 7d96e933b2c4b09d335f825c933ba01197399aea947e7ca2fca3f66a851c7f469f046fd37abbb59548c54fbb37835eef3684540172cf01bcf30489f2106e6208
6
+ metadata.gz: 904c9b9e2db9f64c0bdab038a3fce8cb5f294ed7c38f1a25ad50f4df769456880ac7e3a17df7dcf6a101f332c836f821edf7e992a07a6ce1ec4b6c1604862407
7
+ data.tar.gz: 8ee576b4dcb8c7e78742328fbc3921ac7f17a7d56b85bf2474feb251cdcc8d6a5deda969d2219a40815d8f14075d4fdae5fcd9c400abbcc1b0974ee8ba7eb782
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- osa (0.1.1)
4
+ osa (0.1.2)
5
5
  activerecord (~> 6.0)
6
6
  faraday (~> 1.1)
7
7
  public_suffix (~> 4.0)
data/README.md CHANGED
@@ -4,17 +4,18 @@
4
4
 
5
5
  ### Basics
6
6
 
7
- OSA uses asks you to choose two folders one "junk" folder and one "report" folder. Even though you can choose any folder
8
- for both, it's recommend to choose the default junk folder as the junk folder and create a custom folder for as the report
9
- folder.
7
+ OSA asks you to choose your junk folder on first configuration. After the folder is selected, the `scan-junk` command
8
+ allows you to scan the folder to report and delete any unwanted spam. It's important to chose the actual junk folder
9
+ so your Outlook spam filters does not get broken. However, OSA will work with any folder. The processing for each email
10
+ uses the following rules:
10
11
 
11
- These two folders will be used the following way:
12
- - When the report folder is scanned, all emails are reported to [Spamcop](https://spamcop.net), deleted and the senders blacklisted.
13
- - When the junk folder is scanned, all emails from the blacklist are reported to [Spamcop](https://spamcop.net) and deleted.
12
+ 1. If the email is flagged, the email is reported to Spamcop, then deleted and the sender is blacklisted.
13
+ 2. If the email's sender is blacklisted, the email is reported to Spamcop, then deleted.
14
+ 3. Otherwise, the email is left untouched.
14
15
 
15
- *OSA will not touch any folder beside these two.*
16
+ *OSA will not touch any folder beside the folder you've chosen.*
16
17
 
17
- *It's the user's responsibility to move junk mails to the report folder to build up the blacklist.*
18
+ *It's the user's responsibility to move junk mails to the junk folder and flag them to build up the blacklist.*
18
19
 
19
20
  ### The blacklist
20
21
 
@@ -58,12 +59,6 @@ osa setup
58
59
 
59
60
  Each time you run this command, your previous configuration will be erased, except for your blacklist.
60
61
 
61
- Process your report folder:
62
-
63
- ```sh
64
- osa scan-report
65
- ```
66
-
67
62
  Process your junk folder:
68
63
 
69
64
  ```sh
data/exe/osa CHANGED
@@ -12,9 +12,7 @@ when 'login'
12
12
  OSA::AuthService.login(OSA::Config.first || OSA::Config.new)
13
13
  when 'scan-junk'
14
14
  require 'osa/scripts/scan_junk_folder'
15
- when 'scan-report'
16
- require 'osa/scripts/scan_report_folder'
17
15
  else
18
- $stderr.puts "Usage: #{File.basename($0)} [setup|login|scan-junk|scan-report]"
16
+ $stderr.puts "Usage: #{File.basename($0)} [setup|login|scan-junk]"
19
17
  exit 1
20
18
  end
@@ -33,11 +33,11 @@ module OSA
33
33
  end
34
34
 
35
35
  def folders
36
- Paginated.new(@authenticated.get('/v1.0/me/mailFolders'), self)
36
+ Paginated.new(@authenticated.get('/v1.0/me/mailFolders'), @authenticated)
37
37
  end
38
38
 
39
39
  def mails(folder_id)
40
- Paginated.new(@authenticated.get("/v1.0/me/mailFolders/#{folder_id}/messages"), self)
40
+ Paginated.new(@authenticated.get("/v1.0/me/mailFolders/#{folder_id}/messages"), @authenticated)
41
41
  end
42
42
 
43
43
  def raw_mail(mail_id)
@@ -18,8 +18,13 @@ while continue
18
18
  next if email_address.nil?
19
19
  domain = PublicSuffix.domain(email_address.split('@', 2)[1])
20
20
 
21
- blacklisted = OSA::Blacklist.where(value: email_address).or(OSA::Blacklist.where(value: domain)).exists?
22
- if blacklisted
21
+ flagged = mail['flag']['flagStatus'] == 'flagged'
22
+ blacklisted = nil
23
+ blacklisted = OSA::Blacklist.where(value: email_address).or(OSA::Blacklist.where(value: domain)).exists? unless flagged
24
+
25
+ if flagged
26
+ puts "Email from #{email_address} is flagged, reporting and deleting"
27
+ elsif blacklisted
23
28
  puts "#{email_address} is blacklisted, reporting and deleting"
24
29
  else
25
30
  puts "Skipping mail from #{email_address}, its not blacklisted"
@@ -18,10 +18,9 @@ module OSA
18
18
  }.to_h
19
19
  prompt = TTY::Prompt.new
20
20
  junk_folder_id = prompt.select('Select junk folder:', choices)
21
- report_folder_id = prompt.select('Select report folder:', choices)
22
21
  spamcop_email = prompt.ask('Spamcop report email:') { |q| q.validate :email }
23
22
 
24
- config.update! junk_folder_id: junk_folder_id, report_folder_id: report_folder_id, spamcop_report_email: spamcop_email
23
+ config.update! junk_folder_id: junk_folder_id, spamcop_report_email: spamcop_email
25
24
  end
26
25
  end
27
26
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module OSA
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: osa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Moray Baruh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-28 00:00:00.000000000 Z
11
+ date: 2020-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -110,7 +110,6 @@ files:
110
110
  - lib/osa/migrations/00003_create_config.rb
111
111
  - lib/osa/migrations/free-email-providers.txt
112
112
  - lib/osa/scripts/scan_junk_folder.rb
113
- - lib/osa/scripts/scan_report_folder.rb
114
113
  - lib/osa/services/auth_service.rb
115
114
  - lib/osa/services/setup_service.rb
116
115
  - lib/osa/util/constants.rb
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'uri'
3
- require 'public_suffix'
4
- require 'osa/util/db'
5
- require 'osa/util/context'
6
-
7
- context = OSA::Context.new
8
-
9
- loop do
10
- mails = context.graph_client.mails(context.config.report_folder_id)
11
- break if mails['value'].empty?
12
- mails['value'].each do |mail|
13
- email_address = mail['sender']['emailAddress']['address']
14
-
15
- puts "forwarding spam from #{email_address}"
16
- context.graph_client.forward_mail_as_attachment(mail['id'], context.config.spamcop_report_email)
17
- puts "deleting spam from #{email_address}"
18
- context.graph_client.delete_mail(mail['id'])
19
-
20
- next if email_address.nil?
21
- domain = PublicSuffix.domain(email_address.split('@', 2)[1])
22
-
23
- is_free_provider = OSA::EmailProvider.where(value: domain).exists?
24
- if is_free_provider
25
- puts "#{email_address} is using a free provider, blacklisting full address"
26
- OSA::Blacklist.find_or_create_by(value: email_address).save!
27
- else
28
- puts "Adding #{domain} to blacklist"
29
- OSA::Blacklist.find_or_create_by(value: domain).save!
30
- end
31
- end
32
- end