作者: wangguanqun

  • Gitea 使用o365 发邮件

    Gitea 可以通过配置SMTP 服务器来使用Office 365 (O365) 发送邮件。具体步骤如下:

    1. 获取O365 SMTP 设置:你需要获取O365 的SMTP 服务器地址、端口、用户名和密码。通常SMTP 服务器地址是 smtp.office365.com,端口是587 (TLS) 或25 (STARTTLS)。
    2. 配置Gitea:在Gitea 的配置文件(app.ini) 中,找到 [mailer] 部分,并进行如下配置:
      • ENABLED = true 启用邮件功能。
      • PROTOCOL = smtp 指定使用SMTP 协议。
      • HOST = smtp.office365.com 设置SMTP 服务器地址。
      • PORT = 587 设置SMTP 端口。
      • USER = your_o365_email@example.com 设置你的O365 邮箱地址。
      • PASSWD = your_o365_password 设置你的O365 邮箱密码。
      • FROM = your_o365_email@example.com 设置发件人邮箱地址。
      • USE_TLS = true 启用TLS 加密。
      • SKIP_VERIFY = false 如果需要验证证书,则设置为 false,否则设置为 true
    3. 重启Gitea:修改完配置文件后,需要重启Gitea 使配置生效。

    示例配置(app.ini):

    代码

    [mailer]
    ENABLED = true
    PROTOCOL = smtp
    HOST = smtp.office365.com
    PORT = 587
    USER = your_o365_email@example.com
    PASSWD = your_o365_password
    FROM = your_o365_email@example.com
    USE_TLS = true
    SKIP_VERIFY = false

    注意:

    • 请将 your_o365_email@example.com 和 your_o365_password 替换为你真实的O365 邮箱地址和密码。
    • 如果你的O365 邮箱启用了MFA (多因素身份验证),则可能需要使用应用程序密码。
    • Gitea 默认使用UTF-8 编码,如果你的邮件内容包含特殊字符,确保编码正确。
    • 请确保你的O365 邮箱已经配置为允许通过SMTP 发送邮件。

    配置完成后,Gitea 就可以使用O365 邮箱发送邮件了。你可以通过Gitea 的邮件测试功能来验证配置是否正确,Gitea 文档 中有详细说明如何进行测试

  • 关于前端项目运行不兼容20.10.0的解决方法

    最近,安装了Node最新的版本20.10.0,在执行yarn安装依赖时爆了如下的错误。

    error @achrinza/node-ipc@9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "20.10.0"
    error Found incompatible module.
    info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
    

    如果逐个的进行升级,可能会比较麻烦,那我们可以使用如下的命令来忽略引擎的检查,命令如下。

    yarn config set ignore-engines true

    执行完上面的命令后,会看到如下的提示。

    xianghong@xiangdembp vue-music % yarn config set ignore-engines true
    yarn config v1.22.19
    success Set "ignore-engines" to "true".
    ✨  Done in 0.04s.

    此时,再次执行yarn install命令安装以来包就没有任何的问题了。

  • 最新版本 IDEA 2022.2.X 2022.3.X 激活(附激活码)

    背景#

    截止至2023-02-14,IDEA最新版本为2022.3.2,对于某些想体验最新版IDEA却暂时没法入正的开发者来说,不能体验新版非常遗憾。
    重置IDEA体验版的插件IDE Eval Resetter已经失效了,不过开发此插件的作者又开发出另一款工具ja-netfilter,但是文档中使用方法写的有些模糊,我就以我自己的使用经验分享给大家。

    image
    image

    下载IDEA#

    从官网下载并安装IDEA。

    https://www.jetbrains.com/idea/download

    如果想安装旧版,左边有个other versions。

    激活IDEA#

    首先打开这个网址 https://3.jetbra.in/ 等待测试延迟后选择一个进入。

    image
    image

    页面上方有一个jetbra.zip,点击下载。

    下载后将其解压到IDEA的bin目录,解压出来后ja-netfilter.jar应该是和idea64.exe在同一个目录

    写文章时使用的IDEA版本是2022.2.4,我没有卸载,直接安装了最新版2022.3.2是依靠2022.2.4激活的
    理论上适用于2022.3.2,没有完全测试过

    image
    image

    随后进入到scripts目录,执行install-all-user.vbs或者install-current-user.vbs
    会弹出一个提示框,点确定。

    耐心等待一下,这个花的时间可能会比较久,可能要好几分钟,之后会弹出提示框提示已完成。

    image

    打开IDEA,会提示你需要激活,回到刚刚的页面 https://3.jetbra.in/

    找到IDEA的卡片,点击Copy to clipboard

    image

    IDEA中选激活码激活粘贴进去就可以了,不用关心激活到期时间。

    激活码#

    注意到有些人好像没办法在上面的网页中复制,这里提供一个激活码

    如果下面激活码显示invalid 请自己按上面步骤去复制激活码

    6G5NXCPJZB-eyJsaWNlbnNlSWQiOiI2RzVOWENQSlpCIiwibGljZW5zZWVOYW1lIjoic2lnbnVwIHNjb290ZXIiLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI1LTA4LTAxIiwicGFpZFVwVG8iOiIyMDI1LTA4LTAxIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjUtMDgtMDEiLCJwYWlkVXBUbyI6IjIwMjUtMDgtMDEiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiSUkiLCJmYWxsYmFja0RhdGUiOiIyMDI1LTA4LTAxIiwicGFpZFVwVG8iOiIyMDI1LTA4LTAxIiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQUEMiLCJmYWxsYmFja0RhdGUiOiIyMDI1LTA4LTAxIiwicGFpZFVwVG8iOiIyMDI1LTA4LTAxIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjUtMDgtMDEiLCJwYWlkVXBUbyI6IjIwMjUtMDgtMDEiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNXIiwiZmFsbGJhY2tEYXRlIjoiMjAyNS0wOC0wMSIsInBhaWRVcFRvIjoiMjAyNS0wOC0wMSIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQV1MiLCJmYWxsYmFja0RhdGUiOiIyMDI1LTA4LTAxIiwicGFpZFVwVG8iOiIyMDI1LTA4LTAxIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBQUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjUtMDgtMDEiLCJwYWlkVXBUbyI6IjIwMjUtMDgtMDEiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFJCIiwiZmFsbGJhY2tEYXRlIjoiMjAyNS0wOC0wMSIsInBhaWRVcFRvIjoiMjAyNS0wOC0wMSIsImV4dGVuZGVkIjp0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

    image

    彻底删除IDEA https://www.quanxiaoha.com/idea/uninstall-idea.html

  • 由nodejs升级引起的构建错误:0308010C:digital envelope routines::unsupported

    前言

    最近,发现自己电脑上的nodejs版本居然还是14+,而最新的已经到了18+,由于并没有使用任何版本管理工具,于是直接升级到了最新的版本(v18.14.1),然后悲剧就发生了。
    电脑里以往的绝大部分的Vue和React项目,在执行脚本构建命令如 npm run devnpm run build 时,都出现同样的错误,导致构建失败,并且报类似下面的错误:

    ssl-error.png

    查找原因

    出现了问题,自然要想办法解决。
    在网上搜索了一圈,发现该问题早已出现,一般描述的大致原因就是:当 nodejs 升级到17+版本以后,开始支持 OpenSSL 3.0,而 OpenSSL 3.0 对各种摘要算法做了更严格的限制,可能会导致一些程序运行错误。

    webpack源码与配置

    但其实,并不是所有的项目都会出现,比如使用了最新版本的 webpack 工具的项目就能够正常运行,所以得搞清楚其中的具体原因,到底是哪些地方影响了项目运行。
    而要搞清原因,还得回到错误信息里,仔细查看上图里的错误信息,可以发现:Error 出现在了 webpack 包的 lib/util/createHash.js 代码文件,查看该文件,可知主要是用于创建hash值,这部分的核心代码如下所示:

    js体验AI代码助手代码解读复制代码switch (algorithm) {
      case 'debug':
        return new DebugHash()
      default:
        return new BulkUpdateDecorator(require('crypto').createHash(algorithm))
    }
    

    从上面的代码,我们可以发现:webpackhash 使用了 nodejs 中的 crypto 加密模块,根据传入的算法名称创建 Hash 对象。

    我们直接代码测试,进一步发现当前版本的 webpack,这里的参数 algorithm 算法都是使用的 md4,搜索 webpack 源码还能发现很多地方直接写死了 md4 算法名:

    md4.png

    而查看webpack文档,也有类似的介绍。
    webpack 的源码里,我们还找到了一个配置属性:output.hashFunction,在webpack配置说明文档里也找到该属性的说明:

    hashFunction.png

    如上图所示,该属性定义webpack可使用的散列算法,默认也是 md4

    查看nodejs的crypto模块

    在回到错误源码上,主要是这句代码出错:

    js体验AI代码助手代码解读复制代码require('crypto').createHash(algorithm)
    

    上面的代码里调用了 crypto 模块的 createHash 方法,我们查看该方法的文档,可以发现有这样一段话:

    algorithm 取决于平台上 OpenSSL 版本支持的可用算法。
    例如 'sha256''sha512' 等。
    在最近的 OpenSSL 版本中,openssl list -digest-algorithms 将显示可用的摘要算法。

    可见 webpack 源码里的 algorithm 就表示 OpenSSL 能够支持的可用算法,——在源码注释里也有解释。 而 md4 显然也是其中一种算法,但这里却创建失败了。

    到这里,我们已能发现问题所在:crypto 模块的 createHash 方法在使用 md4 算法创建 Hash 对象时失败,无法创建,因此报错。

    为什么会报错呢?继续寻找答案,我们直接在当前node环境下调用该方法:

    js体验AI代码助手代码解读复制代码require('crypto').createHash('md4')
    

    立马报错:

    node-error.png

    错误信息和项目中的类似,出现不支持 unsupported,这里还出现了 opensslErrorStack 错误栈,初始化失败,网上提到 openssl 3.0 不支持 md4 算法看上去是正确的,但为什么不支持呢?

    查看openssl问题

    我们先了解下这里提到的 openssl 是什么?OpenSSL 是一个强大的安全套接字层密码库的开源项目,它提供了一个功能丰富 openssl 安全工具包,拥有多种加密算法,能处理对称与非对称算法密钥、数字证书编解码等等。

    而上文也提到在 nodejs 的加密模块中,生成hash就借助了 openssl 等能力,其中通过命令 openssl list -digest-algorithms 可以查看当前平台支持哪些算法,在命令行执行后,可以发现有几十种算法,而 md4 也名列其中:

    openssl-md4.png

    那又为什么会创建失败呢,继续查看 openssl 3.0 相关的文档,经过寻找,终于发现问题的细节:

    • OpenSSL 中提供了5个 Provider (它表示算法实现的容器),我们需要了解如下两个:
      • default:默认,提供了所有标准的内置算法,如果没明确指定则将使用默认算法容器;
      • legacy:遗留,已不常用或者被反对使用的算法,正常情况下不可用,除非显式指定使用 legacy 容器;
    • openssl 3.0 正常都是使用 default 容器提供的算法,而 md4 却位于 legacy 算法容器中,所以正常情况下并不支持 md4 算法,因此导致错误。

    legacy 算法容器中,包含 MD2、MD4、MDC2、RMD160、CAST5、BF、IDEA、SEED、RC2、RC4、RC5 和 DES 等算法。

    解决方法

    升级webpack

    从前文可知,目前环境出现的问题,主要是 webpack 的使用了 md4 算法导致错误,可见还得在 webpack 工具上下功夫。

    注意:只改变 webpack 的配置属性 hashFunction 值为其他算法,无法解决该问题,是因为 webpack 中很多地方写死了 md4 字符串。

    如果我们把 webpack 进行升级到较新的版本,就可以解决此类问题。
    据查,自 5.61.0 版本开始,webpack 就已解决了这个问题,可以查看同样创建hash的源码,新修改的如下所示:

    js体验AI代码助手代码解读复制代码switch (algorithm) {
      //...
      case "md4":
        if (createMd4 === undefined) {
          createMd4 = require("./hash/md4");
          if (BatchedHash === undefined) {
            BatchedHash = require("./hash/BatchedHash");
          }
        }
        return new BatchedHash(createMd4());
      // ...
      default:
        if (crypto === undefined) crypto = require("crypto");
        return new BulkUpdateDecorator(
          () => crypto.createHash(algorithm),
          algorithm
        );
    }
    

    以上代码可看出,针对 md4 已经做了专门处理,不再直接使用 crypto 模块创建,而是新建 md4 算法。

    针对使用 @vue/cli-servicereact-scripts 工具构建的项目,由于还是依托 webpack,所以对应工具进行升级即可,其中:

    • @vue/cli-service5.0.1 版本开始,已经支持 webpack@5.61.0
    • react-scripts5.0.0 版本开始,已经支持 webpack@5.61.0

    但是,由于升级构建工具,可能随之带来很多不可知的问题,不少依赖包都会因为不支持而报错,升级带来的成本并不小,所以很多人并不愿意升级构建工具。

    当然,我们也可以自己修改 webpack 源码解决问题,只需要再创建hash对象的地方拦截 md4 换种算法就可以了,但还需要更改另外一个依赖包 terser-webpack-plugin,这个库里也有 md4

    提供legacy容器环境

    根据上文提到的错误原因,可知是由于我们使用了 openssllegacy 算法容器里的算法 md4,并不被标准默认容器支持,所以需要显式地指定算法容器环境。
    指定 legacy 算法容器,使用 --openssl-legacy-provider,网上提供的很多解决方案,都是基于这个原则去做的,只不过都不交代具体的原因。

    增加系统环境变量

    Windows系统下,可在系统环境变量里添加一个新的变量:NODE_OPTIONS,值为:--openssl-legacy-provider
    如下图所示:

    系统变量.png

    需要注意的是,
    通过设置系统变量,我们只能解决 Git Bash 在系统右键启动时的构建命令正确执行,或者直接启动 git-bash.exe 软件,即单独的命令窗口能有效解决问题:

    右键git-bash.png

    而在VSCode中添加的 git-bash 工具,却并不起作用,即在下面的窗口下执行构建命令时仍然会报错:

    vscode-terminal.png

    我并没有找到VSCode设置git-bash时有啥特殊的配置,导致两者之间有差异,如果有人了解,希望可以在评论里告知。

    在package.json中添加设置

    一个能在新版本nodejs中完整解决问题的方案,就是在 package.json 配置的脚本命令中,增加对应的设置,如下所示:

    json体验AI代码助手代码解读复制代码"dev": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
    

    即增加 set NODE_OPTIONS=--openssl-legacy-provider 命令设置,就可以在 Git Bash 的右键命令以及VSCode中都能正常执行构建命令了。

    注意,如果在 package.json 中添加脚本命令设置,会导致使用老版本的同事,无法执行脚本,因为老版本 nodejs 并不支持设置 --openssl-legacy-provider 属性值,将有如下提示并中断构建执行:

    bash体验AI代码助手代码解读复制代码node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
    

    nodejs多版本管理或者版本降级

    另外还有一种方案,就是不要使用最新版本的 nodejs,降级后重新使用V16的版本,低版本的 nodejs 可以保障项目正常运行。
    或者,还可以使用 nodejs 的多版本管理工具,能够自由切换不同的版本,同样满足要求。关于 nodejs 版本管理的简单介绍,可查看博文 node 和 npm 如何进行版本升级

    但是,已经使用了新版本的nodejs,再去用老版本的,也多少有些不那么回事。

    最后

    本文详细描述了 nodejs 升级后引起的前端老旧项目中构建工具生成hash报错的问题(0308010C:digital envelope routines::unsupported),以及给出的几种解决方案。
    这几种解决方案各自都存在一些不完美的地方,但都能解决当前构建错误,可以根据自己的实际需求来确定使用哪种方案。

    作者:jimojianghu
    链接:https://juejin.cn/post/7202639428132044858
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 精选 5 款 .NET 开源、功能强大的工作流系统,告别重复造轮子!

    思维导航

    前言

    最近有不少小伙伴在DotNetGuide技术社区微信交流群里问:.NET 有哪些好用的工作流系统或者引擎推荐的?今天大姚给大家推荐 5 款 .NET 开源、功能强大的工作流系统,告别重复造轮子!

    OpenAuth.Net

    OpenAuth.Net 是一个基于 .NET 开源免费(Apache-2.0 License)的权限管理及快速开发框架,.NET 开源最好用的权限工作流系统。它源于 Martin Fowler 的企业级应用开发思想,并结合了最新的技术组合,如 SqlSugar、EF、Quartz、AutoFac、WebAPI、Swagger、Mock、NUnit、Vue2/3、Element-ui/plus、IdentityServer 等。该项目架构易于扩展,文档齐全且免费,特别适合中小企业使用。

    image
    image
    image

    CCFlow

    CCFlow 是一款基于 .NET 开源(GPL-3.0开源协议)、配置灵活、功能强大,适合中国国情的工作流引擎,集成方式简洁,容易实现插件模式的开发。

    image
    image
    image

    AntFlow.NET

    AntFlow.NET 是一款基于 .NET + Vue + FreeSql + Natasha 编写的仿钉钉的开源(Apache-2.0)低代码工作流引擎,支持多种数据库,让工作流开发像普通 CURD 一样简单,即使没有流程开发经验的程序员也能快速开发流程,效率提升利器。

    image
    image
    image

    elsa-core

    elsa-core是一个.NET开源、免费(MIT License)、功能强大且灵活的工作流引擎和设计器,适用于构建各种类型的工作流应用。提供了一组功能强大且灵活的工具和组件,用于定义、运行和监控工作流。它支持多种工作流模型、活动节点、并行执行、条件分支、定时触发等特性,使得开发人员能够根据业务需要构建复杂的工作流程。

    image
    image
    image

    Platform

    Platform 是一套基于 .NET + Ant Design Vue 开源(MIT License)、免费的低代码、权限、工作流、动态接口平台。

    image
    image
    image

    优秀项目和框架精选

    本文所有项目都已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。假如你有更好的推荐,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

  • 通过Certbot自动申请更新HTTPS网站的SSL证书

    现在很多云服务运营商免费的HTTPS证书有效期只有3个月,对于个人网站来说,这就很麻烦,现在可以用 Certbot + Crontab 自动申请并定期更新 HTTPS 网站的 SSL 证书,来解决我们这个痛点。

    需要云服务器可以看这里:云服务器优惠合集。

    1. 安装 Certbot

    不同系统安装方式略有不同,这里给你 CentOS / RHEL 和 Debian / Ubuntu 的常用方法。

    CentOS / RHEL 7/8/9

    # 安装 EPEL
    sudo yum install epel-release -y
    
    # 安装 Certbot 和 Nginx 插件(如果用 Apache 就换成 python3-certbot-apache)
    sudo yum install certbot python3-certbot-nginx -y

    Debian / Ubuntu

    sudo apt update
    sudo apt install certbot python3-certbot-nginx -y

    2. 申请 SSL 证书

    如果你用 Nginx

    sudo certbot --nginx -d example.com -d www.example.com
    • -d 参数后面写你的域名(可以多个)
    • Certbot 会自动修改 Nginx 配置并申请证书
    • 申请过程中会让你选择是否重定向 HTTP → HTTPS

    注意:这里需要你的nginx的conf文件里面的sercername指定对应的域名,如果你配置的是下划线 ““,会导致该命令运行失败,报下面的错误。

    Could not automatically find a matching server block for zhangfeidezhu.com. Set the `server_name` directive to use the Nginx installer.

    如果你用 Apache

    sudo certbot --apache -d example.com -d www.example.com

    3. 测试证书是否生效

    申请完成后,可以在浏览器访问你的域名,查看是否已经是有效的 Let’s Encrypt 证书。

    4. 自动更新证书

    Let’s Encrypt 证书有效期是 90 天,所以要自动续签。

    Certbot 自带定时任务(通常是 /etc/cron.d/certbot 或 systemd 定时器),也可以手动添加 crontab:

    sudo crontab -e

    加入:

    0 3 1 */3 * certbot renew --quiet --post-hook "nginx -s reload"

    解释:

    • 0 3 1 */3 * → 每隔 3 个月的1号3点执行一次
    • --quiet → 静默模式
    • --post-hook "nginx -s reload" → 续签后自动重载 Nginx

    5. 检查自动续签是否正常

    手动测试续签:

    sudo certbot renew --dry-run

    如果提示 Congratulations, all renewals succeeded,说明没问题。

    ✅ 这样配置后,你的网站 HTTPS 证书会在到期前自动续签,Nginx 会自动加载新证书,几乎可以做到“一劳永逸”。