SignedRequest.go

package model

import (
	"errors"

	"github.com/Saseul/util"
)

type SignedRequest struct {
	SignedData
}

func NewSignedRequest(item map[string]interface{}) *SignedRequest {
	sr := &SignedRequest{
		SignedData: SignedData{
			Data:        item["request"].(map[string]interface{}),
			PublicKey:   item["public_key"].(string),
			Signature:   item["signature"].(string),
			Cid:         item["request"].(map[string]interface{})["cid"].(string),
			Type:        item["request"].(map[string]interface{})["type"].(string),
			Timestamp:   int64(item["request"].(map[string]interface{})["timestamp"].(float64)),
			Attributes:  make(map[string]interface{}),
			CachedUniversal: make(map[string]interface{}),
			CachedLocal: make(map[string]interface{}),
		},
	}
	sr.Hash = sr.Hash()
	return sr
}

func (sr *SignedRequest) Validity() (bool, error) {
	if sr.Data == nil {
		return false, errors.New("The request must contain the 'request' parameter.")
	}

	if sr.Type == "" {
		return false, errors.New("The request must contain the 'request.type' parameter.")
	}

	if _, ok := sr.Data["type"].(string); !ok {
		return false, errors.New("Parameter 'request.type' must be of string type.")
	}

	return true, nil
}

func (sr *SignedRequest) Obj() map[string]interface{} {
	return map[string]interface{}{
		"request":   sr.Data,
		"public_key": sr.PublicKey,
		"signature": sr.Signature,
	}
}

SignedRequest ꡬ쑰체

SignedRequest κ΅¬μ‘°μ²΄λŠ” μ„œλͺ…λœ μš”μ²­μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이 κ΅¬μ‘°μ²΄λŠ” SignedData ꡬ쑰체λ₯Ό ν¬ν•¨ν•˜κ³  있으며, μ„œλͺ…λœ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 좔가적인 λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

NewSignedRequest ν•¨μˆ˜

이 ν•¨μˆ˜λŠ” μ΄ˆκΈ°ν™” 데이터λ₯Ό λ°›μ•„ μƒˆλ‘œμš΄ SignedRequest 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  1. SignedRequest 객체λ₯Ό μƒμ„±ν•˜κ³ , SignedData ꡬ쑰체λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

  2. μš”μ²­ 데이터, 곡개 ν‚€, μ„œλͺ…, ν΄λΌμ΄μ–ΈνŠΈ ID, νƒ€μž…, νƒ€μž„μŠ€νƒ¬ν”„ 등을 μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

  3. Hash λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ ν•΄μ‹œ 값을 μ„€μ •ν•©λ‹ˆλ‹€.

Validity ν•¨μˆ˜

이 ν•¨μˆ˜λŠ” SignedRequest 객체의 μœ νš¨μ„±μ„ κ²€μ‚¬ν•©λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  1. sr.Dataκ°€ nil인 경우 μ—λŸ¬λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  2. sr.Type이 빈 λ¬Έμžμ—΄μΈ 경우 μ—λŸ¬λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  3. sr.Data["type"]이 λ¬Έμžμ—΄ νƒ€μž…μ΄ μ•„λ‹Œ 경우 μ—λŸ¬λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  4. λͺ¨λ“  쑰건을 λ§Œμ‘±ν•˜λ©΄ true와 nil을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

Obj ν•¨μˆ˜

이 ν•¨μˆ˜λŠ” SignedRequest 객체λ₯Ό λ§΅ ν˜•νƒœλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 맡은 JSON ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” SignedRequest 객체의 μ£Όμš” 데이터λ₯Ό λ§΅ ν˜•νƒœλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. λ°˜ν™˜λœ 맡은 JSON ν˜•μ‹μœΌλ‘œ μ‰½κ²Œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

전체 μ½”λ“œ μ˜ˆμ‹œ

이 μ½”λ“œλŠ” μ„œλͺ…λœ μš”μ²­ 데이터λ₯Ό μƒμ„±ν•˜κ³ , κ·Έ 데이터에 λŒ€ν•΄ λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 데이터λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³  μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜λ©° 객체λ₯Ό λ§΅ ν˜•νƒœλ‘œ λ³€ν™˜ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 μ˜ˆμ œμ—μ„œλŠ” NewSignedRequest ν•¨μˆ˜λ‘œ μƒˆλ‘œμš΄ μ„œλͺ…λœ μš”μ²­ 데이터λ₯Ό μƒμ„±ν•˜κ³ , Validity ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°μ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, Obj ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό λ§΅ ν˜•νƒœλ‘œ λ³€ν™˜ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

Last updated