extend openssl tip
[grml-tips.git] / grml-tips
index 7742578..fc9fd39 100755 (executable)
--- a/grml-tips
+++ b/grml-tips
-#!/bin/sh
+#!/usr/bin/perl
 # Filename:      grml-tips
 # Purpose:       query a signature file for a specific keyword and display results
-# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
+# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>, (c) Alexander Wirt <formorer@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Sam Nov 11 20:01:35 CET 2006 [mika]
+# Latest change: Sam Mär 03 15:35:38 CET 2007 [mika]
 ################################################################################
 
-TIPSFILE='/usr/share/grml-tips/grml_tips'
-
-if ! [ -r "$TIPSFILE" ] ; then
-   echo "Error: $TIPSFILE not found. Exiting." >&2
-   exit 1
-fi
-
-if [ -x /usr/bin/agrep ] ; then
-   if [ -n "$1" ] ; then
-     agrep -d "^-- $" -i "$1" $TIPSFILE && echo "" || \
-     ( echo "Sorry, could not find a tip for '$1'. :-(" >&2
-       echo 'If you want to submit a tip please mail it to tips@grml.org - thank you!' >&2
-       exit 1 )
-   else
-     echo "Usage: $0 <keyword>" >&2 ; exit 1
-   fi
-else # workaround solution for systems without agrep :-/
-  if [ -n "$1" ] ; then
-     TIP=$(awk "BEGIN { RS = \"-- \" } /$1/" "$TIPSFILE")
-     if [ -n "$TIP" ] ; then
-        echo "$TIP"
-     else
-        echo "Sorry, could not find a tip for '$1'. :-(" >&2
-        echo 'If you want to submit a tip please mail it to tips@grml.org - thank you!' >&2
-        exit 1
-     fi
-  else
-    echo "Usage: $0 <keyword>" >&2 ; exit 1
-  fi
-fi
+use strict;
+use Pod::Usage;
+
+use Term::ReadKey;
+use Time::HiRes;       
+use LWP::UserAgent;
+
+=head1 NAME
+
+B<grml-tips> - query a signature file for a specific keyword and display results
+
+=head1 SYNOPSIS
+
+B<grml-tips> [OPTION] I<keyword>
+
+=head1 DESCRIPTION
+
+This manual page documents briefly the B<grml-tips> command.
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--help>
+
+Print this help and exit.
+
+=back
+
+=head1 EXAMPLES
+
+=over 8
+
+=item B<grml-tips> I<ntfs>
+
+Query grml-tips file for tips / hints including keyword  "ntfs".
+
+=item B<grml-tips> I<.>
+
+Display all available B<grml-tips> at once.
+
+=back
+
+=head1 FILES
+
+/usr/share/grml-tips/grml_tips
+
+Signature file containing the tips.
+
+=head1 SEE ALSO
+
+L<grml(1)>
+
+=head1 AUTHOR
+
+grml-tips was written by Alexander Wirt <formorer@grml.org>
+
+=cut
+
+
+my $grml_tips = '/usr/share/grml-tips/grml_tips';
+my $pattern = shift;
+
+if ($pattern eq '') {
+    pod2usage( {
+           -message => 'No search pattern provided',
+           -exitval => -1, });
+} elsif ($pattern eq  '--help') {
+    pod2usage();
+}
+
+my @tips;
+my $fh;
+if (! open ($fh, '<', "$grml_tips")) {
+       print "Error: $grml_tips not found.\nExiting.";
+       exit -1;
+}
+
+my $tip = '';
+my $tip_flag = 0;
+
+while (my $line = <$fh>) {
+    if ($line !~ /^-- $/) {
+       $tip .= $line;
+    } else {
+       if ( "$tip" =~ /$pattern/mi ) {
+           $tip .= $line;
+           print "$tip";
+           $tip = '';
+           $tip_flag = 1;
+       } else {
+           $tip = '';
+       }
+    }
+}
+close($fh);
+
+if (!$tip_flag) {
+       print "Sorry, could not find a tip for '$pattern'. :-(\n\n",
+       "Do you want to submit the keyword '$pattern' to grml's keyword database?\n",
+       "The grml team will write tips for the most requested and useful keywords.\n",
+       "To use and contribute to this feature you'll need a working networking connection.\n",
+       "No personal data will be transmitted to the database.\n\n",
+       "Send \"$pattern\" to grml's keyword database? [y|N] ";
+
+       ReadMode 4; # Turn off controls keys
+       my $x; 
+       while (not defined ($x = ReadKey(-1))) {
+               Time::HiRes::sleep(0.5);
+       }
+       ReadMode 0; # Reset tty mode before exiting
+       print "\n\n";
+       if ($x =~ /(y|j)/i) {
+               my $version; 
+               if ( -f '/etc/grml_version' ) {
+                       open (my $fh, '<', '/etc/grml_version') or die "Could not open /etc/grml_version: $!";
+                       $version = <$fh>; 
+                       chomp $version; 
+                       close ($fh); 
+               } elsif ( -f '/etc/debian_version') {
+                       open (my $fh, '<', '/etc/debian_version') or die "Could not open /etc/debian_version: $!"; 
+                       $version = <$fh>;
+                       chomp $version;
+                       close ($fh);
+               } else {
+                       $version = 'unknown'; 
+               }
+               my $ua = new LWP::UserAgent;
+               $ua->agent("grml-tips 0.0 "); # set the HTTP 'browser' type
+               my $res = 
+                       $ua->post('http://deb.grml.org/~formorer/submissions/keyword.cgi', 
+                                       [ 'version' => $version,
+                                       'keyword' => $pattern
+                                       ],
+                                );
+               if ($res->is_success) {
+                       my $content =  $res->decoded_content;
+                       if ($content =~ /Submission received/) {
+                               print "Keyword '$pattern' has been submitted to grml's keyword database.\nThanks.\n";
+                       } else {
+                               print "Your pattern could not be submitted.\n",
+                                     "Please file a bug against grml-tips at ",
+                                     "http://bts.grml.org/\n",
+                                     "Thanks!\n";
+                       }
+               } else {
+                       print "Could not submitt '$pattern': " . $res->status_line . "\n";
+               }
+
+
+       } else {
+               print "'$pattern' has not been sent to grml's keyword database as requested.\n";
+               print "If you want to submit a tip please mail it to tips\@grml.org - thank you!\n";
+       }
+}
 
 ## END OF FILE #################################################################