github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/plugin/v7/rpc/cli_rpc_command.go (about) 1 // +build V7 2 3 package rpc 4 5 import ( 6 "bytes" 7 "encoding/gob" 8 "errors" 9 "fmt" 10 "io" 11 "sync" 12 13 "code.cloudfoundry.org/cli/command" 14 plugin "code.cloudfoundry.org/cli/plugin/v7" 15 plugin_models "code.cloudfoundry.org/cli/plugin/v7/models" 16 "code.cloudfoundry.org/cli/version" 17 "github.com/blang/semver" 18 ) 19 20 type CliRpcCmd struct { 21 PluginMetadata *plugin.PluginMetadata 22 MetadataMutex *sync.RWMutex 23 Config command.Config 24 PluginActor PluginActor 25 outputCapture OutputCapture 26 terminalOutputSwitch TerminalOutputSwitch 27 outputBucket *bytes.Buffer 28 stdout io.Writer 29 } 30 31 func (cmd *CliRpcCmd) ApiEndpoint(args string, retVal *string) error { 32 *retVal = cmd.Config.Target() 33 34 return nil 35 } 36 37 func (cmd *CliRpcCmd) IsMinCliVersion(passedVersion string, retVal *bool) error { 38 if version.VersionString() == version.DefaultVersion { 39 *retVal = true 40 return nil 41 } 42 43 actualVersion, err := semver.Make(version.VersionString()) 44 if err != nil { 45 return err 46 } 47 48 requiredVersion, err := semver.Make(passedVersion) 49 if err != nil { 50 return err 51 } 52 53 *retVal = actualVersion.GTE(requiredVersion) 54 55 return nil 56 } 57 58 func (cmd *CliRpcCmd) SetPluginMetadata(pluginMetadata plugin.PluginMetadata, retVal *bool) error { 59 cmd.MetadataMutex.Lock() 60 defer cmd.MetadataMutex.Unlock() 61 62 cmd.PluginMetadata = &pluginMetadata 63 *retVal = true 64 return nil 65 } 66 67 func (cmd *CliRpcCmd) DisableTerminalOutput(disable bool, retVal *bool) error { 68 cmd.terminalOutputSwitch.DisableTerminalOutput(disable) 69 *retVal = true 70 return nil 71 } 72 73 func (cmd *CliRpcCmd) CallCoreCommand(args []string, retVal *bool) error { 74 return errors.New("unimplemented") 75 } 76 77 func (cmd *CliRpcCmd) GetOutputAndReset(args bool, retVal *[]string) error { 78 return errors.New("unimplemented") 79 } 80 81 func (cmd *CliRpcCmd) GetApp(appName string, retVal *plugin_models.DetailedApplicationSummary) error { 82 if !cmd.Config.HasTargetedOrganization() { 83 return errors.New("no organization targeted") 84 } 85 spaceGUID := cmd.Config.TargetedSpace().GUID 86 if spaceGUID == "" { 87 return errors.New("no space targeted") 88 } 89 90 app, _, err := cmd.PluginActor.GetDetailedAppSummary(appName, spaceGUID, true) 91 92 if err != nil { 93 return err 94 } 95 var b bytes.Buffer 96 enc := gob.NewEncoder(&b) 97 dec := gob.NewDecoder(&b) 98 99 err = enc.Encode(app) 100 if err != nil { 101 panic(err) 102 } 103 104 err = dec.Decode(retVal) 105 if err != nil { 106 panic(err) 107 } 108 return nil 109 } 110 111 func (cmd *CliRpcCmd) GetApps(appName string, retVal *[]plugin_models.Application) error { 112 spaceGUID := cmd.Config.TargetedSpace().GUID 113 if spaceGUID == "" { 114 return errors.New("no space targeted") 115 } 116 applications, warnings, err := cmd.PluginActor.GetApplicationsBySpace(spaceGUID) 117 if err != nil { 118 return err 119 } 120 for _, warning := range warnings { 121 fmt.Printf("GetApps warning: %s\n", warning) 122 } 123 var b bytes.Buffer 124 enc := gob.NewEncoder(&b) 125 dec := gob.NewDecoder(&b) 126 127 err = enc.Encode(applications) 128 if err != nil { 129 panic(err) 130 } 131 132 err = dec.Decode(retVal) 133 if err != nil { 134 panic(err) 135 } 136 return nil 137 } 138 139 func (cmd *CliRpcCmd) GetCurrentOrg(args string, retVal *plugin_models.Org) error { 140 org := cmd.Config.TargetedOrganization() 141 if org.Name == "" { 142 return errors.New("no organization targeted") 143 } 144 145 var b bytes.Buffer 146 enc := gob.NewEncoder(&b) 147 dec := gob.NewDecoder(&b) 148 149 err := enc.Encode(org) 150 if err != nil { 151 panic(err) 152 } 153 154 err = dec.Decode(retVal) 155 if err != nil { 156 panic(err) 157 } 158 return nil 159 } 160 161 func (cmd *CliRpcCmd) GetCurrentSpace(args string, retVal *plugin_models.Space) error { 162 orgGUID := cmd.Config.TargetedOrganization().GUID 163 if orgGUID == "" { 164 return errors.New("no organization targeted") 165 } 166 spaceName := cmd.Config.TargetedSpace().Name 167 if spaceName == "" { 168 return errors.New("no space targeted") 169 } 170 space, _, err := cmd.PluginActor.GetSpaceByNameAndOrganization(spaceName, orgGUID) 171 172 if err != nil { 173 return err 174 } 175 var b bytes.Buffer 176 enc := gob.NewEncoder(&b) 177 dec := gob.NewDecoder(&b) 178 179 err = enc.Encode(space) 180 if err != nil { 181 panic(err) 182 } 183 184 err = dec.Decode(retVal) 185 if err != nil { 186 panic(err) 187 } 188 return nil 189 } 190 191 func (cmd *CliRpcCmd) GetOrg(orgName string, retVal *plugin_models.OrgSummary) error { 192 org, _, err := cmd.PluginActor.GetOrganizationByName(orgName) 193 if err != nil { 194 return err 195 } 196 197 spaces, _, err := cmd.PluginActor.GetOrganizationSpaces(org.GUID) 198 if err != nil { 199 return err 200 } 201 202 domains, _, err := cmd.PluginActor.GetOrganizationDomains(org.GUID, "") 203 if err != nil { 204 return err 205 } 206 207 for _, space := range spaces { 208 newSpace := plugin_models.Space{ 209 GUID: space.GUID, 210 Name: space.Name, 211 } 212 retVal.Spaces = append(retVal.Spaces, newSpace) 213 } 214 215 for _, domain := range domains { 216 newDomain := plugin_models.Domain{GUID: domain.GUID, Name: domain.Name} 217 retVal.Domains = append(retVal.Domains, newDomain) 218 } 219 220 var b bytes.Buffer 221 enc := gob.NewEncoder(&b) 222 dec := gob.NewDecoder(&b) 223 224 err = enc.Encode(org.Metadata) 225 if err != nil { 226 panic(err) 227 } 228 229 var metadata plugin_models.Metadata 230 231 err = dec.Decode(&metadata) 232 if err != nil { 233 panic(err) 234 } 235 236 retVal.Name = org.Name 237 retVal.GUID = org.GUID 238 retVal.Metadata = metadata 239 240 return nil 241 } 242 243 func (cmd *CliRpcCmd) GetSpace(spaceName string, retVal *plugin_models.Space) error { 244 orgGUID := cmd.Config.TargetedOrganization().GUID 245 if orgGUID == "" { 246 return errors.New("no organization targeted") 247 } 248 space, _, err := cmd.PluginActor.GetSpaceByNameAndOrganization(spaceName, orgGUID) 249 if err != nil { 250 return err 251 } 252 253 var b bytes.Buffer 254 enc := gob.NewEncoder(&b) 255 dec := gob.NewDecoder(&b) 256 257 err = enc.Encode(space) 258 if err != nil { 259 panic(err) 260 } 261 262 err = dec.Decode(retVal) 263 if err != nil { 264 panic(err) 265 } 266 267 return nil 268 } 269 270 func (cmd *CliRpcCmd) GetSpaces(not_used string, retVal *[]plugin_models.Space) error { 271 orgGUID := cmd.Config.TargetedOrganization().GUID 272 if orgGUID == "" { 273 return errors.New("no organization targeted") 274 } 275 spaces, _, err := cmd.PluginActor.GetOrganizationSpaces(orgGUID) 276 if err != nil { 277 return err 278 } 279 280 var b bytes.Buffer 281 enc := gob.NewEncoder(&b) 282 dec := gob.NewDecoder(&b) 283 284 err = enc.Encode(spaces) 285 if err != nil { 286 return err 287 } 288 289 err = dec.Decode(retVal) 290 if err != nil { 291 return err 292 } 293 294 return nil 295 } 296 297 func (cmd *CliRpcCmd) IsLoggedIn(args string, retVal *bool) error { 298 *retVal = cmd.Config.AccessToken() != "" 299 return nil 300 } 301 302 func (cmd *CliRpcCmd) IsSkipSSLValidation(args string, retVal *bool) error { 303 *retVal = cmd.Config.SkipSSLValidation() 304 return nil 305 } 306 307 func (cmd *CliRpcCmd) AccessToken(args string, retVal *string) error { 308 accessToken, err := cmd.PluginActor.RefreshAccessToken() 309 if err != nil { 310 panic(err) 311 } 312 *retVal = accessToken 313 return nil 314 } 315 316 func (cmd *CliRpcCmd) Username(args string, retVal *string) error { 317 username, err := cmd.Config.CurrentUserName() 318 if err != nil { 319 return fmt.Errorf("error processing config: %s", err.Error()) 320 } 321 if username == "" { 322 return errors.New("not logged in") 323 } 324 *retVal = username 325 326 return nil 327 }