Move util_ files into utils directory, move main.cpp into src
[gssweb.git] / json_gssapi / src / commands / GSSImportName.cpp
1 /*
2  * Copyright (c) 2014, JANET(UK)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. Neither the name of JANET(UK) nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31  * OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  */
34
35 #include "GSSImportName.h"
36 #include "GSSException.h"
37 #include <cache/GSSNameCache.h>
38 #include <datamodel/GSSDisplayStatus.h>
39
40
41 void GSSImportName::execute()
42 {
43   /* Variables */
44   gss_name_t name;
45   std::string key;
46
47   /* Error checking */
48   /* Setup */
49
50   /* Main */
51   retVal = function(&minor_status, inputName.toGss(), inputNameType.toGss(), &name);
52   JSONObject errors;
53   GSSDisplayStatus ds(retVal, minor_status, inputNameType.toGss());
54   errors.set("major_status_message", ds.getMajorMessage().c_str());
55   errors.set("minor_status_message", ds.getMinorMessage().c_str());
56   values->set("errors", errors);
57   this->outputName.setValue(name);
58   key = GSSNameCache::instance()->store(this->outputName);
59   this->outputName.setKey(key);
60   /* Cleanup */
61   /* Return */
62 }
63
64 /* Example output:
65  * 
66  *   {
67  *     "major_status": 0,
68  *     "minor_status": 0,
69  *     "gss_name": "base64_encoded_string"
70  *   }
71  * 
72  */
73 JSONObject *GSSImportName::toJSON()
74 {
75   /* Variables */
76   /* Error checking */
77   
78   /* Setup */
79   
80   /* Main */
81   values->set("major_status", this->retVal);
82   values->set("minor_status", this->minor_status);
83   values->set("gss_name", this->outputName.getKey().c_str() );
84   
85   /* Cleanup */
86   
87   /* Return */
88   return(values);
89 }
90
91 GSSImportName::GSSImportName ( gss_imp_name_type fn )
92 {
93   // defaults
94   function = fn;
95   inputName = string("");
96   inputNameType.setValue(GSSBuffer( string("{ 1 2 840 113554 1 2 1 4 }") ));
97   values = new JSONObject();
98 }
99
100 GSSImportName::GSSImportName(JSONObject *params, gss_imp_name_type fn)
101 {
102   /* Variables */
103   /* Error checking */
104   /* Setup */
105   /* Main */
106   values = new JSONObject();
107   loadParameters(params);
108   function = fn;
109   /* Cleanup */
110   /* Return */
111   
112 }
113
114 bool GSSImportName::loadParameters(JSONObject *params)
115 {
116   /* Variables */
117   
118   /* Error checking */
119   /* Setup */
120   // Should I zeroOut?  MRW -- do initialize here for null inputs
121   
122   /* Main processing */
123   // Easy stuff(*params)
124   if ( params->isNull() )
125     return true;
126   
127   if ( !params->get("input_name").isNull() )
128   {
129     if ( params->get("input_name").isString() )
130     {
131       std::string input_name = params->get("input_name").string();
132       this->inputName.setValue( input_name );
133     }
134   }
135   
136   if ( !params->get("input_name_type").isNull() )
137   {
138     if ( params->get("input_name_type").isString() )
139     {
140       std::string input_name_type = params->get("input_name_type").string();
141       this->inputNameType.setValue( input_name_type );
142     }
143   }
144   
145   /* Cleanup */
146   /* Return */
147   return true;
148 }