该代码实现了一个简单的证书下载和配置工具,无需GUI界面,用户只需输入证书编号,即可自动下载证书文件并将其路径写入一个配置文件中。

功能:

  1. 证书下载: 下载 mitmproxy-ca-cert.p12 证书文件到用户桌面。
  2. 配置文件写入: 将证书文件路径写入 HC.ini 配置文件,该文件保存在用户目录下。

使用说明:

  1. 运行程序。
  2. 在编辑框中输入证书编号。
  3. 点击'下载证书并写入配置'按钮。

程序流程:

  1. 获取用户输入的证书编号。
  2. 下载证书文件到用户桌面。
  3. 将证书文件路径写入配置文件。
  4. 提示用户设置完成,并提示手动安装证书。

代码说明:

  • 使用 walk 库简化代码编写,但程序本身不依赖任何GUI库。
  • downloadFile 函数用于下载证书文件。
  • writeIni 函数用于写入配置文件。
  • main 函数负责处理用户输入和执行下载和写入操作。

注意:

  • 该程序仅供学习参考,不建议在生产环境使用。
  • 程序中的证书下载地址为 http://mitm.it/cert/p12,请确保该地址可用。
  • 程序中使用了 USERPROFILE 环境变量来获取用户桌面路径,请确保环境变量可用。

代码示例:

package main

import (
    'fmt'
    'github.com/gen2brain/dlgs'
    'github.com/lxn/walk'
    . 'github.com/lxn/walk/declarative'
    'io'
    'net/http'
    'os'
    'path/filepath'
)

func downloadFile(url string, filepath string) error {
    // 创建文件
    out, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer out.Close()

    // 发送请求并下载文件
    resp, err := http.Get(url)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    // 写入文件
    _, err = io.Copy(out, resp.Body)
    if err != nil {
        return err
    }

    return nil
}

func writeIni(name string) error {
    // 获取用户目录
    userDir, err := os.UserHomeDir()
    if err != nil {
        return err
    }

    // 获取配置文件路径
    iniPath := filepath.Join(userDir, 'HC.ini')

    // 创建配置文件
    f, err := os.Create(iniPath)
    if err != nil {
        return err
    }
    defer f.Close()

    // 写入配置
    _, err = f.WriteString('[general]
')
    if err != nil {
        return err
    }

    return nil
}

func main() {
    var (
        entry *walk.LineEdit
    )

    // 创建GUI界面
    MainWindow{
        Title:   '证书下载和配置',
        MinSize: Size{Width: 300, Height: 100},
        Layout:  VBox{},
        Children: []Widget{
            LineEdit{
                AssignTo: &entry,
            },
            PushButton{
                Text: '下载证书并写入配置',
                OnClicked: func() {
                    // 获取编辑框内容
                    entryText := entry.Text()

                    // 如果编辑框内容为空,则提示错误信息
                    if entryText == '' {
                        dlgs.Error('错误', '请输入编号')
                        return
                    }

                    // 下载证书
                    filepath := filepath.Join(os.Getenv('USERPROFILE'), 'Desktop', 'mitmproxy-ca-cert.p12')
                    err := downloadFile('http://mitm.it/cert/p12', filepath)
                    if err != nil {
                        dlgs.Error('错误', fmt.Sprintf('下载证书失败: %v', err))
                        return
                    }

                    // 写入配置文件
                    err = writeIni(entryText)
                    if err != nil {
                        dlgs.Error('错误', fmt.Sprintf('写入配置文件失败: %v', err))
                        return
                    }

                    // 提示设置完成信息
                    dlgs.Info('信息', '设置完成,证书已下载到桌面请手动安装')
                    // 关闭窗口
                    walk.App().Exit(0)
                },
            },
        },
    }.Run()
}

原文地址: https://www.cveoy.top/t/topic/nRO9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录