捐血一袋救人一命

江蘇拙政園

江蘇 拙政園

全家福

日本 和歌山城

賞楓之旅

千燈 夕照

水鄉千燈

蘆洲 微風運河

破曉時分

2024年6月28日 星期五

Windows 沙箱環境設定檔

沙箱環境設定檔 Sample

將XML 內容存成副檔名為 ,wsb 設定檔,點擊設定檔,就可以按照設定開啟沙箱

<!-- 副檔名 .wsb -->
<Configuration>
<!-- 設定是否使用獨立顯卡晶片 -->
<VGpu>Default</VGpu>
<Networking>Default</Networking>
<!-- 將本機網路對應到沙箱 -->
<MappedFolders>
	<MappedFolder>
		<!-- 本機路徑 ->>
		<HostFolder>D:\Downloads\Portable Apps</HostFolder>
		<!-- 是否設定唯讀 -->
		<ReadOnly>true</ReadOnly>
	</MappedFolder>
</MappedFolders>
<!-- 啟動沙箱時,要執行的程式 -->
<LogonCommand>	
	<Command>explorer.exe C:\Users\WDAGUtilityAccount\Desktop\Portable Apps\4K Video Downloader Portable v4.12.5.3670</Command>
	<Command>explorer.exe C:\Users\WDAGUtilityAccount\Desktop\Portable Apps\Musify\Musify.exe</Command>
</LogonCommand>
</Configuration>

Windows電腦認證管理員

Windows認證管理員

控制台 > 使用者帳戶 > 認證管理員

不知何時,Windows Update 之後,原先儲存的遠端桌面密碼都沒用了,每次登入都要手動輸入密碼,真的很煩!
使用 cmdkey 指令去查詢,會發現原先儲存的密碼類型,都變成網域密碼,微軟真的很雞婆

讀取目前所有遠端桌面(Terminal Service)的認證清單,並全部移除

$(cmdkey /list:TERMSRV/*) | Where-Object { $_ -match "目標: " } | ForEach-Object {
    $target = $_
    $target = $target -replace "目標: ","" -replace " ",""
    (cmdkey /delete:$target)
}

重新用一般標準方式儲存,類型會是標準

cmdkey /generic:TERMSRV/[IP] /user:[ACCOUNT] /pass:"[PASSWORD]"

讀取目前遠端桌面所有認證資訊

$Patten = "目標: |類型: |使用者: "
$List = @()
$Info = $(cmdkey /list:TERMSRV/*) | Select-String -Pattern $Patten 
For ($i=0; $i -le $Info.Count; $i+=3){
    $List += New-Object -TypeName PSOBject -Property @{
        "Target" = $Info[$i] -replace "\s+目標:\s+",""
        "Type" = $Info[$i+1] -replace "\s+類型:\s+",""
        "User" = $Info[$i+2] -replace "\s+使用者:\s+",""
    }
}
$Domain = $List | Where-Object { $_.Type -eq "網域密碼" }
If ($Domain.Count -eq 0){
    $List | Sort-Object -Property Target
}Else{
    ForEach($Key in $Domain){
        (cmdkey /delete:$Key.Target)
    }
}

2024年6月26日 星期三

HTTP Status Code

HTTP Status Code

狀態碼 說明 類別
100 Continue 請求者應繼續進行請求
101 Switching Protocols 服務器根據請求切換協議
102 Processing (WebDAV) 服務器已經收到並正在處理請求,但無響應可用
200 OK 請求成功
201 Created 請求成功並且資源已被創建
202 Accepted 請求已接受,但尚未處理完成
203 Non-Authoritative Information 請求成功,但返回的元數據可能來自第三方源
204 No Content 請求成功但無內容返回
205 Reset Content 請求成功,要求重置文檔視圖
206 Partial Content 服務器成功處理了部分 GET 請求
207 Multi-Status (WebDAV) 返回多個資源的狀態
208 Already Reported (WebDAV) DAV 之前已經枚舉的成員,不需要再次列出
226 IM Used 伺服器完成了對資源的 IM(instance-manipulations)請求
300 Multiple Choices 請求的資源有多個表示
301 Moved Permanently 永久重定向:HTTP 301 狀態碼表示資源已永久移動到新的 URL,未來的請求應該使用新的 URL
緩存行為:瀏覽器和搜索引擎會更新資源的 URL 並緩存這個重定向,未來的請求將自動使用新 URL
SEO:對於搜索引擎優化(SEO),301 重定向將權重轉移到新的 URL 上,這有助於保持網站的排名
302 Found 臨時重定向:HTTP 302 狀態碼表示資源臨時移動到新的 URL,未來的請求應該仍使用原始 URL。
緩存行為:瀏覽器和搜索引擎通常不會緩存這個重定向,未來的請求仍然會訪問原始 URL。
SEO:對於 SEO,302 重定向不會將權重轉移到新的 URL 上,因為它被認為是臨時的。
303 See Other 請求的資源可在其他 URI 上找到,應使用 GET 方法獲取
304 Not Modified 資源未修改,可以使用緩存版本
305 Use Proxy 請求應通過代理訪問資源
307 Temporary Redirect 暫時重定向:HTTP 307 表示這個重定向是臨時的。未來請求仍然應該使用原始 URL。
保持方法和正文:與 302 Found 狀態碼不同,307 明確要求客戶端在重定向時保持原始的 HTTP 方法和請求正文。例如,如果原始請求是 POST,重定向後仍然是 POST
308 Permanent Redirect 永久重定向:HTTP 308 表示這個重定向是永久的。未來的請求應該使用新的 URL。
保持方法和正文:308 與 301 Moved Permanently 類似,但明確要求客戶端在重定向時保持原始的 HTTP 方法和請求正文。例如,如果原始請求是 POST,重定向後仍然是 POST。
400 Bad Request 服務器無法理解請求
401 Unauthorized 未經身份驗證
402 Payment Required 保留將來使用
403 Forbidden 服務器拒絕請求
404 Not Found 資源未找到
405 Method Not Allowed 請求方法不被允許
406 Not Acceptable 請求的資源的內容特性無法滿足請求頭中的條件
407 Proxy Authentication Required 需要代理身份驗證
408 Request Timeout 請求超時
409 Conflict 請求與資源的當前狀態發生衝突
410 Gone 資源已被永久刪除
411 Length Required 需要有效的內容長度標頭
412 Precondition Failed 先決條件失敗
413 Payload Too Large 請求負載過大
414 URI Too Long 請求 URI 過長
415 Unsupported Media Type 不支持的媒體類型
416 Range Not Satisfiable 請求範圍不符合可用範圍
417 Expectation Failed 服務器未能滿足請求頭的期望值
418 I’m a teapot HTCPCP/1.0 錯誤代碼
421 Misdirected Request 請求導向錯誤
422 Unprocessable Entity (WebDAV) 語義錯誤,無法響應
423 Locked (WebDAV) 資源被鎖定
424 Failed Dependency (WebDAV) 由於之前的請求失敗,當前請求失敗
425 Too Early 服務器拒絕處理可能被重放的請求
426 Upgrade Required 需要切換協議
428 Precondition Required 要求請求附帶前置條件
429 Too Many Requests 請求過多
431 Request Header Fields Too Large 請求頭字段過大
451 Unavailable For Legal Reasons 因法律原因不可用
500 Internal Server Error 服務器內部錯誤
501 Not Implemented 服務器不支持實現請求的方法
502 Bad Gateway 無效的響應
503 Service Unavailable 服務器不可用
504 Gateway Timeout 網關超時
505 HTTP Version Not Supported 不支持的 HTTP 版本
506 Variant Also Negotiates 內部配置錯誤
507 Insufficient Storage (WebDAV) 存儲空間不足
508 Loop Detected (WebDAV) 檢測到循環
510 Not Extended 需要進行擴展
511 Network Authentication Required 需要網絡身份驗證

狀態碼 說明 重定向類型 緩存行為 請求方法 使用場景
301 Moved Permanently 永久重定向 瀏覽器和搜索引擎會更新 URL 並緩存重定向 可能改變方法為 GET(取決於瀏覽器) 當資源永久移動到新位置,應用於 SEO 轉移權重的情況,例如網站遷移或永久更改資源 URL。
302 Found 臨時重定向 瀏覽器和搜索引擎通常不會緩存重定向 可能改變方法為 GET(取決於瀏覽器) 當資源臨時移動到新位置或需要臨時重定向,用於短期的資源變更或 A/B 測試。
307 Temporary Redirect 臨時重定向 瀏覽器和搜索引擎通常不會緩存重定向 保持原請求方法 當需要臨時重定向且必須保持請求方法(例如 POST),用於臨時服務器變更,或維護期間。
308 Permanent Redirect 永久重定向 瀏覽器和搜索引擎會更新 URL 並緩存重定向 保持原請求方法 當資源永久移動到新位置且必須保持請求方法,適用於 API 的永久變更,避免方法變更影響。

總結:

  • 使用 301 或是 308 永久重定向,主要是讓搜尋引擎SEO更新資料、瀏覽器緩存;但是要注意 301 會造成 Request Method 變動
  • 使用 302 或是 307,則是臨時性的變動,例如伺服器維護期間,暫時重新導向,或是負載平衡。瀏覽器不會緩存,也不影響搜尋引擎的 SEO;但是要注意 302 也會造成 Request Method 變動

2024年6月25日 星期二

Reset Synology Gitlab Root Password

重設 Synology Gitlab root 管理者密碼

從 群暉 Synology NAS 套件中心安裝的 Gitlab,與 Gitlab 官方文件不太一樣

  • Rake是一個工具程式,藉由讀取叫做Rakefile的檔案來執行任務腳本,而這些任務腳本就是所謂的task。
    bundle exec rake -T 可以查看 Task List

使用 rake

gitlab-rake 改成 rake,而且必須透過 bundle exe 來執行

docker exec -it synology_gitlab bash
bundle exec /home/git/gitlab/bin/rake "gitlab:password:reset"
(in /home/git/gitlab)
Enter username: 請輸入使用者帳號
Enter password:
Confirm password:
Password successfully updated for user with username 使用者帳號.

使用 rails

gitlab-rails 改名為 rails
rails console -e production = rails console
enter image description here

docker exec -it synology_gitlab bash
/home/git/gitlab/bin/rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux-gnu]
 GitLab:       13.12.2 (d98457affdf) FOSS
 GitLab Shell: 13.18.0
 PostgreSQL:   12.3
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.3.6)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>
irb(main):002:0> user = User.find_by_username 'root'
=> #<User id:1 @root>
irb(main):003:0> user = User.find(1)
=> #<User id:1 @root>
irb(main):004:0> new_password = 'MyNewP@ssw0rd'
irb(main):005:0> user.password = new_password
irb(main):006:0> user.password_confirmation = new_password
irb(main):007:0> user.password_automatically_set = false
irb(main):008:0> user.save!
irb(main):009:0> exit
docker exec -it synology_gitlab bin/rails console -e production

補充:查看所有使用者列表

users = User.all
users.each do |user|
  puts "ID: #{user.id}, Username: #{user.username}, Email: #{user.email}, Admin: #{user.admin?}"
end

補充:查看所有管理者列表

admins = User.where(admin: true)
admins.each do |admin|
  puts "ID: #{admin.id}, Username: #{admin.username}, Email: #{admin.email}, Admin: #{user.admin?}"
end

補充:查詢使用者

# 替換為實際的用戶 ID
user = User.find_by(id: 1)  
if user
	puts "ID: #{user.id}, Username: #{user.username}, Email: #{user.email}, Admin: #{user.admin?}"
else 
	puts "User not found"
end