func (psd *principalServiceDelegate) fetchWireBlessings(token string, pub publicKey) (*wireBlessings, error) { networkReq, networkPtr := network.CreateMessagePipeForNetworkService() psd.Ctx.ConnectToApplication("mojo:network_service").ConnectToService(&networkReq) networkProxy := network.NewNetworkServiceProxy(networkPtr, bindings.GetAsyncWaiter()) urlLoaderReq, urlLoaderPtr := url_loader.CreateMessagePipeForUrlLoader() if err := networkProxy.CreateUrlLoader(urlLoaderReq); err != nil { return nil, fmt.Errorf("Failed to create url loader: %v", err) } urlLoaderProxy := url_loader.NewUrlLoaderProxy(urlLoaderPtr, bindings.GetAsyncWaiter()) req, err := blessingRequestURL(token, pub) if err != nil { return nil, err } resp, err := urlLoaderProxy.Start(*req) if err != nil || resp.Error != nil { return nil, fmt.Errorf("Blessings request to Vanadium Identity Provider failed: %v(%v)", err, resp.Error) } res, b := (*resp.Body).ReadData(system.MOJO_READ_DATA_FLAG_ALL_OR_NONE) if res != system.MOJO_RESULT_OK { return nil, fmt.Errorf("Failed to read response (blessings) from Vanadium Identity Provider. Result: %v", res) } var wb wireBlessings if err := json.Unmarshal(b, &wb); err != nil { return nil, fmt.Errorf("Failed to unmarshal response (blessings) from Vanadium Identity Provider: %v", err) } // TODO(ataly, gauthamt): We should verify all signatures on the certificate chains in the // wire blessings to ensure that it was not tampered with. return &wb, nil }
func (psd *principalServiceDelegate) getBlessing(token string, pub publicKey) ([]uint8, error) { networkReq, networkPtr := network.CreateMessagePipeForNetworkService() psd.Ctx.ConnectToApplication("mojo:network_service").ConnectToService(&networkReq) networkProxy := network.NewNetworkServiceProxy(networkPtr, bindings.GetAsyncWaiter()) urlLoaderReq, urlLoaderPtr := url_loader.CreateMessagePipeForUrlLoader() if err := networkProxy.CreateUrlLoader(urlLoaderReq); err != nil { return nil, fmt.Errorf("failed to create url loader: %v", err) } urlLoader := url_loader.NewUrlLoaderProxy(urlLoaderPtr, bindings.GetAsyncWaiter()) req, err := blessingRequestURL(token, pub) if err != nil { return nil, err } resp, err := urlLoader.Start(*req) if err != nil || resp.Error != nil { return nil, fmt.Errorf("blessings request to Vanadium Identity Provider failed: %v(%v)", err, resp.Error) } res, b := (*resp.Body).ReadData(system.MOJO_READ_DATA_FLAG_ALL_OR_NONE) if res != system.MOJO_RESULT_OK { return nil, fmt.Errorf("failed to read response (blessings) from Vanadium Identity Provider. Result: %v", res) } return b, nil }