Validates add-ons for Mozilla products.

amo-validator的Python项目详细描述


[![更新](https://pyup.io/repos/github/mozilla/amo validator/shield.svg)](https://pyup.io/repos/github/mozilla/amo validator/)




:warning::warning::fire:

add ons.mozilla.org上仍在使用它作为旧版加载项,但一旦对旧版加载项更新的支持从AMO中消失,此工具将被存档。


AMO验证器是一个用于扫描Mozilla加载项包的工具,以查找
问题,如Security漏洞、漏洞攻击、垃圾邮件和恶意软件,
以及许多其他垃圾。通过使用各种技术和
检测机制的组合,验证器能够既高效又彻底地




nstall-r requirements.txt
````



\submodules

验证器可能需要一些子模块才能工作。确保运行

``bash
git clone--recursive git://github.com/mozilla/amo validator.git
```


>以便获得所有的好处。



spidermonkey

加载提示](http://hg.mozilla.org/mozilla central/archive/tip.tar.bz2)
(速度更快)。然后从这样的源代码构建它,比如

``bash
cd mozilla central
cd js/src
autoconf2.13
./configure
make
sudo cp dist/bin/js/usr/local/bin/js
```

如果您在Mac OS X上使用
`brew`,则可以使用此


brew安装autoconf213



使用AMO验证器作为包含的应用程序使用Docker

ATH到xpi>;[-t<;预期类型>;][-o<;输出类型>;][-v]
[--无聊的][--自托管的][--确定的]
````


xpi的路径应指向xpi文件。

<;dl>;
<;dt>;-t
<;dd>;希望检测到加载项的类型s.
类型列表如下。
<;dt>;-o
<;dd>;要生成的输出类型。下面列出了类型。
<;dt>;-v
<;dd>;启用详细模式。额外信息将以详细模式显示,
即通知(信息消息)、可用的Jetpack信息、额外错误信息(如上下文、文件数据等)和错误说明。这仅适用于"-o文本"。
<;dt>;--selfhosted
<;dd>;禁用特定于AMO上托管的加载项的消息。
<;dt>;--borning
<;dd>;禁用彩色外壳输出。
<;dt>;--determined
<;dd>;继续验证剩余的如果某个层已
失败,则为加载项的ing层。当为格式严重错误的加载项启用此选项时,某些高级测试可能会意外失败。
<;dt>;--target maxversion
<;dd>;接受包含键为guid且值为版本字符串的对象的json字符串。这将覆盖he
插件支持相应的应用程序guid。例如:
`{"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}":"6.*"}`
<;dt>;--target min version
<;dd>;与`--target maxversion'相同,除了覆盖最小版本
<;dt>;--对于appversions
<;dd>;接受json字符串containing键为guid且
值为版本字符串列表的对象。如果指定了此列表,
仅当非内联兼容性测试专门针对此参数中的应用程序和veresion时,才会运行这些测试。例如:
{{ec8030f7-c8030f7-c20a-464a-464f-9b0e-13a3a9a9e97384}":["6.*"]}`
<;dl>;




//预期类型:


>预期类型应为下列值之一:


<;dl>;
<;lt;dt>;任何(默认值)
<;dd gt;接受任何分机
<;dt>;分机ion
<;dd>;只接受扩展名
<;dt>;主题
<;dd>;只接受主题
<;dt>;字典
<;dd>;只接受字典
<;dt>;语言包
<;dd>;只接受语言包
<;dt>;搜索
<;dd>;只接受OpenSearch XML文件(未打包)
<;dt>;multi
<;dd>;只接受多项目xpi包
<;dl>;


如果验证程序在扫描时未检测到特定类型,则指定预期类型将引发错误。所有加载项类型
检测机制都用于进行此确定。



\r\n输出类型:


>输出类型可以是以下任一类型:

<;dl>;
<;dt>;文本(默认值)
<;dd>;输出加载项分析的文本摘要。支持详细模式。
<;dt>;json
<;dd>;输出表示加载项分析完整摘要的json片段。
<;dl>;


/>每行消息。消息的前缀是它们的优先级
(即:"警告:这是消息")。


文本输出的开头是一个块,描述了
加载项类型被确定为什么。




json输出模式(`json`)

作为包含所有消息的json片段。json输出的格式是下面
示例文档的格式。

``js
{
"detected撸type":"extension",
"errors":2,
"warnings":1,
"notices":1,
"success":false,
"compatibility撸summary":{
"errors":1,
"warnings:0,
"通知":0
},
"结束层":4,
"消息":[
{
"uid":"123456789",
"id":["模块","函数","错误"],
"类型":"错误","消息":"这是错误消息文本。",
"description":["错误消息的说明。",
"附加说明文本"],
"文件":["chrome/foo.jar","bar/zap.js"],
"行":12,
"列":50,
"上下文":[
"如果(foo=bar())",
"一个"错误"在这一行的某个地方,null
],
"兼容类型":"错误",
"对于应用程序版本":{
"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}""5.0A2"、"6.0A1"]
},
"Tier":2
>

"元数据":{
"name":"最佳外挂外挂外挂",
"version":"9000",
"guid":"foo@bar.com"



` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `文件层次结构r/>
当子包存在时,尖括号将删除它是子包
名称和消息文本。

如果没有可用的文件(即,当文件丢失时,
`file`值将为空。如果
子包中有"file"值,则"file"属性将是一个列表,其中包含最外层子包名称的
名称,后跟每个连续的
同心子包名称,后跟生成
消息的文件的名称。如果在
子包中没有可用的文件,则"file"属性是相同的,除了"file"属性中列表的最后一个元素
是空字符串之外。

例如,此树将生成以下消息:

`````
package_to_test.xpi
/>|-xpi


"消息":"<;em:type>;在install.rdf中找不到",
"说明":"…",
"file":"install.rdf",
"line":0
},
{
"type":"error",
"message":"无效的chrome.manifest主题:重写",
"description":"…",
"file":"chrome.manifest",
"line":7
},
{
"type":"error",
"message":"subpackage.xpi>;install.rdf missing from theme",
"description":"…",
"file":["subpackage.xpi",""],
"line":0
},
{
"type":"error",
"message":"subpackage.xpi>;subsubpackage.xpi>;chrome.manifest subject:sytle",
"description":"…",
"file":["subpackage.xpi","subsubpackage.xpi","chrome.manifest"],
"line":5
}
]
`````


列号是基于0的。从编程的角度来看,这可能会令人困惑,但从字面上讲是有意义的。""行
one"显然指文件的第一行。



null
上下文表示验证器无法确定周围的
代码。作为一个列表,总是有三个元素。每个元素
表示围绕消息位置的行。

上下文列表的中间元素表示感兴趣的行。如果
上下文列表的元素为空,则该行不存在。对于
实例,如果错误位于文件的第一行,则上下文可能如下所示:

``js
[
null,
"这是有错误的行",
"这是文件的第二行"
]
````

相同的规则适用于文件结尾和只有一行的文件。



测试可以用

``bash
py运行。测试可以用

``````


``bash
`py运行。测试功能可以用/
````

需要一段时间。如果您的机器上有两个以上的内核,或者您不介意pwnage,您可以尝试
增加用于测试的并行进程的数量。


`./validator/\u init\uuuu.py`.
2的顶部增加`\uu version`属性。将更改提交到主分支并运行"git push"。
3.使用新版本号标记master,例如"git tag 1.9.8"。
4。使用"git push--tags"推送新标记
5。travisci将从您的tag comm中构建并向pypi发布一个新版本的"amo验证器"
它。
[这里是一个示例](https://travis ci.org/mozilla/amo validator/builds/90333989)。

d在
`validator/app_versions.json`文件中。必须对其进行更新,以包含最新的
应用程序版本。这些信息可以在amo上找到:

https://addons.mozilla.org/en-us/firefox/pages/appversions/


\js libraries

js library散列的列表被保留以允许白名单或警告。这些
必须与每个新库版本一起重新生成。要更新:

``bash
python extras/update懔hashes.py
````

要向组合添加新库,请编辑"extras/jslibfetcher.py",并将
版本号添加到相应的元组中。



etpack版本。要重建哈希库,
只需运行:

``bash
cd jetpack
./生成"jp"白名单.sh
```




目前,它的设计目的是在OSX上与Mozilla应用程序的OSX版本一起工作,尽管它可以在任何一个针对OSX应用程序包的尼克斯平台上运行。厕所。一旦准备好了,只需运行:

``bash
cd extras
python update_angpacks.py
```

请注意,如果任何团队更改存储各种语言文件的位置,则此工具将严重失败。


还请注意,此工具只应针对这些
应用程序的en-us版本运行。




欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
有没有一种方法可以将不同的java web应用程序组合到一个web应用程序(war)中而不相互影响?   java一次屏蔽两位   java如何在多个类上初始化元素?   java在后台服务中处理通知或使用GCM(或其他推送通知服务)   java从const方法调用JNI函数   javascript如何使用函数/方法返回?   Java优化:声明类变量与使用临时变量   java字符算术基数8 vs基数10   Java流收集要存储的对象列表   swing我正在用Java中的keyListener制作一个精灵移动器   在Gradle构建脚本中使用Scala(或java)方法   java Android Mediaplayer下一步按钮不起作用   Java Sound API在播放音频文件后将其锁定   java将变量从外部类传递到内部类的最佳方法   使用play framework的博客web应用程序出现java逻辑错误   java我们可以在Spring批处理中处理大型zip文件吗?   java如何检查JTable的选定行的特定列中的值是否已经在JList中?