🗃 Artalk 评论系统后端程序

Overview

Artalk

ArtalkGo

ArtalkGo: the Artalk golang version.

  • 跨平台
  • 轻松部署
  • 可视化图形界面
  • 命令行管理
  • 多站点支持
  • 评论获取分页
  • 邮件异步队列发送
  • 邮件多模板自定义
  • 用户鉴权机制
  • 全局验证码操作限制
  • 规范化 API

支持

  • 跨平台:支持 Linux, Win, Darwin
  • 数据存储:支持 SQLite, MySQL, PostgreSQL, SQL Server...
  • 高效缓存:支持 Redis, Memory...
  • 邮件发送:支持 SMTP, 阿里云邮件, 系统调用 sendmail 等发送邮件
Comments
  • [Bug Report] Telegram 评论通知

    [Bug Report] Telegram 评论通知

    模板排版

    默认的 Telegram 通知模板中(见上图),「来自 xxxx 的回复」这一行与评论内容之间并没有空行。

    image

    建议:除了邮件提供自定义模板外,Telegram、钉钉等也提供用户自定义通知模板设置,方便用户自己修改。

    重复通知

    设置了邮件通知和 Telegram 通知后,收到评论会同时通过邮件和 Telegram 进行通知。

    建议:提供一个管理员收取通知的渠道配置,例如:

    notify:
      # 管理员收取通知的方式
      admin:
        - email
        - telegram
        - dingtalk
    
    notify:
      # 管理员收取通知的方式
      admin:
        - telegram
        - dingtalk
    
    enhancement 
    opened by leirock 27
  • [Bug Report] 开启评论审核后无法发送回复通知

    [Bug Report] 开启评论审核后无法发送回复通知

    开启所有评论都需要审核后

    moderator:
      pending_default: true 
    

    存在以下问题:

    • 管理员审核通过后,回复该评论无法自动通过审核,也需要手动通过审核
    • 回复该评论后,即使手动通过审核,也无法给原评论用户发送回复通知邮件(取消评论审核后,回复评论的通知可以正常发出)

    希望是这样的逻辑:

    • 管理员审核通过后,回复该评论应该自动通过审核,并同时发出回复通知邮件
    • A 用户评论(管理员通过审核),B 用户给 A 用户该条评论回复,管理员对 B 用户的回复审核通过后,给 A 用户发出评论通知
    bug 
    opened by leirock 17
  • Redis 缓存相关导致报错

    Redis 缓存相关导致报错

    突然间,无法登录了,相关日志:

    Artalk (2.1.4/2ad6864)
    
     -> A Selfhosted Comment System.
     -> https://artalk.js.org
    
    -------------------------------
    
    ⇨ http server started on [::]:23366
    echo: http: panic serving 127.0.0.1:38796: interface conversion: interface {} is string, not []uint8
    goroutine 52 [running]:
    net/http.(*conn).serve.func1(0xc00026cd20)
    	/usr/local/go/src/net/http/server.go:1804 +0x153
    panic(0x14d4a00, 0xc0007f6b70)
    	/usr/local/go/src/runtime/panic.go:971 +0x499
    github.com/ArtalkJS/ArtalkGo/http.getActionLastTime(0x1927aa8, 0xc00024abe0, 0x157f5a0, 0xc0008f0cc0, 0x16a72c7)
    	/go/src/github.com/ArtalkJS/ArtalkGo/http/permission.go:163 +0x189
    github.com/ArtalkJS/ArtalkGo/http.IsActionInTimeFrame(0x1927aa8, 0xc00024abe0, 0xc000896600)
    	/go/src/github.com/ArtalkJS/ArtalkGo/http/permission.go:150 +0x39
    github.com/ArtalkJS/ArtalkGo/http.IsReqNeedCaptchaCheck(0x1927aa8, 0xc00024abe0, 0xd)
    	/go/src/github.com/ArtalkJS/ArtalkGo/http/permission.go:127 +0x105
    github.com/ArtalkJS/ArtalkGo/http.ActionLimitMiddleware.func1.1(0x1927aa8, 0xc00024abe0, 0xc0000e0000, 0x0)
    	/go/src/github.com/ArtalkJS/ArtalkGo/http/permission.go:59 +0x1f7
    github.com/onrik/logrus/echo.Middleware.func1.1(0x1927aa8, 0xc00024abe0, 0x16b7df2, 0x1b)
    	/go/pkg/mod/github.com/onrik/[email protected]/echo/middleware.go:62 +0x16e
    github.com/labstack/echo/v4/middleware.CORSWithConfig.func1.1(0x1927aa8, 0xc00024abe0, 0x3, 0x4)
    	/go/pkg/mod/github.com/labstack/echo/[email protected]/middleware/cors.go:186 +0x1016
    github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc000662480, 0x1904a28, 0xc00087f180, 0xc00084ec00)
    	/go/pkg/mod/github.com/labstack/echo/[email protected]/echo.go:654 +0x2bc
    net/http.serverHandler.ServeHTTP(0xc000182e00, 0x1904a28, 0xc00087f180, 0xc00084ec00)
    	/usr/local/go/src/net/http/server.go:2867 +0xa3
    net/http.(*conn).serve(0xc00026cd20, 0x1909fd0, 0xc000755280)
    	/usr/local/go/src/net/http/server.go:1932 +0x8cd
    created by net/http.(*Server).Serve
    	/usr/local/go/src/net/http/server.go:2993 +0x39b
    
    bug 
    opened by inkss 11
  • MariaDB数据库错误

    MariaDB数据库错误

    使用 MariaDB 10.5.12数据库,连接方式使用mysql。 启动后数据库只创建了sites表,报如下错误 ERROR CREATE TABLE pages (id bigint unsigned AUTO_INCREMENT,created_at datetime(3) NULL,updated_at datetime(3) NULL,deleted_at datetime(3) NULL,key varchar(191),title longtext,admin_only boolean,site_name varchar(191),vote_up bigint,vote_down bigint,PRIMARY KEY (id),INDEX idx_pages_deleted_at (deleted_at),INDEX idx_pages_key (key),INDEX idx_pages_site_name (site_name),CONSTRAINT fk_pages_site FOREIGN KEY (site_name) REFERENCES sites(name)) [505.1µs] error=Error 1005: Can't create table artalk.pages (errno: 150 "Foreign key constraint is incorrectly formed") ERROR SELECT * FROM users WHERE (LOWER(name) = LOWER('admin') AND LOWER(email) = LOWER('[email protected]')) AND users.deleted_at IS NULL ORDER BY users.id LIMIT 1 [537.9µs] error=Error 1146: Table 'artalk.users' doesn't exist ERROR INSERT INTO users (created_at,updated_at,deleted_at,name,email,link,password,badge_name,badge_color,last_ip,last_ua,is_admin,is_in_conf) VALUES ('2022-02-08 04:26:29.312','2022-02-08 04:26:29.312',NULL,'admin','[email protected]','','','管理员','#FF6C00','','',true,true) [518.5µs] error=Error 1146: Table 'artalk.users' doesn't exist ERROR SELECT * FROM users WHERE is_in_conf = 1 AND users.deleted_at IS NULL [0s] error=Error 1146: Table 'artalk.users' doesn't exist

    opened by imycard 6
  • 非管理员用户侧边栏提示错误:Referer 不被允许

    非管理员用户侧边栏提示错误:Referer 不被允许

    感谢作者提供如此优秀的开源项目🙏🙏🙏

    在使用中遇到了这个问题,不太懂相关代码,希望好心人能帮忙解答下🙏

    具体错误如下: image

    ​ hello artalk-sidebar
    index.f7f00175.js:1 hello artalk-sidebar
    index.f7f00175.js:1 非法请求:Referer 不被允许
    onError @ index.f7f00175.js:1
    (anonymous) @ index.f7f00175.js:1
    a @ index.f7f00175.js:1
    index.f7f00175.js:1 Uncaught (in promise) Object
    a @ index.f7f00175.js:1
    
    good first issue 
    opened by Bakumon 5
  • Windows系统下时区异常

    Windows系统下时区异常

    问题

    我在一台新装的Windows Server 2019上部署,无论将timezone设为何值结果均等效于UTC+0image 在debug模式可以看到这里insert了一个19:28:58进去,但我是在第二天的3:28启动的。 实际上,在添加评论的时候,在前端显示的结果也会是8小时前

    可能的原因

    由于我不太了解Golang,所以去查了一下原因,找到了语言下的一个issue https://github.com/golang/go/issues/38453

    https://github.com/ArtalkJS/ArtalkGo/blob/ed547206e605412759d82485d5477b4865596924/config/init.go#L67 应该是这里出的问题。

    同时根据上面issue提供的线索,我用procmon探了一下zoneinfo.zip的读取,是在运行盘符:\usr\local\go\lib\time\zoneinfo.zip上。我拷了一份过去,目前工作正常,不过这个问题确实影响在win上的直接部署。

    bug 
    opened by Kengxxiao 4
  • 关于连接 MariaDB 和 MySQL 数据库的问题

    关于连接 MariaDB 和 MySQL 数据库的问题

    由于创建数据表直接使用了 Golang 的 ORM 框架 Gorm,之前开发也没有测试到有这些问题

    目前 ArtalkGo 使用 MariaDB 和 MySQL 数据库需要“曲线救国”的方式....

    1. 才疏学浅,某些表里面使用了 MySQL 的保留关键字(例如:key, name)作为字段名,所以会有问题(而 SQLite 没问题)
    2. Golang 的 ORM 框架 Gorm 自动创建数据功能,似乎生成的 SQL 语句不太兼容一些种类的数据库

    之后有时间会修改,但修改数据表结构,版本更新老版本与新版,对老用户来说,数据迁移又是一个麻烦事 🥲🥲🥲

    Originally posted by @qwqcode in https://github.com/ArtalkJS/ArtalkGo/issues/14#issuecomment-1042642968

    bug 
    opened by qwqcode 4
  • 导入评论时必须指定目标站点 URL的问题

    导入评论时必须指定目标站点 URL的问题

    哈喽 非常感谢作者开源
    在导入valine历史评论的过程中发现一个问题: 导入评论时必须指定 目标站点 URL 如 https://xxx.com
    这样会让导入的那些评论的 page_key 字段自动拼接目标站点 URL
    而如果前端 实例化时pageKey 为相对路径时,就没法正确的展示评论,必须手动去数据库将历史评论的 目标站点 URL 前缀去除。

    opened by AlliotTech 2
  • 关于连接 PostgreSQL 问题

    关于连接 PostgreSQL 问题

    image

    由于 model 定义了很多 boolean 类型的字段,使用 gorm 进行查询 where 方法查询很多地方直接传递了字符串 xxx = 1,在 MySQL 数据库和 SQLite 下 gorm 拼接的语句能正常工作。

    参考:https://github.com/ArtalkJS/ArtalkGo/commit/f420fb5cfd420a5c0dd7eb99bc7b5898e7749050

    然而,由于 pgsql 字段类型丰富,自带 boolean 字段类型;而 MySQL 本身无,故 gorm 创建字段类型 tinyint 来替代。导致了 pgsql 数据库和 MySQL 查询语句的差异性。

    解决办法:将所有 boolean 字段类型改成 int,消除 gorm 创建 table 在不同数据库间的类型差异性。

    另外还有很多问题,MySQL 和 SQLite 外键约束功能正常,而 PgSQL 测试不正常。

    参考:https://github.com/go-gorm/gorm/issues/3624

    适配难度较大,需要一定的时间和精力,暂时搁置。

    目前仅测试兼容 MySQL 和 SQLite 两种数据库。

    bug 
    opened by qwqcode 2
  • help: error startup when connect mysql AutoMigrate with error=

    help: error startup when connect mysql AutoMigrate with error="Error 1170: BLOB/TEXT column 'name' used in key specification without a key length"

    log

    ERRO[0000] CREATE TABLE `sites` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` longtext,`urls` longtext,`users` longtext,PRIMARY KEY (`id`),INDEX idx_sites_deleted_at (`deleted_at`),UNIQUE INDEX idx_sites_name (`name`)) [7.659879ms]  error="Error 1170: BLOB/TEXT column 'name' used in key specification without a key length"
    ERRO[0000] SELECT * FROM `sites` WHERE name = '唔该博客' AND `sites`.`deleted_at` IS NULL ORDER BY `sites`.`id` LIMIT 1 [2.043661ms]  error="Error 1146: Table 'artalk.sites' doesn't exist"
    ERRO[0000] INSERT INTO `sites` (`created_at`,`updated_at`,`deleted_at`,`name`,`urls`,`users`) VALUES ('2021-11-30 18:29:16.34','2021-11-30 18:29:16.34',NULL,'唔该博客','','') [4.668251ms]  error="Error 1146: Table 'artalk.sites' doesn't exist"
    ERRO[0000] Create Site error: Error 1146: Table 'artalk.sites' doesn't exist 
    

    conf.yml

    db:
      type: "mysql" # 支持 mysql, sqlite, pgsql, sqlserver
      dsn: "root:[email protected](192.168.1.100:3306)/artalk?charset=utf8mb4&parseTime=True&loc=Local"
    

    docker image

    artalk/artalk-go:2.0.5
    

    mysql version

    5.7.32
    
    opened by dyrnq 2
  • fix(config): replace viper with koanf to make map case sensitivity

    fix(config): replace viper with koanf to make map case sensitivity

    Viper 是一个 Golang 的配置文件读取工具,它能够帮助读取 yaml、json 等格式的配置文件到一个 go struct

    但 Viper 读取配置文件的配置项目 keys 的策略是将每个 key 转为全小写的形式,它是 case insensitive 的:

    https://github.com/spf13/viper#does-viper-support-case-sensitive-keys

    虽然这样设计存在它的合理性。

    但是,由于 frontend 配置中每一项的 key 有保留原本大小写的需要,因为前端配置的 keys 是驼峰命名法 (Camel-Case),所以不得不将配置文件的 keys 原封不动地读取出来提供给前端

    Viper 对于 keys 大小写不敏感,故弃用转而使用 koanf

    关联

    • https://github.com/spf13/viper/pull/635
    • https://github.com/spf13/viper/issues/1014
    • https://github.com/spf13/viper/issues/373

    对于大小写敏感性这个问题 2016 年就存在,直到现在 2022 年底 viper 依然未解决 😅😅😅😅😅😅

    size/L 
    opened by qwqcode 1
Releases(v2.3.0)
Owner
Artalk
A Fast, Slight & Delightful Comment System.
Artalk