Created
August 31, 2019 20:35
-
-
Save DrMetallius/4ea45f0012ba93c649c6f462da6af523 to your computer and use it in GitHub Desktop.
Backup Authentication
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
type IdentityProviderLocation struct { | |
ServerUrl string `json:"server_url"` | |
Id int `json:"id"` | |
Login string `json:"login"` | |
} | |
type OpenIdentityProviderSessionResponse struct { | |
AccessToken string `json:"access_token"` | |
RefreshToken string `json:"refresh_token"` | |
IdToken string `json:"id_token"` | |
TokenType string `json:"token_type"` | |
Error string `json:"error"` | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"encoding/json" | |
"io/ioutil" | |
"net/http" | |
"net/url" | |
"errors" | |
) | |
const ( | |
cloudRootUrl = "https://trueimage.acronis.com" | |
testLogin = "[email protected]" | |
testPassword = "qwe123QWE" | |
) | |
type IdentityProviderSession struct { | |
IdToken string | |
RefreshToken string | |
} | |
func main() { | |
result, err := retrieveIdentityProviderUrl(cloudRootUrl, testLogin) | |
if err != nil { | |
println("Error: " + err.Error()) | |
return | |
} | |
println(result) | |
session, err := openIdentityProviderSession(result, testLogin, testPassword) | |
if err != nil { | |
println("Error: " + err.Error()) | |
return | |
} | |
println(session.IdToken) | |
} | |
func retrieveIdentityProviderUrl(cloudRootUrlStr, login string) (string, error) { | |
cloudRootUrl, err := url.Parse(cloudRootUrlStr) | |
if err != nil { | |
return "", err | |
} | |
cloudRootUrl.Path += "/api/1/accounts" | |
query := url.Values{} | |
query.Add("login", login) | |
cloudRootUrl.RawQuery = query.Encode() | |
response, err := http.Get(cloudRootUrl.String()) | |
if err != nil { | |
return "", err | |
} | |
defer response.Body.Close() | |
data, err := ioutil.ReadAll(response.Body) | |
if err != nil { | |
return "", err | |
} | |
var providerLocation IdentityProviderLocation | |
if err := json.Unmarshal(data, &providerLocation); err != nil { | |
return "", err | |
} | |
return providerLocation.ServerUrl, nil | |
} | |
func openIdentityProviderSession(identityProviderUrlStr, userName, password string) (*IdentityProviderSession, error) { | |
identityProviderUrl, err := url.Parse(identityProviderUrlStr) | |
if err != nil { | |
return nil, err | |
} | |
identityProviderUrl.Path += "/api/idp/v1/token" | |
params := url.Values{} | |
params.Add("grant_type", "password") | |
params.Add("client_id", "backupAgent") | |
params.Add("username", userName) | |
params.Add("password", password) | |
response, err := http.PostForm(identityProviderUrl.String(), params) | |
if err != nil { | |
return nil, err | |
} | |
defer response.Body.Close() | |
data, err := ioutil.ReadAll(response.Body) | |
if err != nil { | |
return nil, err | |
} | |
var openSessionResponse OpenIdentityProviderSessionResponse | |
if err := json.Unmarshal(data, &openSessionResponse); err != nil { | |
return nil, err | |
} | |
if openSessionResponse.Error != "" { | |
return nil, errors.New(openSessionResponse.Error) | |
} | |
return &IdentityProviderSession{openSessionResponse.IdToken, openSessionResponse.RefreshToken}, nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment