Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
github.com/lmmx/configure
Configure is a Go package that gives you easy configuration of your project through redundancy. It has an API inspired by negroni and the flag package.
Configeur aims to be the github.com/codegangsta/negroni
of configuration. It is a Checker
manager, in the same way negroni
managers net/http
middlewear. A Checker
is a way of retrieving configuration values from a source, these can be easily made by completing the Checker interface. The idea is that you as a developer provide Configeur with a selection of Checker
's, either built in or not and it will iterate over them attempting to find values defined by the developer. If a Checker
is successful in its retrieval, then Configeur will stop the iteration for that value. If it is not then Configeur will attempt the next Checker
in chronological order.
After you have installed Go (and have made sure to correctly setup your GOPATH) create a new .go
file, maybe hello.go
.
package main
import (
"fmt"
"github.com/paked/configure"
)
var (
conf = configure.New()
name = conf.String("name", "Harrison", "The name you want to greet")
)
func init() {
conf.Use(configure.NewEnvironment())
conf.Use(configure.NewFlag())
}
func main() {
conf.Parse()
fmt.Printf("Hello, %v", *name)
}
If you run this code with
go run hello.go
Hello, Harrison
will be printed to your terminal, not that interesting right... read on!
var (
conf = configure.New()
name = conf.String("name", "Harrison", "The name you want to greet")
)
The declaration stage is important because it defines exactly what you CAN configure! First, conf
is created which is your key to adding Checkers and retrieving variables. After that you begin properly declaring your variables, in this example only a string is declared but in practice you can use any number of String
's, Int
's or Bool
's. The variables returned by these methods are pointers to their respective types.
func init() {
conf.Use(configure.NewEnvironment())
conf.Use(configure.NewFlag())
}
The configuration stage is where you configure configure
by adding Checkers to the stack. Checkers are objects which will attempt to retrieve your variables from their respective data sources. When a Checker
fails the next one in the stack is called, the stack is in the same order that the Checker
's were added in. You can configure configure
anytime before you call the conf.Parse()
function, but the init()
function provides a reliable place to do so.
func main() {
conf.Parse()
fmt.Printf("Hello, %v", *name)
}
The final stage is where you can actually use the variables you have declared. After using conf.Parse()
your variables should then be populated and accesible by dereferencing it (name
).
If you were to run this code in its current state it would print Hello, Harrison
because Harrison
is the default value provided in the declaration stage. But if you provide --name=Johny
when you execute the command it will print Hello, Johny
. At this point configure
is behaving like the default flag
package through the Flag
Checker. Now, run export NAME=Jarvis
in your command line and execute the program again and ommit the entire --name=
command line flag. You will see a Hello, Jarvis
, as configure
has fallen back upon the Environment
Checker. Note that, if you provide both means of input the environment variable will be used, as it has higher priority as it was added before the Flag
Checker in the configuration stage. This works with any number of Checkers from any source, as long as the fulfil the Checker
interface.
More package documentation can be found on godoc.
A more complicated example can be found in the example folder, it uses all three variable types (Int
, Bool
and String
) and all three of the default Checker
's (JSON
, Environment
and Flag
).
If you notice something that you feel is broken or missing in configure feel free to open up an issue so that we can discuss it more. While small changes could be immediately put into a PR, I believe it saves everyones time to discuss major changes before implementing them. Contributions are welcome and appreciated.
Name | Location | Initialiser | Description |
---|---|---|---|
Environment | [builtin] http://github.com/paked/configure | NewEnvironment() | Environment checks the os environment variables for values |
JSON | [builtin] http://github.com/paked/configure | NewJSON(io.Reader) | Retrieves values from an io.Reader containing JSON |
Flag | [builtin] http://github.com/paked/configure | NewFlag() | Retrieve flagged values from os.Args in a --x=y format |
If you write your own Checker I would LOVE to see it, create a PR with a new entry in the table!
As you may have noticed, I am not particularly great at english. If you notice a way to de-garble a few of my sentences be sure to let me know... Not only I, but future readers will be grateful too :)
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.