mirror of
https://github.com/bettercap/bettercap.git
synced 2024-11-08 06:30:13 -08:00
203 lines
4.2 KiB
Go
203 lines
4.2 KiB
Go
package zerogod
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/evilsocket/islazy/ops"
|
|
"github.com/phin1x/go-ipp"
|
|
)
|
|
|
|
func ippOnGetPrinterAttributes(ctx *HandlerContext, ipp_req *ipp.Request) {
|
|
ipp_resp := ipp.NewResponse(ipp.StatusOk, ipp_req.RequestId)
|
|
|
|
// https://tools.ietf.org/html/rfc2911 section 3.1.4.2 Response Operation Attributes
|
|
ipp_resp.OperationAttributes["attributes-charset"] = []ipp.Attribute{
|
|
{
|
|
Value: "utf-8",
|
|
Tag: ipp.TagCharset,
|
|
},
|
|
}
|
|
ipp_resp.OperationAttributes["attributes-natural-language"] = []ipp.Attribute{
|
|
{
|
|
Value: "en",
|
|
Tag: ipp.TagLanguage,
|
|
},
|
|
}
|
|
|
|
// collect user attributes
|
|
userProps := make(map[string]string)
|
|
for name, defaultValue := range IPP_USER_ATTRIBUTES {
|
|
if value, found := ctx.ippAttributes[name]; found {
|
|
userProps[name] = value
|
|
} else {
|
|
userProps[name] = defaultValue
|
|
}
|
|
}
|
|
|
|
// rfc2911 section 4.4
|
|
ipp_resp.PrinterAttributes = []ipp.Attributes{
|
|
{
|
|
// custom
|
|
"printer-name": []ipp.Attribute{
|
|
{
|
|
Value: userProps["printer-name"],
|
|
Tag: ipp.TagName,
|
|
},
|
|
},
|
|
"printer-info": []ipp.Attribute{
|
|
{
|
|
Value: userProps["printer-info"],
|
|
Tag: ipp.TagText,
|
|
},
|
|
},
|
|
"printer-make-and-model": []ipp.Attribute{
|
|
{
|
|
Value: userProps["printer-make-and-model"],
|
|
Tag: ipp.TagText,
|
|
},
|
|
},
|
|
"printer-location": []ipp.Attribute{
|
|
{
|
|
Value: userProps["printer-location"],
|
|
Tag: ipp.TagText,
|
|
},
|
|
},
|
|
"printer-privacy-policy-uri": []ipp.Attribute{
|
|
{
|
|
Value: userProps["printer-privacy-policy-uri"],
|
|
Tag: ipp.TagUri,
|
|
},
|
|
},
|
|
"ppd-name": []ipp.Attribute{
|
|
{
|
|
Value: userProps["ppd-name"],
|
|
Tag: ipp.TagName,
|
|
},
|
|
},
|
|
"printer-uri-supported": []ipp.Attribute{
|
|
{
|
|
Value: fmt.Sprintf("%s://%s:%d/printer", ops.Ternary(ctx.srvTLS, "ipps", "ipp"), ctx.srvHost, ctx.srvPort),
|
|
Tag: ipp.TagUri,
|
|
},
|
|
},
|
|
"uri-security-supported": []ipp.Attribute{
|
|
{
|
|
Value: ops.Ternary(ctx.srvTLS, "tls", "none"),
|
|
Tag: ipp.TagKeyword,
|
|
},
|
|
},
|
|
"uri-authentication-supported": []ipp.Attribute{
|
|
{
|
|
Value: "none",
|
|
Tag: ipp.TagKeyword,
|
|
},
|
|
},
|
|
"printer-state": []ipp.Attribute{
|
|
{
|
|
Value: 3, // idle
|
|
Tag: ipp.TagEnum,
|
|
},
|
|
},
|
|
"printer-state-reasons": []ipp.Attribute{
|
|
{
|
|
Value: "none",
|
|
Tag: ipp.TagKeyword,
|
|
},
|
|
},
|
|
"ipp-versions-supported": []ipp.Attribute{
|
|
{
|
|
Value: "1.1",
|
|
Tag: ipp.TagKeyword,
|
|
},
|
|
},
|
|
"operations-supported": []ipp.Attribute{
|
|
{
|
|
Value: []int{
|
|
0x0002, // print job (required by cups)
|
|
0x0004, // validate job (required by cups)
|
|
0x0008, // cancel job (required by cups)
|
|
0x0009, // get job attributes (required by cups)
|
|
0x000b, // get printer attributes
|
|
},
|
|
Tag: ipp.TagEnum,
|
|
},
|
|
},
|
|
"multiple-document-jobs-supported": []ipp.Attribute{
|
|
{
|
|
Value: false,
|
|
Tag: ipp.TagBoolean,
|
|
},
|
|
},
|
|
"charset-configured": []ipp.Attribute{
|
|
{
|
|
Value: "utf-8",
|
|
Tag: ipp.TagCharset,
|
|
},
|
|
},
|
|
"charset-supported": []ipp.Attribute{
|
|
{
|
|
Value: "utf-8",
|
|
Tag: ipp.TagCharset,
|
|
},
|
|
},
|
|
"natural-language-configured": []ipp.Attribute{
|
|
{
|
|
Value: "en",
|
|
Tag: ipp.TagLanguage,
|
|
},
|
|
},
|
|
"generated-natural-language-supported": []ipp.Attribute{
|
|
{
|
|
Value: "en",
|
|
Tag: ipp.TagLanguage,
|
|
},
|
|
},
|
|
"document-format-default": []ipp.Attribute{
|
|
{
|
|
Value: "application/pdf",
|
|
Tag: ipp.TagMimeType,
|
|
},
|
|
},
|
|
"document-format-supported": []ipp.Attribute{
|
|
{
|
|
Value: "application/pdf",
|
|
Tag: ipp.TagMimeType,
|
|
},
|
|
},
|
|
"printer-is-accepting-jobs": []ipp.Attribute{
|
|
{
|
|
Value: true,
|
|
Tag: ipp.TagBoolean,
|
|
},
|
|
},
|
|
"queued-job-count": []ipp.Attribute{
|
|
{
|
|
Value: 0,
|
|
Tag: ipp.TagInteger,
|
|
},
|
|
},
|
|
"pdl-override-supported": []ipp.Attribute{
|
|
{
|
|
Value: "not-attempted",
|
|
Tag: ipp.TagKeyword,
|
|
},
|
|
},
|
|
"printer-up-time": []ipp.Attribute{
|
|
{
|
|
Value: time.Now().Unix(),
|
|
Tag: ipp.TagInteger,
|
|
},
|
|
},
|
|
"compression-supported": []ipp.Attribute{
|
|
{
|
|
Value: "none",
|
|
Tag: ipp.TagKeyword,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
ippSendResponse(ctx, ipp_resp)
|
|
}
|