8c1e9de079c0a688a90f1bbcd4a239d4dd0bf1ca
[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 //   if ( GSS_ERROR(this->retVal) )
53 //   {
54     JSONObject errors;
55     GSSDisplayStatus ds(retVal, minor_status, inputNameType.toGss());
56     errors.set("major_status_message", ds.getMajorMessage().c_str());
57     errors.set("minor_status_message", ds.getMinorMessage().c_str());
58     values->set("errors", errors);
59 //   }
60   
61   
62   
63   this->outputName.setValue(name);
64   key = GSSNameCache::instance()->store(this->outputName);
65 //   std::cout << "Storing key: " << key << std::endl;
66   this->outputName.setKey(key);
67   /* Cleanup */
68   /* Return */
69   
70 }
71
72 /* Example output:
73  * 
74  *   {
75  *     "major_status": 0,
76  *     "minor_status": 0,
77  *     "gss_name": "base64_encoded_string"
78  *   }
79  * 
80  */
81 JSONObject *GSSImportName::toJSON()
82 {
83   /* Variables */
84   /* Error checking */
85   
86   /* Setup */
87   
88   /* Main */
89   values->set("major_status", this->retVal);
90   values->set("minor_status", this->minor_status);
91   values->set("gss_name", this->outputName.getKey().c_str() );
92   
93   /* Cleanup */
94   
95   /* Return */
96   return(values);
97 }
98
99 GSSImportName::GSSImportName ( gss_imp_name_type fn )
100 {
101   // defaults
102   function = fn;
103   inputName = string("");
104   inputNameType.setValue(GSSBuffer( string("{ 1 2 840 113554 1 2 1 4 }") ));
105   values = new JSONObject();
106 }
107
108 GSSImportName::GSSImportName(JSONObject *params, gss_imp_name_type fn)
109 {
110   /* Variables */
111   /* Error checking */
112   /* Setup */
113   /* Main */
114   values = new JSONObject();
115   loadParameters(params);
116   function = fn;
117   /* Cleanup */
118   /* Return */
119   
120 }
121
122 bool GSSImportName::loadParameters(JSONObject *params)
123 {
124   /* Variables */
125   
126   /* Error checking */
127   /* Setup */
128   // Should I zeroOut?
129   
130   /* Main processing */
131   // Easy stuff(*params)
132   if ( params->isNull() )
133     return true;
134   
135   if ( !params->get("input_name").isNull() )
136   {
137     if ( params->get("input_name").isString() )
138     {
139       std::string input_name = params->get("input_name").string();
140       this->inputName.setValue( input_name );
141     }
142   }
143   
144   if ( !params->get("input_name_type").isNull() )
145   {
146     if ( params->get("input_name_type").isString() )
147     {
148       std::string input_name_type = params->get("input_name_type").string();
149       this->inputNameType.setValue( input_name_type );
150     }
151   }
152   
153   /* Cleanup */
154   /* Return */
155   return true;
156 }
157
158
159
160
161 /* Variables */
162 /* Error checking */
163 /* Setup */
164 /* Main */
165 /* Cleanup */
166 /* Return */