// Create a new Object from Base64 JSON encoded data. func (p *Parser) FromBase64(ctx context.Context, env *rellenv.Env, b64 string) (*Object, error) { jsonBytes, err := base64.URLEncoding.DecodeString(fixPadding(b64)) if err != nil { return nil, fmt.Errorf( "Failed base64 decode of string \"%s\" with error: %s", b64, err) } var strSlices [][]interface{} err = json.Unmarshal(jsonBytes, &strSlices) if err != nil { return nil, fmt.Errorf( "Failed json unmarshal string %s with error %s", string(jsonBytes), err) } object := &Object{ context: ctx, env: env, static: p.Static, } for _, row := range strSlices { if len(row) != 2 { return nil, fmt.Errorf("Got more than two elements in pair: %v", row) } if row[0] == nil { return nil, fmt.Errorf("First element in pair is null: %v", row) } key := fmt.Sprint(row[0]) val := "" switch t := row[1].(type) { case nil: object.skipGenerate = append(object.skipGenerate, key) continue case float64: val = fmt.Sprint(uint64(t)) default: val = fmt.Sprint(t) } object.AddPair(key, val) } if object.shouldGenerate("og:url") { url := env.AbsoluteURL("/rog/" + b64).String() object.AddPair("og:url", url) } err = object.generateDefaults() if err != nil { return nil, err } return object, nil }
func redirectURI(c *rellenv.Env) string { return c.AbsoluteURL(Path + resp).String() }