public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Brian Dolbec" <dolsen@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-keys:gsoc-2016 commit in: gkeys/gkeys/
Date: Sat, 24 Dec 2016 09:13:16 +0000 (UTC)	[thread overview]
Message-ID: <1482555256.e92ddf9481339c1d302ca3a19ef051d355461c46.dolsen@gentoo> (raw)

commit:     e92ddf9481339c1d302ca3a19ef051d355461c46
Author:     aeroniero33 <justthisthing <AT> gmail <DOT> com>
AuthorDate: Fri Jun 17 17:40:01 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Dec 24 04:54:16 2016 +0000
URL:        https://gitweb.gentoo.org/proj/gentoo-keys.git/commit/?id=e92ddf94

gkeys actions: Added automatic seeds,keys update capability

Add more detailed update reporting including the keys removed,
revoked/changed, added.
<rebase edit>
    Convert print() to proper self.output()
    Whitespace cleanup
    Commit message improvements
</edit Brian Dolbec>

 gkeys/gkeys/actions.py     | 20 +++++++-------
 gkeys/gkeys/base.py        | 68 +++++++++++++++++++++++++++++++++++++++++++++-
 gkeys/gkeys/seedhandler.py |  9 +++++-
 3 files changed, 85 insertions(+), 12 deletions(-)

diff --git a/gkeys/gkeys/actions.py b/gkeys/gkeys/actions.py
index 77d39b1..825f2d9 100644
--- a/gkeys/gkeys/actions.py
+++ b/gkeys/gkeys/actions.py
@@ -133,19 +133,19 @@ class Actions(ActionBase):
                 self.output('', "Update succeeded.\n")
             messages = fetch_messages + [" Update operation:"] + [install_messages]
             success, new_gkeys = self.listseed(args)
-            added_gkeys, changed_gkeys  = self.seedhandler.compare_seeds(old_gkeys, new_gkeys)
-            self.output('', "Updated revoked GKeys:")
-            if changed_gkeys:
-                for gkey in changed_gkeys:
-                    self.output(['', changed_gkeys])
+            added_gkeys, changed_gkeys, removed_gkeys  = self.seedhandler.compare_seeds(old_gkeys, new_gkeys)
+            for gkey in changed_gkeys:
+                self.output([changed_gkeys], "Updated or revoked GKeys:")
             else:
-                self.output('', "No GKeys were revoked")
-            self.output('', "Added GKeys:")
-            if added_gkeys:
-                for gkey in added_gkeys:
-                    self.output(['', added_gkeys])
+                self.output('', "No GKeys were updated or revoked")
+            for gkey in added_gkeys:
+                self.output([added_gkeys], "Added GKeys:")
             else:
                 self.output('', "No GKeys were added")
+            for gkey in removed_gkeys:
+                self.output([removed_gkeys], "Removed GKeys:")
+            else:
+                self.output('', "No GKeys were removed")
         return (success, messages)
 
     def addseed(self, args):

diff --git a/gkeys/gkeys/base.py b/gkeys/gkeys/base.py
index a0224c0..28dd0b2 100644
--- a/gkeys/gkeys/base.py
+++ b/gkeys/gkeys/base.py
@@ -17,10 +17,20 @@ from __future__ import print_function
 import argparse
 import os
 import sys
+import copy
 
 from gkeys.fileops import ensure_dirs
 from gkeys.log import log_levels, set_logger
+from gkeys.gkey import GKEY
 
+if sys.version_info[0] >= 3:
+    from urllib.request import urlopen
+    py_input = input
+    _unicode = str
+else:
+    from urllib2 import urlopen
+    py_input = raw_input
+    _unicode = unicode
 
 if sys.version_info[0] >= 3:
     unicode = str
@@ -291,6 +301,10 @@ class CliBase(object):
         for opt in options:
             getattr(self, '_option_%s' % opt)(parser)
 
+    def warning_output(self, info):
+        ''' We don't want this message to be spammed 4 times everytime gkeys is run'''
+        if "Re-fetch cycle timeout of" not in info:
+            print(info)
 
     def setup(self, args, configs):
         '''Set up the args and configs passed in
@@ -352,7 +366,59 @@ class CliBase(object):
         '''
         # establish our actions instance
         self.actions = self.cli_config['Actions'](self.config, self.output_results, self.logger)
