Changeset 74:afb18ded3ba3 in iovar


Ignore:
Timestamp:
12/25/16 00:21:56 (6 months ago)
Author:
Shawn Wilson <shawn@…>
Branch:
default
Phase:
public
Message:

saw_122516_1 - XArgs now supports text/xml input.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • CHANGELOG

    r73 r74  
    22Copyright (C) 2011-2015 Lannocc Technologies
    33@%@~LICENSE~@%@
     4
     5saw_122516_1 - XArgs now supports text/xml input.
    46
    57saw_122216_1 - Add /bin/print to safely and efficiently output any shell variable.
  • LICENSE

    r40 r74  
    11The MIT License (MIT)
    22
     3Copyright (C) 2016-2017 Virgo Venture, Inc.
    34Copyright (C) 2011-2016 Lannocc Technologies
    45
  • src/win/iovar/web/bin/shell/Print.java

    r73 r74  
    2222/**
    2323 * Output shell variable contents.
     24 *
     25 * FIXME: `set` and `print` should also preserve content-type and other headers.
    2426 *
    2527 * @author  shawn@lannocc.com
  • src/win/iovar/web/usr/bin/Form2XML.java

    r72 r74  
    9090//Log.fatal ("standard processing");
    9191           
     92            resp.setContentType ("text/xml");
    9293            final PrintWriter out = resp.getWriter ();
    9394            out.println ("<?xml version=\"1.0\"?>");
     
    131132//Log.fatal ("multipart processing");
    132133       
     134            resp.setContentType ("text/xml");
    133135            final PrintWriter out = resp.getWriter ();
    134136            out.println ("<?xml version=\"1.0\"?>");
  • src/win/iovar/web/usr/bin/FormFile.java

    r53 r74  
    5656        out.println ("Extract a file keyed by <name> from multipart/form-data input.");
    5757        out.println ();
     58        out.println ("FormFile is easily chained to FormFile or Form2XML:");
    5859        out.println ("If <path> is supplied then the file contents are saved there and the");
    5960        out.println ("remaining parts are echoed to output. Otherwise the file contents");
     
    6667        out.println ("              - randomly generate a filename when none is submitted");
    6768        out.println ("   ?set=<name>");
    68         out.println ("              - set a variable <name> with the submitted (or generated) filename");
     69        out.println ("              - set a variable <name> with the computed filename");
    6970        out.println ();
    7071        out.println (" (the following options are available only when <path> is used)");
     
    7273        out.println ("              - whether to delete or ignore when empty file is submitted");
    7374        out.println ("              - default behavior will create an empty file");
    74         out.println ("   ?path=<APPEND>");
    75         out.println ("              - append the submitted (or generated) filename to <path>");
     75        out.println ("   ?path=<APPEND|RANDOM>");
     76        out.println ("              - APPEND the submitted (or generated) filename to <path>");
     77        out.println ("              - append a unique RANDOM string to <path>");
     78        out.println ("                (use in combination with ?set)");
    7679        out.println ("   ?subname   - substitue filename for the file content part data");
    7780    }
     
    323326                Log.info ("filename: "+filename);
    324327               
    325                 final List<String> sets = params.get ("set");
    326                 if (sets!=null)
    327                 {
    328                     final Session session = Sessions.get (req);
    329                     if (session==null)
    330                     {
    331                         Log.error ("unable to retrieve session");
    332                         throw new IllegalArgumentException ("need a session to set variable to");
    333                     }
    334 
    335                     for (final String set : sets)
    336                     {
    337                         Log.debug ("setting filename to variable: "+set);
    338                         // FIXME: re-evaluate this...
    339                         session.export (1, context, set, filename);
    340                     }
    341 
    342                     // FIXME: re-evaluate this...
    343                     session.saveUp (1, context);
    344        
    345                     // FIXME: is this necessary?
    346                     //Sessions.put (req, context, session);
    347                 }
     328                String setname = filename;
    348329               
    349330                if (path!=null) // save the file contents
     
    374355                            Log.debug ("appending filename to path");
    375356                            finalpath = path + filename;
     357                        }
     358                        else if ("random".equalsIgnoreCase (option))
     359                        {
     360                            Log.debug ("appending random string to path");
     361                            setname = "XXX_FIXME_XXX";
     362                            finalpath = path + setname;
    376363                        }
    377364                        else
     
    491478                    //Utils.pipe (in, out, "\r\n");
    492479                }
     480               
     481                final List<String> sets = params.get ("set");
     482                if (sets!=null)
     483                {
     484                    final Session session = Sessions.get (req);
     485                    if (session==null)
     486                    {
     487                        Log.error ("unable to retrieve session");
     488                        throw new IllegalArgumentException ("need a session to set variable to");
     489                    }
     490
     491                    for (final String set : sets)
     492                    {
     493                        Log.debug ("setting filename to variable: "+set);
     494                        // FIXME: re-evaluate this...
     495                        session.export (1, context, set, setname);
     496                    }
     497
     498                    // FIXME: re-evaluate this...
     499                    session.saveUp (1, context);
     500       
     501                    // FIXME: is this necessary?
     502                    //Sessions.put (req, context, session);
     503                }
    493504            }
    494505            else if (path!=null && !quiet) // no match (a)
  • src/win/iovar/web/usr/bin/XArgs.java

    r53 r74  
    1919import javax.servlet.*;
    2020import javax.servlet.http.*;
     21import javax.xml.parsers.*;
     22import org.w3c.dom.*;
     23import org.xml.sax.*;
    2124
    2225// 3rd-party imports:
     
    5558        out.println ("Options:");
    5659        out.println ("   ?help      - display this help screen");
    57         out.println ("   ?_=<name>  - the named option is converted to an anonymous argument");
     60        out.println ("   ?_=<name>  - the named option value(s) converted to anonymous argument(s)");
     61        out.println ("   ?--=<name> - the named option is converted to long-form anonymous name-value pair");
     62        out.println ("                (use * to convert all)");
    5863    }
    5964   
     
    8590        //final String resource = vals.get (0);
    8691       
    87         final List<String> converts = params.get ("_");
    88        
    8992        final InputStream in = req.getInputStream ();
    9093        //Utils.pipe (in, resp.getOutputStream ());
     
    100103       
    101104        final Map<String,List<String>> callParams;
    102 
    103         if ("application/x-www-form-urlencoded".equalsIgnoreCase (req.getContentType ()))
     105        String type = req.getContentType ();
     106        if (type!=null)
     107        {
     108            final int semicolon = type.indexOf (';');
     109            if (semicolon > 0)
     110            {
     111                type = type.substring (0, semicolon);
     112            }
     113            type = type.toLowerCase ();
     114        }
     115
     116        if ("application/x-www-form-urlencoded".equals (type))
    104117        {
    105118            Log.info ("x-www-form-urlencoded xargs processing");
     
    107120            //Log.debug ("in: "+ (int) in.read ());
    108121            callParams = Utils.getParams (Utils.toString (in));
     122        }
     123        else if ("text/xml".equals (type))
     124        {
     125            Log.info ("xml mode xargs processing");
     126           
     127            try
     128            {
     129                final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
     130                final DocumentBuilder builder = factory.newDocumentBuilder ();
     131                final Document doc = builder.parse (in);
     132                doc.getDocumentElement ().normalize ();
     133               
     134                callParams = new HashMap<String,List<String>> ();
     135               
     136                for (Node node = doc.getDocumentElement ().getFirstChild (); node != null; node = node.getNextSibling ())
     137                {
     138                    switch (node.getNodeType ())
     139                    {
     140                        case Node.ELEMENT_NODE:
     141                            final String name = node.getNodeName ();
     142
     143                            List<String> cvals = callParams.get (name);
     144                            if (cvals==null)
     145                            {
     146                                cvals = new ArrayList<String> ();
     147                                callParams.put (name, cvals);
     148                            }
     149
     150                            cvals.add (node.getTextContent ());
     151                            break;
     152                           
     153                        case Node.TEXT_NODE:
     154                            final String text = node.getTextContent ().trim ();
     155                           
     156                            if (! text.isEmpty ())
     157                            {
     158                                List<String> anons = callParams.get (null);
     159                                if (anons==null)
     160                                {
     161                                    anons = new ArrayList<String> ();
     162                                    callParams.put (null, anons);
     163                                }
     164
     165                                anons.add (node.getTextContent ());
     166                            }
     167                            break;
     168                    }
     169                }
     170            }
     171            catch (final ParserConfigurationException e)
     172            {
     173                Log.error (e);
     174                resp.getWriter ().println ("xargs: "+e);
     175                Shell.exit (req, context, 2);
     176                return;
     177            }
     178            catch (final SAXException e)
     179            {
     180                Log.error (e);
     181                resp.getWriter ().println ("xargs: "+e);
     182                Shell.exit (req, context, 3);
     183                return;
     184            }
    109185        }
    110186        else
     
    157233            anons.addAll (0, vals);
    158234        }
    159            
     235       
     236        List<String> converts = params.get ("_");
    160237        if (converts!=null)
    161238        {
    162             Log.debug ("parameters to convert: "+converts);
     239            Log.debug ("parameter values to convert: "+converts);
    163240
    164241            List<String> anons = callParams.get (null);
     
    180257            }
    181258        }
     259       
     260        converts = params.get ("--");
     261        if (converts != null)
     262        {
     263            Log.debug ("parameter name-value pairs to convert to long-form: "+converts);
     264           
     265            List<String> anons = callParams.get (null);
     266            if (anons==null)
     267            {
     268                anons = new ArrayList<String> ();
     269                callParams.put (null, anons);
     270            }
     271           
     272            if (converts.size ()==1 && "*".equals (converts.get (0)))
     273            {
     274                converts = new ArrayList (callParams.keySet ());
     275                converts.remove (null);
     276            }
     277           
     278            for (final String convert : converts)
     279            {
     280                Log.debug ("converting: "+convert);
     281                final List<String> cvals = callParams.remove (convert);
     282                if (cvals!=null && cvals.size ()>0)
     283                {
     284                    for (final String cval : cvals)
     285                    {
     286                        Log.debug ("adding anon arg: --"+convert+"="+cval);
     287                        anons.add ("--"+convert+"="+cval);
     288                    }
     289                }
     290            }
     291        }
    182292
    183293        final Return r = Shell.exec (resource, callParams, new TaskData (session, context, req.getRemoteUser ()));
     
    185295        Utils.pipe (r.data, resp.getOutputStream ());
    186296
    187         Shell.exit (req, context, r.status.affirmative () ? 0 : 2);
     297        Shell.exit (req, context, r.status.affirmative () ? 0 : 99);
    188298    }
    189299}
Note: See TracChangeset for help on using the changeset viewer.