Update docs with download links instead of file contents

This commit is contained in:
Josh Mudge 2019-11-11 21:02:31 -07:00
parent bee38d4f9d
commit efe0b21d7b
1 changed files with 17 additions and 115 deletions

View File

@ -8,42 +8,6 @@ We're creating our web server file, building it and signing the application.
## Creating the Server File ## Creating the Server File
Download `server.go` by running the following in a command prompt:
```
# Download the config file.
powershell "Invoke-WebRequest -OutFile b0x.json https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/server.go"
```
https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/serve.go
Create a file named `server.go` and add the following:
```
//go:generate goversioninfo
package main
import (
"flag"
"log"
"net/http"
)
func main() {
port := flag.String("p", "8100", "port to serve on")
directory := flag.String("d", ".", "the directory of static file to host")
flag.Parse()
http.Handle("/", http.FileServer(http.Dir(*directory)))
log.Printf("Serving %s on HTTP port: %s\n", *directory, *port)
log.Fatal(http.ListenAndServe(":"+*port, nil))
}
```
*Windows 10 will happily create server.go.txt if you don't turn off hidden file extensions and leave you wondering what's wrong with your Go install.*
First of all, you'll want to install Golang: https://golang.org/dl/ First of all, you'll want to install Golang: https://golang.org/dl/
Then you'll want to install [goversioninfo](https://github.com/josephspurrier/goversioninfo) by running the following in a command prompt: Then you'll want to install [goversioninfo](https://github.com/josephspurrier/goversioninfo) by running the following in a command prompt:
@ -53,9 +17,12 @@ go get github.com/josephspurrier/goversioninfo/cmd/goversioninfo
This will allow us to set the name of the program, version, publisher name, etc. This will allow us to set the name of the program, version, publisher name, etc.
Download `server.go` by running the following in a command prompt:
``` ```
# Add this to the top of your server go file. # Download the server file.
//go:generate goversioninfo powershell -Command Invoke-WebRequest -OutFile server.go https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/server.go
# Then generate the configuration by running the following in a command prompt: # Then generate the configuration by running the following in a command prompt:
go generate go generate
``` ```
@ -78,7 +45,7 @@ go build -o server.exe -ldflags "-s -w -H=windowsgui"
You will want to sign your application, the next section will show you how. You will want to sign your application, the next section will show you how.
## Signing the Setup File # Signing the Setup File
### Getting a Code Signing Certificate ### Getting a Code Signing Certificate
@ -101,7 +68,7 @@ Choose the "Universal Windows Platform Development" workload. After you have fin
``` ```
# Sign a file with your certificate. # Sign a file with your certificate.
SignTool sign /t http://timestamp.comodoca.com /f codesigning.p12 /p <Password> file.exe SignTool sign /t http://timestamp.comodoca.com /f codesigning.p12 /p <Password> server.exe
``` ```
![](signfile.png) ![](signfile.png)
@ -116,79 +83,11 @@ Now we're going to create the setup file that will create the firewall rule we n
## Firewall Rule ## Firewall Rule
Create a file named `setup.go` and include the following:
``` ```
//go:generate goversioninfo -manifest=setup.exe.manifest # Download the server file.
//Add new firewall rule in Go. powershell -Command Invoke-WebRequest -OutFile setup.go https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/setup.go
# And the manifest file to allow it to have administrator privileges.
package main powershell -Command Invoke-WebRequest -OutFile setup.exe.manifest https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/setup.exe.manifest
import (
"os"
"os/exec"
"io/ioutil"
"syscall"
"fmt"
"log"
"static" // Your fileb0x.
)
func main() {
// Grab files from virtual filesystem
files, err := static.WalkDirs("", false)
if err != nil {
log.Fatal(err)
log.Println("ALL FILES", files)
}
// here we'll read the file from the virtual file system
b, err := static.ReadFile("server.exe")
if err != nil {
log.Fatal(err)
}
// Copy file from virtual filesystem to real filesystem
err = ioutil.WriteFile("server.exe", b, 0644)
if err != nil {
fmt.Println("Error creating", "server.exe")
fmt.Println(err)
return
}
// Get current working directory and set it to 'dir'.
dir, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
// Set server file path to 'file'
var file = "-Program '" + dir + "\\server.exe'"
//Create firewall rule
cmdinstance := exec.Command("powershell.exe", "-WindowStyle", "Hidden", "-Command", "New-NetFirewallRule", "-DisplayName", "'Go Web Server'", "-Direction", "Inbound", file, "-Action", "Allow")
cmdinstance.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // Make it silent.
cmdoutput, cmderr := cmdinstance.Output()
if cmderr != nil {
fmt.Println(cmderr)
fmt.Println(cmdoutput)
}
}
```
Then create another file called `setup.exe.manifest` containing:
```
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
``` ```
Rename `server.go` to `server.go_` Rename `server.go` to `server.go_`
@ -203,9 +102,10 @@ go get -u github.com/UnnoTed/fileb0x
``` ```
Download a pre-made configuration file by running this in the command prompt: Download a pre-made configuration file by running this in the command prompt:
``` ```
# Download the config file. # Download the config file.
powershell "Invoke-WebRequest -OutFile b0x.json https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/b0x.json" powershell -Command Invoke-WebRequest -OutFile b0x.json https://git.rootprojects.org/josh/code-signing-final/raw/branch/master/All/b0x.json
``` ```
``` ```
@ -213,14 +113,16 @@ powershell "Invoke-WebRequest -OutFile b0x.json https://git.rootprojects.org/jos
fileb0x b0x.json fileb0x b0x.json
``` ```
This will create a folder named `static` with a file in it. You will then need to copy that folder to your `$GOPATH/src/` (usually C:\Users\Username\Go\src\). This will create a folder named `static` with a file in it. You will then need to copy that folder to your `$GOPATH/src/` (usually `C:\Users\<Username>\go\src\`).
``` ```
# Build the setup application. # Build the setup application.
go build -o setup.exe -ldflags "-s -w -H=windowsgui" go build -o setup.exe -ldflags "-s -w -H=windowsgui"
``` ```
## WIP Refer back to the instructions on [How to Sign a File](#signing-the-setup -file) to sign your setup file as well. Then you're done!
## WIP: Service
Service: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-service?view=powershell-6 Service: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-service?view=powershell-6
Credential seems to be what makes it admin or not: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-service?view=powershell-6 Credential seems to be what makes it admin or not: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-service?view=powershell-6