package main // // Acquiring user's consent // import ( "os" "path" "github.com/ooni/probe-cli/v3/internal/runtimex" ) // acquireUserConsent ensures the user is okay with using miniooni. This function // panics if we do not have acquired the user consent. func acquireUserConsent(miniooniDir string, currentOptions *Options) { consentFile := path.Join(miniooniDir, "informed") err := maybeWriteConsentFile(currentOptions.Yes, consentFile) runtimex.PanicOnError(err, "cannot write informed consent file") runtimex.Assert( regularFileExists(consentFile), riskOfRunningOONI, ) } // maybeWriteConsentFile writes the consent file iff the yes argument is true func maybeWriteConsentFile(yes bool, filepath string) (err error) { if yes { err = os.WriteFile(filepath, []byte("\n"), 0644) } return } // riskOfRunningOONI is miniooni's informed consent text. const riskOfRunningOONI = ` Do you consent to OONI Probe data collection? OONI Probe collects evidence of internet censorship and measures network performance: - OONI Probe will likely test objectionable sites and services; - Anyone monitoring your internet activity (such as a government or Internet provider) may be able to tell that you are using OONI Probe; - The network data you collect will be published automatically unless you use miniooni's -n command line flag. To learn more, see https://ooni.org/about/risks/. If you're onboard, re-run the same command and add the --yes flag, to indicate that you understand the risks. This will create an empty file named 'consent' in $HOME/.miniooni, meaning that we know you opted in and we will not ask you this question again. `