{"id":37107548,"url":"https://github.com/alabuta-source/toolkit","last_synced_at":"2026-01-14T12:55:28.234Z","repository":{"id":176689074,"uuid":"655387688","full_name":"alabuta-source/toolkit","owner":"alabuta-source","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-23T19:39:11.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-11-23T20:26:26.366Z","etag":null,"topics":["library","toolkit"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alabuta-source.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-18T18:33:30.000Z","updated_at":"2024-11-23T19:38:49.000Z","dependencies_parsed_at":"2024-09-09T20:19:01.996Z","dependency_job_id":"92a579d9-dd9c-475c-a6f8-86fcd128f7e5","html_url":"https://github.com/alabuta-source/toolkit","commit_stats":null,"previous_names":["alabuta-source/toolkit"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/alabuta-source/toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alabuta-source%2Ftoolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alabuta-source%2Ftoolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alabuta-source%2Ftoolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alabuta-source%2Ftoolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alabuta-source","download_url":"https://codeload.github.com/alabuta-source/toolkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alabuta-source%2Ftoolkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28420814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["library","toolkit"],"created_at":"2026-01-14T12:55:27.605Z","updated_at":"2026-01-14T12:55:28.228Z","avatar_url":"https://github.com/alabuta-source.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# toolkit\n\n### install\n```bash\ngo get -u github.com/alabuta-source/toolkit@latest\n```\n### Using token maker to generate token\n```go\npackage main\nimport \"github.com/alabuta-source/toolkit\"\n\nfunc GenerateToken(tokenID string, username string, expirationTime time.Time) (string, error) {\n\tsymmetricKey := \"12345678912345678912345678912345\"\n\ttokenMaker := toolkit.NewTokenMaker(symmetricKey)\n\t\n    token, err := tokenMaker.CreateToken(tokenID, username, expirationTime)\n    if err != nil {\n        return \"\", err\n    }\n    return token, nil\n}\n\n```\n\n### Using token maker to validate token\n```go  \npackage main\nimport \"github.com/alabuta-source/toolkit\"\n\nfunc ValidateToken(token string) (*toolkit.TokenPayload, error) {\n    symmetricKey := \"12345678912345678912345678912345\"\n    tokenMaker := toolkit.NewTokenMaker(symmetricKey)\n    \n    payload, err := tokenMaker.ValidateToken(token)\n    if err != nil {\n        return nil, err\n    }\n    return payload, nil\n}\n```\n\n### Using Email sender\n```go\npackage main\nimport \"github.com/alabuta-source/toolkit\"\n\nfunc SendEmail(to string, subject string, body string) error {\n    config := \u0026toolkit.EmailSenderConfig{\n        Password:     \"test123\",\n        From:         \"some@test.com\",\n        ServerConfig: \"smtp.gmail.com\",\n        Port:         123,\n    }\n\t\n    emailSender := toolkit.NewEmailSender(config)\n    return emailSender.SendEmail(to, subject, body)\n}\n```\n\n### Using Email sender with template\n```go  \npackage main\nimport \"github.com/alabuta-source/toolkit\"\n\nfunc SendWellComeEmailWithTemplate(to string, subject string, templatePath string, username string, url string) error {\n    config := \u0026toolkit.EmailSenderConfig{\n        Password:     \"test123\",\n        From:         \"some@test.com\",\n        ServerConfig: \"smtp.gmail.com\",\n        Port:         123,\n    }\n\t\n    body := \u0026toolkit.EmailTemplateBody{\n        Name: username,\n        URL:  url,\n    }\n    \n    emailSender := toolkit.NewEmailSender(config)\n    return emailSender.SendEmailWithSimpleTemplate(to, subject, templatePath, body)\n}\n```\n\n### ### Upload file using GCP Waitress\n```go\npackage main\nimport (\n\t\"encoding/json\"\n\t\"github.com/alabuta-source/toolkit\"\n\t\"github.com/gin-gonic/gin\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n)\n\n//init a GCP waitress manager\nfunc gcpKey(request *http.Request, bucket string) (toolkit.GCPWaitressManager, error) {\n    key := new(toolkit.GCPBucketAuthJson)\n    bytes, err := os.ReadFile(\"key.json\")\n    if err != nil {\n        return nil, err\n    }\n    _ = json.Unmarshal(bytes, key)\n    return toolkit.NewGCPWaitress(bucket, request, key)\n}\n\n//upload example, you can send any png or jpeg file\nfunc upload(c *gin.Context) {\n    prefix := c.Query(\"prefix\")\n    file, header, err := c.Request.FormFile(\"file\")\n    if err != nil {\n        //handle error\n        return\n    }\n\n    waitress, er := gcpKey(c.Request, \"bucket name\")\n    if er != nil {\n        //handle error\n        return\n    }\n\n    // this method will return the object url\n    // example: https://storage.googleapis.com/your-bucket/prefix/file.png\n    url, wErr := waitress.UploadFile(file, header, prefix)\n    if wErr != nil {\n        //handle error\n        return\n    }\n    c.JSON(http.StatusCreated, url)\n}\n\n// List all bucket files example.\n// Just send the prefix to get all files\n// example: users, and you'll get all users images\nfunc listAll(c *gin.Context) {\n    prefix := c.Query(\"prefix\")\n    waitress, er := gcpKey(c.Request, \"bucket name\")\n    if er != nil {\n        //handle error \n        return\n    }\n\n    //response example\n    /*\n        [\n            \"https://storage.googleapis.com/your-bucket/prefix/file.png\"\n            \"https://storage.googleapis.com/your-bucket/prefix/file.jpeg\"\n        ]\n    */\n    urls, err := waitress.ListFiles(prefix)\n    if err != nil {\n        //handle error\n        return\n    }\n    c.JSON(http.StatusOK, urls)\n}\n\n// This method is to delete a single file\nfunc deleteFIle(c *gin.Context) {\n    imgUrl := c.Query(\"url\")\n    waitress, er := gcpKey(c.Request, \"bucket name\")\n    if er != nil {\n        //handle error\n        return\n    }\n\n    if err := waitress.DeleteFile(imgUrl); err != nil {\n        if err != nil {\n            //handle error\n            return\n        }\n    }\n    c.JSON(http.StatusOK, \"done\")\n}\n\nfunc main() {\n    router := gin.Default()\n    router.POST(\"/file\", upload)\n    router.GET(\"/files\", listAll)\n    router.DELETE(\"/file\", deleteFIle)\n\n    err := router.Run(\":8080\")\n    if err != nil {\n        //handle error\n        return\n    }\n}\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falabuta-source%2Ftoolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falabuta-source%2Ftoolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falabuta-source%2Ftoolkit/lists"}