Skip to content

Go-based tooling to manipulate (e.g., normalize/decode) Microsoft Office 365 "Safe Links" URLs

License

Notifications You must be signed in to change notification settings

uggyuggy/safelinks

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

safelinks

Go-based tooling to manipulate (e.g., normalize/decode) Microsoft Office 365 "Safe Links" URLs.

Latest Release Go Reference go.mod Go version Lint and Build Project Analysis

Table of Contents

Project home

See our GitHub repo for the latest code, to file an issue or submit improvements for review and potential inclusion into the project.

Overview

This repo is intended to provide various tools used to monitor processes.

Tool Name Overall Status Description
usl Alpha Small CLI tool for decoding a given Safe Links URL.

Features

usl CLI tool

Small CLI tool for decoding a given Safe Links URL.

  • Specify single Safe Links URL
    • via positional argument
    • via flag
    • via interactive prompt
  • Specify multiple Safe Links URLs
    • via standard input ("piping")
    • via file (using flag)
  • Optional verbose listing of query parameter values within a given Safe Links URL.

Changelog

See the CHANGELOG.md file for the changes associated with each release of this application. Changes that have been merged to master, but not yet an official release may also be noted in the file under the Unreleased section. A helpful link to the Git commit history since the last official release is also provided for further review.

Requirements

The following is a loose guideline. Other combinations of Go and operating systems for building and running tools from this repo may work, but have not been tested.

Building source code

  • Go
    • see this project's go.mod file for preferred version
    • this project tests against officially supported Go releases
      • the most recent stable release (aka, "stable")
      • the prior, but still supported release (aka, "oldstable")
  • GCC
    • if building with custom options (as the provided Makefile does)
  • make
    • if using the provided Makefile

Running

  • Microsoft Windows 10
  • Ubuntu 20.04

Installation

From source

  1. Download Go
  2. Install Go
  3. Clone the repo
    1. cd /tmp
    2. git clone https://github.com/atc0005/safelinks
    3. cd safelinks
  4. Install dependencies (optional)
    • for Ubuntu Linux
      • sudo apt-get install make gcc
    • for CentOS Linux
      1. sudo yum install make gcc
  5. Build
    • manually, explicitly specifying target OS and architecture
      • GOOS=linux GOARCH=amd64 go build -mod=vendor ./cmd/usl/
        • most likely this is what you want (if building manually)
        • substitute amd64 with the appropriate architecture if using different hardware (e.g., arm64 or 386)
    • using Makefile all recipe
      • make all
        • generates x86 and x64 binaries
    • using Makefile release-build recipe
      • make release-build
        • generates the same release assets as provided by this project's releases
  6. Locate generated binaries
    • if using Makefile
      • look in /tmp/safelinks/release_assets/usl/
    • if using go build
      • look in /tmp/safelinks/
  7. Copy the applicable binaries to whatever systems needs to run them so that they can be deployed

NOTE: Depending on which Makefile recipe you use the generated binary may be compressed and have an xz extension. If so, you should decompress the binary first before deploying it (e.g., xz -d usl-linux-amd64.xz).

Using release binaries

  1. Download the latest release binaries
  2. Decompress binaries
    • e.g., xz -d usl-linux-amd64.xz
    • 7-Zip also works well for this on Windows systems (e.g., for systems without Git for Windows or WSL)
  3. Copy the applicable binaries to whatever systems needs to run them so that they can be deployed

NOTE:

DEB and RPM packages are provided as an alternative to manually deploying binaries.

Deployment

  1. Place usl in a location where it can be easily accessed

Configuration

Command-line arguments

  • Use the -h or --help flag to display current usage information.
  • Flags marked as required must be set via CLI flag.
  • Flags not marked as required are for settings where a useful default is already defined, but may be overridden if desired.

usl

Flags
Flag Required Default Repeat Possible Description
h, help No false No h, help Show Help text along with the list of supported flags.
version No false No version Whether to display application version and then immediately exit application.
v, verbose No false No v, verbose Display additional information about a given Safe Links URL.
u, url maybe No u, url Safe Links URL to decode
f, inputfile maybe No valid path to file Path to file containing Safe Links URL to decode

NOTE: If an input url is not specified (e.g., via flag, positional argument or standard input) a prompt is provided to enter a Safe Links URL.

Positional Argument

A URL pattern is accepted as a single positional argument in place of the u or url flag. It is recommended that you quote the URL pattern to help prevent some of the characters from being interpreted as shell commands (e.g., & as an attempt to background a command).

Standard input (e.g., "piping")

One or more URL patterns can be provided by piping them to the usl tool.

An attempt is made to decode all input URLs (no early exit). Successful decoding results are emitted to stdout with decoding failures emitted to stderr. This allows for splitting success results and error output across different files (e.g., for later review).

Just Hit Enter

The usl tool can also be called without any input (e.g., flags, positional argument, standard input). In this scenario it will prompt you to insert/paste the URL pattern (quoted or otherwise).

Examples

Though probably not required for all terminals, we quote the Safe Links URL to prevent unintended interpretation of characters in the URL.

Using url positional argument

$ usl 'SafeLinksURLHere'
https://go.dev/dl/

Using url flag

$ usl --url 'SafeLinksURLHere'
https://go.dev/dl/

Using input prompt

In this example we just press enter so that we will be prompted for the input URL pattern.

$ usl
Enter URL: SafeLinksURLHere
https://go.dev/dl/

Using standard input (e.g., "piping")

$ cat file.with.links | usl
https://go.dev/dl/
http://example.com
http://example.net
$ echo 'SafeLinksURLHere' | usl
https://go.dev/dl/

Using filename flag

$ usl --filename file.with.links
https://go.dev/dl/
http://example.com
http://example.net

Verbose output

$ usl --verbose --url 'SafeLinksURLHere'

Expanded values from the given link:

  data      : PLACEHOLDER
  host      : nam99.safelinks.protection.outlook.com
  reserved  : 0
  sdata     : PLACEHOLDER
  url       : https://go.dev/dl/

License

See the LICENSE file for details.

References

About

Go-based tooling to manipulate (e.g., normalize/decode) Microsoft Office 365 "Safe Links" URLs

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Makefile 66.2%
  • Go 21.5%
  • Shell 8.3%
  • Dockerfile 4.0%