-
+        # check for seed update
+        from sslfetch.connections import Connector
+        connector_output = {
+             'info': self.logger.info,
+             'debug': self.logger.debug,
+             'error': self.logger.error,
+             'exception': self.logger.exception,
+             'warning': self.warning_output,
+             'kwargs-info': {},
+             'kwargs-debug': {},
+             'kwargs-error': {},
+             'kwargs-exception': {},
+             'kwargs-warning': {},
+        }
+        fetcher = Connector(connector_output, None, "Gentoo Keys")
+        successes = []
+        up_to_date = True
+        categories = list(self.config.defaults['seeds'])
+        '''Attemp to download seed and seed.sig files for each available category'''
+        for category in categories:
+            filepath = self.config.defaults['seedsdir'] + "/" + category + ".seeds"
+            timestamp_path = filepath + ".timestamp"
+            url = self.config.defaults['seedurls'][category]
+            success, signedfile, timestamp = fetcher.fetch_file(
+                url, filepath, timestamp_path)
+            if timestamp != "":
+                up_to_date = False
+            successes.append(success)
+            url += ".sig"
+            filepath += ".sig"
+            success, signedfile, timestamp = fetcher.fetch_file(
+                url, filepath, timestamp_path)
+            if timestamp != "":
+                up_to_date = False
+            successes.append(success)
+        if False not in successes and not up_to_date:
+            print("Seeds need to be updated")
+            ack = None
+            while ack not in ("y", "yes", "n", "no"):
+                ack = py_input("Would you like to update the seeds now? (y/n) ").lower()
+            if ack in ("y", "yes"):
+                custom_args = copy.copy(args)
+                for attr in GKEY._fields:
+                    if attr != "debug":
+                        custom_args.attr = None
+                custom_args.category = None
+                custom_args.action = "update-seed"
+                print("Updating seeds")
+                self.run(custom_args)
+        elif False not in successes:
+            print("Seeds are up to date")
+        else:
+            print("Seed update check failed, check your internet connection.")
         # run the action
         func = getattr(self.actions, '%s'
             % self.cli_config['Action_Map'][args.action]['func'])

diff --git a/gkeys/gkeys/seedhandler.py b/gkeys/gkeys/seedhandler.py
index c7dad2e..90ce583 100644
--- a/gkeys/gkeys/seedhandler.py
+++ b/gkeys/gkeys/seedhandler.py
@@ -78,21 +78,28 @@ class SeedHandler(object):
         @param seeds2: set of seeds to be compared
         @return added_gkeys: list of keys that are included in seed2 but not seed1
         @return changed_gkeys: list of keys that are included in seed1 and seed2 but have been altered
+        @return removed_gkeys: list of keys that are included in seed1 but not in seed2
         '''
         old_gkeys = seeds1[1]
         new_gkeys = seeds2[1]
         changed_gkeys = []
+        old_changed_gkeys = []
+        removed_gkeys = []
         added_gkeys = []
         if old_gkeys:
             for new_gkey in new_gkeys:
                 for old_gkey in old_gkeys:
                     if new_gkey.nick == old_gkey.nick and new_gkey != old_gkey:
                         changed_gkeys.append(new_gkey)
+                        old_changed_gkeys.append(old_gkey)
                 if new_gkey not in old_gkeys and new_gkey not in changed_gkeys:
                     added_gkeys.append(new_gkey)
+            for old_gkey in old_gkeys:
+                if old_gkey not in new_gkeys and old_gkey not in old_changed_gkeys:
+                    removed_gkeys.append(old_gkey)
         else:
             added_gkeys = new_gkeys
-        return(added_gkeys, changed_gkeys)
+        return(added_gkeys, changed_gkeys, removed_gkeys)
 
     def load_seeds(self, seedfile=None, filepath=None, refresh=False):
         '''Load seed file


             reply	other threads:[~2016-12-24  9:13 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-24  9:13 Brian Dolbec [this message]
  -- strict thread matches above, loose matches on Subject: below --
2016-12-24  9:41 [gentoo-commits] proj/gentoo-keys:gsoc-2016 commit in: gkeys/gkeys/ Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:41 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  9:13 Brian Dolbec
2016-12-24  4:52 [gentoo-commits] proj/gentoo-keys:master " Brian Dolbec
2016-12-24  9:13 ` [gentoo-commits] proj/gentoo-keys:gsoc-2016 " Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec
2016-12-23  8:37 Brian Dolbec

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1482555256.e92ddf9481339c1d302ca3a19ef051d355461c46.dolsen@gentoo \
    --to=dolsen@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox