update go-sdk-slim.go, test.jpg

This commit is contained in:
redtea committed 2024-10-19 12:00:00 +03:00
commit 1e844948c7
2 files changed
+660

No files matched your search

+660
View File
@@ -0,0 +1,660 @@
package main
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"mime/multipart"
"net/http"
)
type ConfidentialType string
const (
ALL ConfidentialType = "ALL"
FRIENDS ConfidentialType = "FRIENDS"
NOBODY ConfidentialType = "NOBODY"
)
type ESAccount struct {
DateOfBirth string
Description string
Follows []string
Followers []string
}
func (a ESAccount) String() string {
follows, _ := json.Marshal(a.Follows)
followers, _ := json.Marshal(a.Followers)
return fmt.Sprintf(`{ "date_of_birth": "%s", "description": "%s", "follows": %s, "followers": %s }`, a.DateOfBirth, a.Description, follows, followers)
}
type ESUser struct {
ID int
Username string
FirstName string
LastName string
PictureURL string
Email string
Access string
TelegramID string
GoogleID string
Token string
Account *ESAccount
Confidencial map[string]ConfidentialType
}
func (u ESUser) String() string {
return fmt.Sprintf(`{ "id": %d, "username": "%s", "first_name": "%s", "last_name": "%s", "picture_url": "%s", "email": "%s", "access": "%s", "telegram_id": "%s", "google_id": "%s" }`, u.ID, u.Username, u.FirstName, u.LastName, u.PictureURL, u.Email, u.Access, u.TelegramID, u.GoogleID)
}
type ESCleint struct {
Token string
}
func (c *ESCleint) getSelf() (*ESUser, error) {
url := "https://auth.easystartup.su/api/user/self"
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
account, err := c.getSelfAccount()
if err != nil {
return nil, err
}
confidencial, err := c.getSelfConfidential()
if err != nil {
return nil, err
}
return &ESUser{
ID: int(data["id"].(float64)),
Username: data["username"].(string),
FirstName: data["first_name"].(string),
LastName: data["last_name"].(string),
PictureURL: data["picture_url"].(string),
Email: data["email"].(string),
Access: data["access"].(string),
TelegramID: data["telegram_id"].(string),
GoogleID: data["google_id"].(string),
Token: c.Token,
Account: account,
Confidencial: confidencial,
}, nil
}
func (c *ESCleint) follow(id int) error {
url := fmt.Sprintf("https://account.easystartup.su/api/following/follow/%d", id)
req, err := http.NewRequest("PUT", url, nil)
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) unfollow(id int) error {
url := fmt.Sprintf("https://account.easystartup.su/api/following/unfollow/%d", id)
req, err := http.NewRequest("PUT", url, nil)
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) getSelfAccount() (*ESAccount, error) {
url := "https://account.easystartup.su/api/account"
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
follows := []string{}
if data["follows"] != nil {
for _, f := range data["follows"].([]interface{}) {
follows = append(follows, f.(string))
}
}
followers := []string{}
if data["followers"] != nil {
for _, f := range data["followers"].([]interface{}) {
followers = append(followers, f.(string))
}
}
return &ESAccount{
DateOfBirth: data["date_of_birth"].(string),
Description: data["description"].(string),
Follows: follows,
Followers: followers,
}, nil
}
func (c *ESCleint) editSelfAccount(user *ESUser) error {
url := "https://account.easystartup.su/api/account"
data := map[string]string{
"date_of_birth": user.Account.DateOfBirth,
"description": user.Account.Description,
}
jsonData, _ := json.Marshal(data)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) editSelfConfidential(user *ESUser) error {
url := "https://account.easystartup.su/api/confidential"
data := user.Confidencial
for k, v := range data {
data[k] = v
}
jsonData, _ := json.Marshal(data)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) getSelfConfidential() (map[string]ConfidentialType, error) {
url := "https://account.easystartup.su/api/confidential"
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]string
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
confidential := make(map[string]ConfidentialType)
for k, v := range data {
confidential[k] = ConfidentialType(v)
}
return confidential, nil
}
func (c *ESCleint) editSelf(user *ESUser) error {
url := "https://auth.easystartup.su/api/user/self"
data := map[string]string{
"email": user.Email,
"first_name": user.FirstName,
"last_name": user.LastName,
"username": user.Username,
}
jsonData, _ := json.Marshal(data)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if err := c.editSelfAccount(user); err != nil {
return err
}
if err := c.editSelfConfidential(user); err != nil {
return err
}
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) getAccount(id int) (*ESAccount, error) {
url := fmt.Sprintf("https://account.easystartup.su/api/account/%d", id)
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
follows := []string{}
if data["follows"] != nil {
for _, f := range data["follows"].([]interface{}) {
follows = append(follows, f.(string))
}
}
followers := []string{}
if data["followers"] != nil {
for _, f := range data["followers"].([]interface{}) {
followers = append(followers, f.(string))
}
}
return &ESAccount{
DateOfBirth: data["date_of_birth"].(string),
Description: data["description"].(string),
Follows: follows,
Followers: followers,
}, nil
}
func (c *ESCleint) editAccount(user *ESUser) error {
url := fmt.Sprintf("https://account.easystartup.su/api/confidential/%d", user.ID)
data := map[string]string{
"date_of_birth": user.Account.DateOfBirth,
"description": user.Account.Description,
}
jsonData, _ := json.Marshal(data)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) editConfidential(user *ESUser) error {
url := fmt.Sprintf("https://account.easystartup.su/api/confidential/%d", user.ID)
data := user.Confidencial
for k, v := range data {
data[k] = v
}
jsonData, _ := json.Marshal(data)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) getConfidential(id int) (map[string]ConfidentialType, error) {
url := fmt.Sprintf("https://account.easystartup.su/api/confidential/%d", id)
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]string
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
confidential := make(map[string]ConfidentialType)
for k, v := range data {
confidential[k] = ConfidentialType(v)
}
return confidential, nil
}
func (c *ESCleint) picture(file io.Reader) error {
url := "https://account.easystartup.su/api/account/picture"
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile("file", "pic.png")
if err != nil {
return err
}
if _, err := io.Copy(part, file); err != nil {
return err
}
writer.Close()
req, err := http.NewRequest("POST", url, body)
if err != nil {
return err
}
req.Header = c.headers()
req.Header.Set("Content-Type", writer.FormDataContentType())
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) create(user *ESUser) (*ESUser, error) {
url := "https://auth.easystartup.su/api/user/"
jsn, _ := json.Marshal(user)
req, err := http.NewRequest("PUT", url, bytes.NewBuffer(jsn))
if err != nil {
return nil, err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
account, err := c.getAccount(int(data["id"].(float64)))
if err != nil {
return nil, err
}
confidencial, err := c.getConfidential(int(data["id"].(float64)))
if err != nil {
return nil, err
}
return &ESUser{
ID: int(data["id"].(float64)),
Username: data["username"].(string),
FirstName: data["first_name"].(string),
LastName: data["last_name"].(string),
PictureURL: data["picture_url"].(string),
Email: data["email"].(string),
Access: data["access"].(string),
TelegramID: data["telegram_id"].(string),
GoogleID: data["google_id"].(string),
Token: c.Token,
Account: account,
Confidencial: confidencial,
}, nil
}
func (c *ESCleint) edit(user *ESUser) error {
url := fmt.Sprintf("https://auth.easystartup.su/api/user/%d", user.ID)
jsn, _ := json.Marshal(user)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsn))
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if err := c.editAccount(user); err != nil {
return err
}
if err := c.editConfidential(user); err != nil {
return err
}
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) delete(user *ESUser) error {
url := fmt.Sprintf("https://auth.easystartup.su/api/user/%d", user.ID)
req, err := http.NewRequest("DELETE", url, nil)
if err != nil {
return err
}
req.Header = c.headers()
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
url = fmt.Sprintf("https://auth.easystartup.su/api/account/%d", user.ID)
req, err = http.NewRequest("DELETE", url, nil)
if err != nil {
return err
}
req.Header = c.headers()
response, err = http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
return nil
}
func (c *ESCleint) users(start int, limit int) ([]interface{}, error) {
url := fmt.Sprintf("https://auth.easystartup.su/api/user/all?start=%d&limit=%d", start, limit)
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data []interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
return data, nil
}
func (c *ESCleint) public(id int) ([]interface{}, error) {
url := fmt.Sprintf("https://account.easystartup.su/api/public/%d", id)
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data []interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
return data, nil
}
func (c *ESCleint) usersCount() (int, error) {
url := "https://auth.easystartup.su/api/user/count"
response, err := http.Get(url)
if err != nil {
return 0, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return 0, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]int
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return 0, err
}
return data["count"], nil
}
func (c *ESCleint) get(id int) (*ESUser, error) {
url := fmt.Sprintf("https://auth.easystartup.su/api/user/%d", id)
response, err := http.Get(url)
if err != nil {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New("Bad response code: " + fmt.Sprint(response.StatusCode))
}
var data map[string]interface{}
if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
return nil, err
}
account, err := c.getAccount(int(data["id"].(float64)))
if err != nil {
return nil, err
}
confidencial, err := c.getConfidential(int(data["id"].(float64)))
if err != nil {
return nil, err
}
return &ESUser{
ID: int(data["id"].(float64)),
Username: data["username"].(string),
FirstName: data["first_name"].(string),
LastName: data["last_name"].(string),
PictureURL: data["picture_url"].(string),
Email: data["email"].(string),
Access: data["access"].(string),
TelegramID: data["telegram_id"].(string),
GoogleID: data["google_id"].(string),
Token: c.Token,
Account: account,
Confidencial: confidencial,
}, nil
}
func (c *ESCleint) headers() map[string]string {
return map[string]string{
"Authorization": "Bearer " + c.Token,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0",
"Accept": "application/json",
}
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB