| package msalogin |
|
|
| import ( |
| "fmt" |
| "log" |
| "os" |
| "path/filepath" |
| "strings" |
| "time" |
| ) |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| const proofsDumpDir = "logs/proofs_debug" |
|
|
| |
| |
| |
| func dumpProofsDebug(c *Client, reason, currentURL, html string) string { |
| if html == "" { |
| return "" |
| } |
| if err := os.MkdirAll(proofsDumpDir, 0o755); err != nil { |
| log.Printf("[proofs-debug] mkdir %s: %v", proofsDumpDir, err) |
| return "" |
| } |
|
|
| stamp := time.Now().UTC().Format("20060102T150405Z") |
| email := "unknown" |
| if c != nil && c.main.Email != "" { |
| email = sanitizeForFilename(c.main.Email) |
| } |
| name := fmt.Sprintf("%s_%s_%s.html", stamp, email, reason) |
| full := filepath.Join(proofsDumpDir, name) |
|
|
| header := fmt.Sprintf("<!--\n account: %s\n current_url: %s\n reason: %s\n dumped_at: %s\n-->\n", |
| email, currentURL, reason, stamp) |
| if err := os.WriteFile(full, []byte(header+html), 0o644); err != nil { |
| log.Printf("[proofs-debug] write %s: %v", full, err) |
| return "" |
| } |
| log.Printf("[proofs-debug] wrote %s (%d bytes, url=%s)", full, len(html), truncate(currentURL, 100)) |
| return full |
| } |
|
|
| |
| |
| func sanitizeForFilename(s string) string { |
| repl := strings.NewReplacer( |
| "@", "_", |
| ":", "_", |
| "/", "_", |
| "\\", "_", |
| "?", "_", |
| "*", "_", |
| `"`, "_", |
| "<", "_", |
| ">", "_", |
| "|", "_", |
| ) |
| return repl.Replace(s) |
| } |
|
|