4.37.0
This commit is contained in:
parent
850fc95477
commit
e516266a27
@ -74,7 +74,7 @@ Setting up DKIM is highly recommended to reduce the chance your emails ending up
|
||||
First you need to generate a private and public key for DKIM:
|
||||
|
||||
```bash
|
||||
openssl genrsa -out dkim.key 1024
|
||||
openssl genrsa -out dkim.key -traditional 1024
|
||||
openssl rsa -in dkim.key -pubout -out dkim.pub.key
|
||||
```
|
||||
|
||||
@ -515,6 +515,8 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
Note: If `/etc/nginx/sites-enabled/default` exists, delete it or certbot will fail due to the conflict. The `simplelogin` file should be the only file in `sites-enabled`.
|
||||
|
||||
Reload Nginx with the command below
|
||||
|
||||
```bash
|
||||
|
@ -32,6 +32,7 @@ def user_to_dict(user: User) -> dict:
|
||||
"in_trial": user.in_trial(),
|
||||
"max_alias_free_plan": user.max_alias_for_free_account(),
|
||||
"connected_proton_address": None,
|
||||
"can_create_reverse_alias": user.can_create_contacts(),
|
||||
}
|
||||
|
||||
if config.CONNECT_WITH_PROTON:
|
||||
@ -58,6 +59,7 @@ def user_info():
|
||||
- in_trial
|
||||
- max_alias_free
|
||||
- is_connected_with_proton
|
||||
- can_create_reverse_alias
|
||||
"""
|
||||
user = g.user
|
||||
|
||||
|
@ -489,7 +489,9 @@ def setup_nameservers():
|
||||
|
||||
NAMESERVERS = setup_nameservers()
|
||||
|
||||
DISABLE_CREATE_CONTACTS_FOR_FREE_USERS = False
|
||||
DISABLE_CREATE_CONTACTS_FOR_FREE_USERS = os.environ.get(
|
||||
"DISABLE_CREATE_CONTACTS_FOR_FREE_USERS", False
|
||||
)
|
||||
PARTNER_API_TOKEN_SECRET = os.environ.get("PARTNER_API_TOKEN_SECRET") or (
|
||||
FLASK_SECRET + "partnerapitoken"
|
||||
)
|
||||
|
@ -51,14 +51,6 @@ def email_validator():
|
||||
return _check
|
||||
|
||||
|
||||
def user_can_create_contacts(user: User) -> bool:
|
||||
if user.is_premium():
|
||||
return True
|
||||
if user.flags & User.FLAG_FREE_DISABLE_CREATE_ALIAS == 0:
|
||||
return True
|
||||
return not config.DISABLE_CREATE_CONTACTS_FOR_FREE_USERS
|
||||
|
||||
|
||||
def create_contact(user: User, alias: Alias, contact_address: str) -> Contact:
|
||||
"""
|
||||
Create a contact for a user. Can be restricted for new free users by enabling DISABLE_CREATE_CONTACTS_FOR_FREE_USERS.
|
||||
@ -82,7 +74,7 @@ def create_contact(user: User, alias: Alias, contact_address: str) -> Contact:
|
||||
if contact:
|
||||
raise ErrContactAlreadyExists(contact)
|
||||
|
||||
if not user_can_create_contacts(user):
|
||||
if not user.can_create_contacts():
|
||||
raise ErrContactErrorUpgradeNeeded()
|
||||
|
||||
contact = Contact.create(
|
||||
@ -327,6 +319,6 @@ def alias_contact_manager(alias_id):
|
||||
last_page=last_page,
|
||||
query=query,
|
||||
nb_contact=nb_contact,
|
||||
can_create_contacts=user_can_create_contacts(current_user),
|
||||
can_create_contacts=current_user.can_create_contacts(),
|
||||
csrf_form=csrf_form,
|
||||
)
|
||||
|
@ -52,13 +52,13 @@ def get_stats(user: User) -> Stats:
|
||||
|
||||
|
||||
@dashboard_bp.route("/", methods=["GET", "POST"])
|
||||
@login_required
|
||||
@limiter.limit(
|
||||
ALIAS_LIMIT,
|
||||
methods=["POST"],
|
||||
exempt_when=lambda: request.form.get("form-name") != "create-random-email",
|
||||
)
|
||||
@limiter.limit("10/minute", methods=["GET"], key_func=lambda: current_user.id)
|
||||
@login_required
|
||||
@parallel_limiter.lock(
|
||||
name="alias_creation",
|
||||
only_when=lambda: request.form.get("form-name") == "create-random-email",
|
||||
|
@ -1113,6 +1113,13 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle):
|
||||
|
||||
return random_words(1)
|
||||
|
||||
def can_create_contacts(self) -> bool:
|
||||
if self.is_premium():
|
||||
return True
|
||||
if self.flags & User.FLAG_FREE_DISABLE_CREATE_ALIAS == 0:
|
||||
return True
|
||||
return not config.DISABLE_CREATE_CONTACTS_FOR_FREE_USERS
|
||||
|
||||
def __repr__(self):
|
||||
return f"<User {self.id} {self.name} {self.email}>"
|
||||
|
||||
@ -1506,7 +1513,8 @@ class Alias(Base, ModelMixin):
|
||||
def mailboxes(self):
|
||||
ret = [self.mailbox]
|
||||
for m in self._mailboxes:
|
||||
ret.append(m)
|
||||
if m.id is not self.mailbox.id:
|
||||
ret.append(m)
|
||||
|
||||
ret = [mb for mb in ret if mb.verified]
|
||||
ret = sorted(ret, key=lambda mb: mb.email)
|
||||
|
@ -388,7 +388,7 @@ Input:
|
||||
- (Optional but recommended) `hostname` passed in query string
|
||||
- Request Message Body in json (`Content-Type` is `application/json`)
|
||||
- alias_prefix: string. The first part of the alias that user can choose.
|
||||
- signed_suffix: should be one of the suffixes returned in the `GET /api/v4/alias/options` endpoint.
|
||||
- signed_suffix: should be one of the suffixes returned in the `GET /api/v5/alias/options` endpoint.
|
||||
- mailbox_ids: list of mailbox_id that "owns" this alias
|
||||
- (Optional) note: alias note
|
||||
- (Optional) name: alias name
|
||||
|
@ -192,7 +192,6 @@ amigos
|
||||
amines
|
||||
amnion
|
||||
amoeba
|
||||
amoral
|
||||
amount
|
||||
amours
|
||||
ampere
|
||||
@ -215,7 +214,6 @@ animus
|
||||
anions
|
||||
ankles
|
||||
anklet
|
||||
annals
|
||||
anneal
|
||||
annoys
|
||||
annual
|
||||
@ -364,7 +362,6 @@ auntie
|
||||
aureus
|
||||
aurora
|
||||
author
|
||||
autism
|
||||
autumn
|
||||
avails
|
||||
avatar
|
||||
@ -638,14 +635,12 @@ bigwig
|
||||
bijoux
|
||||
bikers
|
||||
biking
|
||||
bikini
|
||||
bilges
|
||||
bilked
|
||||
bilker
|
||||
billed
|
||||
billet
|
||||
billow
|
||||
bimbos
|
||||
binary
|
||||
binder
|
||||
binged
|
||||
@ -710,8 +705,6 @@ blocks
|
||||
blokes
|
||||
blonde
|
||||
blonds
|
||||
bloods
|
||||
bloody
|
||||
blooms
|
||||
bloops
|
||||
blotch
|
||||
@ -817,8 +810,6 @@ bounds
|
||||
bounty
|
||||
bovine
|
||||
bovver
|
||||
bowels
|
||||
bowers
|
||||
bowing
|
||||
bowled
|
||||
bowleg
|
||||
@ -827,10 +818,8 @@ bowman
|
||||
bowmen
|
||||
bowwow
|
||||
boxcar
|
||||
boxers
|
||||
boxier
|
||||
boxing
|
||||
boyish
|
||||
braced
|
||||
bracer
|
||||
braces
|
||||
@ -861,7 +850,6 @@ breach
|
||||
breads
|
||||
breaks
|
||||
breams
|
||||
breast
|
||||
breath
|
||||
breech
|
||||
breeds
|
||||
@ -872,9 +860,6 @@ brevet
|
||||
brewed
|
||||
brewer
|
||||
briars
|
||||
bribed
|
||||
briber
|
||||
bribes
|
||||
bricks
|
||||
bridal
|
||||
brides
|
||||
@ -926,13 +911,7 @@ buffed
|
||||
buffer
|
||||
buffet
|
||||
bugged
|
||||
bugger
|
||||
bugled
|
||||
bugler
|
||||
bugles
|
||||
builds
|
||||
bulged
|
||||
bulges
|
||||
bulked
|
||||
bulled
|
||||
bullet
|
||||
@ -1340,8 +1319,6 @@ clingy
|
||||
clinic
|
||||
clinks
|
||||
clique
|
||||
cloaca
|
||||
cloaks
|
||||
cloche
|
||||
clocks
|
||||
clomps
|
||||
@ -1448,7 +1425,6 @@ comply
|
||||
compos
|
||||
conchs
|
||||
concur
|
||||
condom
|
||||
condor
|
||||
condos
|
||||
coneys
|
||||
@ -1568,8 +1544,6 @@ cranes
|
||||
cranks
|
||||
cranky
|
||||
cranny
|
||||
crapes
|
||||
crappy
|
||||
crated
|
||||
crater
|
||||
crates
|
||||
@ -1585,7 +1559,6 @@ crazes
|
||||
creaks
|
||||
creaky
|
||||
creams
|
||||
creamy
|
||||
crease
|
||||
create
|
||||
creche
|
||||
@ -1594,8 +1567,6 @@ credos
|
||||
creeds
|
||||
creeks
|
||||
creels
|
||||
creeps
|
||||
creepy
|
||||
cremes
|
||||
creole
|
||||
crepes
|
||||
@ -1728,9 +1699,6 @@ dainty
|
||||
daises
|
||||
damage
|
||||
damask
|
||||
dammed
|
||||
dammit
|
||||
damned
|
||||
damped
|
||||
dampen
|
||||
damper
|
||||
@ -1754,7 +1722,6 @@ darers
|
||||
daring
|
||||
darken
|
||||
darker
|
||||
darkie
|
||||
darkly
|
||||
darned
|
||||
darner
|
||||
@ -1763,8 +1730,6 @@ darter
|
||||
dashed
|
||||
dasher
|
||||
dashes
|
||||
daters
|
||||
dating
|
||||
dative
|
||||
daubed
|
||||
dauber
|
||||
@ -1921,7 +1886,6 @@ dharma
|
||||
dhotis
|
||||
diadem
|
||||
dialog
|
||||
diaper
|
||||
diatom
|
||||
dibble
|
||||
dicier
|
||||
@ -1943,7 +1907,6 @@ digits
|
||||
diking
|
||||
diktat
|
||||
dilate
|
||||
dildos
|
||||
dilute
|
||||
dimity
|
||||
dimmed
|
||||
@ -2058,7 +2021,6 @@ dotted
|
||||
double
|
||||
doubly
|
||||
doubts
|
||||
douche
|
||||
doughy
|
||||
dourer
|
||||
dourly
|
||||
@ -2139,15 +2101,6 @@ duenna
|
||||
duffed
|
||||
duffer
|
||||
dugout
|
||||
dulcet
|
||||
dulled
|
||||
duller
|
||||
dumber
|
||||
dumbly
|
||||
dumbos
|
||||
dumdum
|
||||
dumped
|
||||
dumper
|
||||
dunces
|
||||
dunged
|
||||
dunked
|
||||
@ -2285,7 +2238,6 @@ endows
|
||||
endued
|
||||
endues
|
||||
endure
|
||||
enemas
|
||||
energy
|
||||
enfold
|
||||
engage
|
||||
@ -2333,7 +2285,6 @@ erects
|
||||
ermine
|
||||
eroded
|
||||
erodes
|
||||
erotic
|
||||
errand
|
||||
errant
|
||||
errata
|
||||
@ -2344,7 +2295,6 @@ eructs
|
||||
erupts
|
||||
escape
|
||||
eschew
|
||||
escort
|
||||
escrow
|
||||
escudo
|
||||
espied
|
||||
@ -2363,7 +2313,6 @@ ethnic
|
||||
etudes
|
||||
euchre
|
||||
eulogy
|
||||
eunuch
|
||||
eureka
|
||||
evaded
|
||||
evader
|
||||
@ -2392,7 +2341,6 @@ exempt
|
||||
exerts
|
||||
exeunt
|
||||
exhale
|
||||
exhort
|
||||
exhume
|
||||
exiled
|
||||
exiles
|
||||
@ -2415,7 +2363,6 @@ extant
|
||||
extend
|
||||
extent
|
||||
extols
|
||||
extort
|
||||
extras
|
||||
exuded
|
||||
exudes
|
||||
@ -2440,7 +2387,6 @@ faeces
|
||||
faerie
|
||||
faffed
|
||||
fagged
|
||||
faggot
|
||||
failed
|
||||
faille
|
||||
fainer
|
||||
@ -2473,18 +2419,10 @@ faring
|
||||
farmed
|
||||
farmer
|
||||
farrow
|
||||
farted
|
||||
fascia
|
||||
fasted
|
||||
fasten
|
||||
faster
|
||||
father
|
||||
fathom
|
||||
fating
|
||||
fatsos
|
||||
fatten
|
||||
fatter
|
||||
fatwas
|
||||
faucet
|
||||
faults
|
||||
faulty
|
||||
@ -2532,7 +2470,6 @@ fesses
|
||||
festal
|
||||
fester
|
||||
feting
|
||||
fetish
|
||||
fetter
|
||||
fettle
|
||||
feudal
|
||||
@ -2617,9 +2554,7 @@ flaked
|
||||
flakes
|
||||
flambe
|
||||
flamed
|
||||
flamer
|
||||
flames
|
||||
flange
|
||||
flanks
|
||||
flared
|
||||
flares
|
||||
@ -2754,8 +2689,6 @@ franks
|
||||
frappe
|
||||
frauds
|
||||
frayed
|
||||
freaks
|
||||
freaky
|
||||
freely
|
||||
freest
|
||||
freeze
|
||||
@ -2795,8 +2728,6 @@ fryers
|
||||
frying
|
||||
ftpers
|
||||
ftping
|
||||
fucked
|
||||
fucker
|
||||
fuddle
|
||||
fudged
|
||||
fudges
|
||||
@ -2891,10 +2822,7 @@ gasbag
|
||||
gashed
|
||||
gashes
|
||||
gasket
|
||||
gasman
|
||||
gasmen
|
||||
gasped
|
||||
gassed
|
||||
gasses
|
||||
gateau
|
||||
gather
|
||||
@ -3104,7 +3032,6 @@ grimed
|
||||
grimes
|
||||
grimly
|
||||
grinds
|
||||
gringo
|
||||
griped
|
||||
griper
|
||||
gripes
|
||||
@ -3186,8 +3113,6 @@ gypsum
|
||||
gyrate
|
||||
gyving
|
||||
habits
|
||||
hacked
|
||||
hacker
|
||||
hackle
|
||||
hadith
|
||||
haggis
|
||||
@ -3195,8 +3120,6 @@ haggle
|
||||
hailed
|
||||
hairdo
|
||||
haired
|
||||
hajjes
|
||||
hajjis
|
||||
halest
|
||||
haling
|
||||
halite
|
||||
@ -3223,11 +3146,8 @@ happen
|
||||
haptic
|
||||
harass
|
||||
harden
|
||||
harder
|
||||
hardly
|
||||
harems
|
||||
haring
|
||||
harked
|
||||
harlot
|
||||
harmed
|
||||
harped
|
||||
@ -3407,7 +3327,6 @@ hoofed
|
||||
hoofer
|
||||
hookah
|
||||
hooked
|
||||
hooker
|
||||
hookup
|
||||
hooped
|
||||
hoopla
|
||||
@ -3459,8 +3378,6 @@ huffed
|
||||
hugely
|
||||
hugest
|
||||
hugged
|
||||
hulled
|
||||
huller
|
||||
humane
|
||||
humans
|
||||
humble
|
||||
@ -3667,8 +3584,6 @@ jacket
|
||||
jading
|
||||
jagged
|
||||
jaguar
|
||||
jailed
|
||||
jailer
|
||||
jalopy
|
||||
jammed
|
||||
jangle
|
||||
@ -3689,8 +3604,6 @@ jejune
|
||||
jelled
|
||||
jellos
|
||||
jennet
|
||||
jerked
|
||||
jerkin
|
||||
jersey
|
||||
jested
|
||||
jester
|
||||
@ -3814,11 +3727,7 @@ kidded
|
||||
kidder
|
||||
kiddie
|
||||
kiddos
|
||||
kidnap
|
||||
kidney
|
||||
killed
|
||||
killer
|
||||
kilned
|
||||
kilted
|
||||
kilter
|
||||
kimono
|
||||
@ -3827,15 +3736,11 @@ kinder
|
||||
kindle
|
||||
kindly
|
||||
kingly
|
||||
kinked
|
||||
kiosks
|
||||
kipped
|
||||
kipper
|
||||
kirsch
|
||||
kismet
|
||||
kissed
|
||||
kisser
|
||||
kisses
|
||||
kiting
|
||||
kitsch
|
||||
kitted
|
||||
@ -3847,10 +3752,6 @@ kluges
|
||||
klutzy
|
||||
knacks
|
||||
knaves
|
||||
kneads
|
||||
kneels
|
||||
knells
|
||||
knifed
|
||||
knifes
|
||||
knight
|
||||
knives
|
||||
@ -4210,8 +4111,6 @@ lunges
|
||||
lupine
|
||||
lupins
|
||||
luring
|
||||
lurked
|
||||
lurker
|
||||
lusher
|
||||
lushes
|
||||
lushly
|
||||
@ -4608,7 +4507,6 @@ muggle
|
||||
mukluk
|
||||
mulcts
|
||||
mulish
|
||||
mullah
|
||||
mulled
|
||||
mullet
|
||||
mumble
|
||||
@ -4721,9 +4619,6 @@ nickel
|
||||
nicker
|
||||
nickle
|
||||
nieces
|
||||
niggas
|
||||
niggaz
|
||||
nigger
|
||||
niggle
|
||||
nigher
|
||||
nights
|
||||
@ -4736,7 +4631,6 @@ ninjas
|
||||
ninths
|
||||
nipped
|
||||
nipper
|
||||
nipple
|
||||
nitric
|
||||
nitwit
|
||||
nixing
|
||||
@ -4781,15 +4675,6 @@ nozzle
|
||||
nuance
|
||||
nubbin
|
||||
nubile
|
||||
nuclei
|
||||
nudest
|
||||
nudged
|
||||
nudges
|
||||
nudism
|
||||
nudist
|
||||
nudity
|
||||
nugget
|
||||
nuking
|
||||
numbed
|
||||
number
|
||||
numbly
|
||||
@ -4804,7 +4689,6 @@ nutter
|
||||
nuzzle
|
||||
nybble
|
||||
nylons
|
||||
nympho
|
||||
nymphs
|
||||
oafish
|
||||
oaring
|
||||
@ -4885,7 +4769,6 @@ opting
|
||||
option
|
||||
opuses
|
||||
oracle
|
||||
orally
|
||||
orange
|
||||
orated
|
||||
orates
|
||||
@ -4897,7 +4780,6 @@ ordeal
|
||||
orders
|
||||
ordure
|
||||
organs
|
||||
orgasm
|
||||
orgies
|
||||
oriels
|
||||
orient
|
||||
@ -4993,10 +4875,6 @@ pander
|
||||
panels
|
||||
panics
|
||||
panned
|
||||
panted
|
||||
pantie
|
||||
pantos
|
||||
pantry
|
||||
papacy
|
||||
papaya
|
||||
papers
|
||||
@ -5078,7 +4956,6 @@ pebble
|
||||
pebbly
|
||||
pecans
|
||||
pecked
|
||||
pecker
|
||||
pectic
|
||||
pectin
|
||||
pedalo
|
||||
@ -5151,9 +5028,6 @@ phenom
|
||||
phials
|
||||
phlegm
|
||||
phloem
|
||||
phobia
|
||||
phobic
|
||||
phoebe
|
||||
phoned
|
||||
phones
|
||||
phoney
|
||||
@ -5228,9 +5102,6 @@ piques
|
||||
piracy
|
||||
pirate
|
||||
pirogi
|
||||
pissed
|
||||
pisser
|
||||
pisses
|
||||
pistes
|
||||
pistil
|
||||
pistol
|
||||
@ -5311,8 +5182,6 @@ pogrom
|
||||
points
|
||||
pointy
|
||||
poised
|
||||
poises
|
||||
poison
|
||||
pokers
|
||||
pokeys
|
||||
pokier
|
||||
@ -5422,7 +5291,6 @@ preyed
|
||||
priced
|
||||
prices
|
||||
pricey
|
||||
pricks
|
||||
prided
|
||||
prides
|
||||
priers
|
||||
@ -5602,14 +5470,9 @@ rabbit
|
||||
rabble
|
||||
rabies
|
||||
raceme
|
||||
racers
|
||||
racial
|
||||
racier
|
||||
racily
|
||||
racing
|
||||
racism
|
||||
racist
|
||||
racked
|
||||
racket
|
||||
radars
|
||||
radial
|
||||
@ -5661,8 +5524,6 @@ rapers
|
||||
rapids
|
||||
rapier
|
||||
rapine
|
||||
raping
|
||||
rapist
|
||||
rapped
|
||||
rappel
|
||||
rapper
|
||||
@ -5747,7 +5608,6 @@ recoup
|
||||
rectal
|
||||
rector
|
||||
rectos
|
||||
rectum
|
||||
recurs
|
||||
recuse
|
||||
redact
|
||||
@ -5891,7 +5751,6 @@ resume
|
||||
retail
|
||||
retain
|
||||
retake
|
||||
retard
|
||||
retell
|
||||
retest
|
||||
retied
|
||||
@ -6125,8 +5984,6 @@ sadden
|
||||
sadder
|
||||
saddle
|
||||
sadhus
|
||||
sadism
|
||||
sadist
|
||||
safari
|
||||
safely
|
||||
safest
|
||||
@ -6364,16 +6221,6 @@ severs
|
||||
sewage
|
||||
sewers
|
||||
sewing
|
||||
sexier
|
||||
sexily
|
||||
sexing
|
||||
sexism
|
||||
sexist
|
||||
sexpot
|
||||
sextet
|
||||
sexton
|
||||
sexual
|
||||
shabby
|
||||
shacks
|
||||
shaded
|
||||
shades
|
||||
@ -6383,10 +6230,7 @@ shaggy
|
||||
shaken
|
||||
shaker
|
||||
shakes
|
||||
shalom
|
||||
shaman
|
||||
shamed
|
||||
shames
|
||||
shandy
|
||||
shanks
|
||||
shanty
|
||||
@ -6432,7 +6276,6 @@ shirks
|
||||
shirrs
|
||||
shirts
|
||||
shirty
|
||||
shitty
|
||||
shiver
|
||||
shoals
|
||||
shoats
|
||||
@ -6575,9 +6418,6 @@ slangy
|
||||
slants
|
||||
slated
|
||||
slates
|
||||
slaved
|
||||
slaver
|
||||
slaves
|
||||
slayed
|
||||
slayer
|
||||
sleaze
|
||||
@ -6672,7 +6512,6 @@ snarks
|
||||
snarky
|
||||
snarls
|
||||
snarly
|
||||
snatch
|
||||
snazzy
|
||||
sneaks
|
||||
sneaky
|
||||
@ -6716,7 +6555,6 @@ socket
|
||||
sodded
|
||||
sodden
|
||||
sodium
|
||||
sodomy
|
||||
soever
|
||||
soften
|
||||
softer
|
||||
@ -7468,7 +7306,6 @@ torrid
|
||||
torsos
|
||||
tortes
|
||||
tossed
|
||||
tosser
|
||||
tosses
|
||||
tossup
|
||||
totals
|
||||
@ -7686,7 +7523,6 @@ unhook
|
||||
unhurt
|
||||
unions
|
||||
unique
|
||||
unisex
|
||||
unison
|
||||
united
|
||||
unites
|
||||
@ -7793,7 +7629,6 @@ vacant
|
||||
vacate
|
||||
vacuum
|
||||
vagary
|
||||
vagina
|
||||
vaguer
|
||||
vainer
|
||||
vainly
|
||||
@ -7930,9 +7765,6 @@ votive
|
||||
vowels
|
||||
vowing
|
||||
voyage
|
||||
voyeur
|
||||
vulgar
|
||||
vulvae
|
||||
wabbit
|
||||
wacker
|
||||
wackos
|
||||
@ -7975,7 +7807,6 @@ wander
|
||||
wangle
|
||||
waning
|
||||
wanked
|
||||
wanker
|
||||
wanner
|
||||
wanted
|
||||
wanton
|
||||
|
@ -1944,7 +1944,6 @@ dosage
|
||||
dose
|
||||
dotted
|
||||
doubling
|
||||
douche
|
||||
dove
|
||||
down
|
||||
dowry
|
||||
@ -3015,7 +3014,6 @@ groom
|
||||
groove
|
||||
grooving
|
||||
groovy
|
||||
grope
|
||||
ground
|
||||
grouped
|
||||
grout
|
||||
@ -3135,7 +3133,6 @@ happiness
|
||||
happy
|
||||
harbor
|
||||
hardcopy
|
||||
hardcore
|
||||
hardcover
|
||||
harddisk
|
||||
hardened
|
||||
@ -6553,7 +6550,6 @@ swimmer
|
||||
swimming
|
||||
swimsuit
|
||||
swimwear
|
||||
swinger
|
||||
swinging
|
||||
swipe
|
||||
swirl
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,6 +20,7 @@ exclude = '''
|
||||
|
||||
[tool.ruff]
|
||||
ignore-init-module-imports = true
|
||||
exclude = [".venv", "migrations"]
|
||||
|
||||
[tool.djlint]
|
||||
indent = 2
|
||||
|
@ -15,7 +15,7 @@
|
||||
{{ otp_token_form.csrf_token }}
|
||||
<input type="hidden" name="form-name" value="create" />
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text mb-3">Please enter the 2FA code from your 2FA authenticator</div>
|
||||
<div class="small-text mb-3">Please enter the 2FA code from your authenticator app</div>
|
||||
{{ otp_token_form.token(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<div class="form-check">
|
||||
|
@ -9,7 +9,7 @@
|
||||
<h1 class="card-title">Create new account</h1>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Email address</label>
|
||||
{{ form.email(class="form-control", type="email", placeholder="YourName@protonmail.com") }}
|
||||
{{ form.email(class="form-control", type="email", placeholder="username@proton.me") }}
|
||||
<div class="small-text alert alert-info" style="margin-top: 1px">
|
||||
Emails sent to your alias will be forwarded to this email address.
|
||||
<br>
|
||||
|
@ -7,6 +7,7 @@
|
||||
<div class="card-body p-6 text-center">
|
||||
<h1 class="h4">An email to validate your email is on its way.</h1>
|
||||
<p>Please check your inbox/spam folder.</p>
|
||||
<p>Make sure to mark the message as not spam so that future messages come to your normal inbox</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -59,26 +59,29 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-5">
|
||||
<div class="col-12 col-lg-6 pt-1">
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="create" />
|
||||
{{ new_contact_form.csrf_token }}
|
||||
{{ new_contact_form.email(class="form-control", placeholder="First Last <email@example.com>", autofocus=True) }}
|
||||
{{ render_field_errors(new_contact_form.email) }}
|
||||
<div class="small-text">Where do you want to send the email?</div>
|
||||
{% if can_create_contacts %}
|
||||
{% if can_create_contacts %}
|
||||
|
||||
<button class="btn btn-primary mt-2">Create reverse-alias</button>
|
||||
{% else %}
|
||||
<button disabled
|
||||
title="Upgrade to premium to create reverse-aliases"
|
||||
class="btn btn-primary mt-2">
|
||||
Create reverse-alias
|
||||
</button>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
<div class="row mb-5">
|
||||
<div class="col-12 col-lg-6 pt-1">
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="create" />
|
||||
{{ new_contact_form.csrf_token }}
|
||||
{{ new_contact_form.email(class="form-control", placeholder="First Last <email@example.com>", autofocus=True) }}
|
||||
{{ render_field_errors(new_contact_form.email) }}
|
||||
<div class="small-text">Where do you want to send the email?</div>
|
||||
{% if can_create_contacts %}
|
||||
|
||||
<button class="btn btn-primary mt-2">Create reverse-alias</button>
|
||||
{% else %}
|
||||
<button disabled
|
||||
title="Upgrade to premium to create reverse-aliases"
|
||||
class="btn btn-primary mt-2">
|
||||
Create reverse-alias
|
||||
</button>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col-12 col-lg-6 pt-1">
|
||||
<div class="float-right d-flex">
|
||||
<form method="post">
|
||||
|
@ -17,7 +17,7 @@
|
||||
<b>hello@{{ FIRST_ALIAS_DOMAIN }}</b>,
|
||||
<b>me@{{ FIRST_ALIAS_DOMAIN }}</b>, etc.
|
||||
<br />
|
||||
If you add your own domain, this restriction is removed, and you can fully customize the alias.
|
||||
If you add your own domain (or subdomain), this restriction is removed, and you can fully customize the alias.
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -12,7 +12,7 @@
|
||||
<div class="card-body">
|
||||
<h1 class="h3">Two Factor Authentication - TOTP</h1>
|
||||
<p>
|
||||
You will need to use a 2FA application like Google Authenticator or Authy on your phone or PC and scan the following QR Code:
|
||||
You will need to use a 2FA application like Proton Pass or Aegis on your phone or PC and scan the following QR Code:
|
||||
</p>
|
||||
<canvas id="qr"></canvas>
|
||||
<script>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<div>{{ notification.message | safe }}</div>
|
||||
<form method="post"
|
||||
class="float-right mt-3"
|
||||
onsubmit="return confirm('This operation is not reversible, please confirm');">
|
||||
onsubmit="return confirm('This operation is irreversible, please confirm');">
|
||||
<button class="btn btn-outline-danger">Delete</button>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -18,7 +18,7 @@
|
||||
<br />
|
||||
For generic questions, i.e. not related to your account, we recommend to post the question on
|
||||
our
|
||||
<a href="https://www.reddit.com/r/Simplelogin/">Reddit</a>
|
||||
<a href="https://www.reddit.com/r/Simplelogin/">Reddit</a> or <a href="https://forum.simplelogin.io/">our official forum</a>
|
||||
where our community can help answer the question
|
||||
and other people with the same question can find the answer there.
|
||||
</div>
|
||||
|
@ -1,17 +1,19 @@
|
||||
{% extends "default.html" %}
|
||||
|
||||
{% set active_page = "dashboard" %}
|
||||
{% block title %}Block an alias{% endblock %}
|
||||
{% block title %}Deactivate an alias{% endblock %}
|
||||
{% block default_content %}
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h3">Block alias</h1>
|
||||
<h1 class="h3">Deactivate alias</h1>
|
||||
<p>
|
||||
You are about to block the alias
|
||||
You are about to deactivate the alias
|
||||
<a href="mailto:{{ alias }}" target="_blank">{{ alias }}</a>
|
||||
</p>
|
||||
<p>After this, you will stop receiving all emails sent to this alias, please confirm.</p>
|
||||
<p>
|
||||
After this, you will stop receiving all emails sent to this alias, please confirm. You will always be able to re-activate it untill you will decide to delete it.
|
||||
</p>
|
||||
<form method="post">
|
||||
<button class="btn btn-warning">Confirm</button>
|
||||
</form>
|
||||
|
@ -43,9 +43,8 @@ Note, if you are a paying Proton Mail user, you automatically receive the premiu
|
||||
{% endcall %}
|
||||
|
||||
{% call text() %}
|
||||
For any question, feedback or feature request, please join our
|
||||
<a href="https://github.com/simple-login/app/discussions">GitHub forum</a>
|
||||
.
|
||||
For any question or feedback, please join our <a href="https://forum.simplelogin.io/">official forum</a>.
|
||||
If you want to request a feature, please submit it on our <a href="https://github.com/simple-login/app/discussions">GitHub repo</a>.
|
||||
You can also join our
|
||||
<a href="https://www.reddit.com/r/Simplelogin/">Reddit</a>
|
||||
or follow our
|
||||
|
@ -13,7 +13,8 @@ SimpleLogin is also available on Android and iOS so you can manage your aliases
|
||||
|
||||
Note, if you are a paying Proton Mail user, you automatically receive the premium version of SimpleLogin.
|
||||
|
||||
For any question, feedback or feature request, please join our GitHub forum.
|
||||
For any question or feedback, please join our official forum.
|
||||
If you want to request a feature, please submit it on our GitHub repo.
|
||||
You can also join our Reddit or follow our Twitter.
|
||||
|
||||
Best,
|
||||
@ -26,7 +27,8 @@ Firefox: https://addons.mozilla.org/firefox/addon/simplelogin/
|
||||
Edge: https://microsoftedge.microsoft.com/addons/detail/simpleloginreceive-sen/diacfpipniklenphgljfkmhinphjlfff
|
||||
Android: https://play.google.com/store/apps/details?id=io.simplelogin.android
|
||||
iOS: https://apps.apple.com/app/id1494359858
|
||||
Github forum: https://github.com/simple-login/app/discussions
|
||||
Github repo: https://github.com/simple-login/app/discussions
|
||||
Official forum: https://forum.simplelogin.io/
|
||||
Reddit: https://www.reddit.com/r/Simplelogin/
|
||||
Twitter: https://twitter.com/simple_login
|
||||
|
||||
|
@ -71,9 +71,10 @@ Please note that you can't create more than {{ MAX_NB_EMAIL_FREE_PLAN }} aliases
|
||||
|
||||
{% endif %}
|
||||
{% call text() %}
|
||||
For any question, feedback or feature request, please join our
|
||||
<a href="https://github.com/simple-login/app/discussions">GitHub forum</a>
|
||||
.
|
||||
For any question or feedback,
|
||||
please join our <a href="https://forum.simplelogin.io/">official forum</a>.
|
||||
If you want to request a feature,
|
||||
please submit it on our <a href="https://github.com/simple-login/app/discussions">GitHub repo</a>.
|
||||
You can also join our
|
||||
<a href="https://www.reddit.com/r/Simplelogin/">Reddit</a>
|
||||
or follow our
|
||||
|
@ -26,6 +26,8 @@ No worries: all aliases you create during this period will continue to work norm
|
||||
|
||||
At any time, you can reach out to us by simply replying to this email.
|
||||
|
||||
For any question, feedback or feature request, please join our GitHub forum at https://github.com/simple-login/app/discussions
|
||||
For any question or feedback, please join our official forum at https://forum.simplelogin.io/
|
||||
|
||||
If you want to request a feature, please submit it on our GitHub repo at https://github.com/simple-login/app/discussions
|
||||
|
||||
You can also join our Reddit at https://www.reddit.com/r/Simplelogin/ follow our Twitter at https://twitter.com/simplelogin
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
{{ render_text("Thank you for choosing SimpleLogin.") }}
|
||||
{{ render_text("To get started, please confirm that <b>" + email + "</b> is your email address by clicking on the button below within 1 hour.") }}
|
||||
{{ render_text("If it wasn't you, maybe someone entered your email by mistake. In this case you can ignore this mail.") }}
|
||||
{{ render_button("Verify email", activation_link) }}
|
||||
{{ render_text('Thanks,
|
||||
<br />
|
||||
|
@ -4,4 +4,6 @@
|
||||
Thank you for choosing SimpleLogin.
|
||||
|
||||
To get started, please confirm that {{email}} is your email address using this link {{activation_link}} within 1 hour.
|
||||
|
||||
If it wasn't you, maybe someone entered your email by mistake. In this case you can ignore this mail.
|
||||
{% endblock %}
|
||||
|
@ -7,7 +7,7 @@
|
||||
{% endcall %}
|
||||
|
||||
{% call text() %}
|
||||
Your have tried to register multiple times to {{ service }}, and this is against the terms of service of SimpleLogin. Please don't do that anymore.
|
||||
You have tried to register multiple times to {{ service }}, and this is against the terms of service of SimpleLogin. Please don't do that anymore.
|
||||
{% endcall %}
|
||||
|
||||
{% call text() %}
|
||||
|
@ -17,8 +17,7 @@
|
||||
SimpleLogin is an <a href="https://github.com/simple-login">open source</a> email alias solution to protect your email address.
|
||||
</p>
|
||||
<p class="small text-white">
|
||||
SimpleLogin is the product of SimpleLogin SAS, registered in France under the SIREN number 884302134.
|
||||
SimpleLogin SAS is part of <a href="https://proton.me">Proton AG</a>.
|
||||
SimpleLogin is the product of <a href="https://proton.me">Proton AG</a>, registered in Switzerland under number CHE-354.686.492.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@ -38,12 +37,6 @@
|
||||
alt="GitHub">
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item "
|
||||
href="https://github.com/simple-login/app/blob/master/docs/api.md">
|
||||
API Docs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item "
|
||||
href="https://status.simplelogin.io/">Status</a>
|
||||
@ -61,18 +54,10 @@
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/blog/">Blog</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/job/">Join Us</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/about/">About Us</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://github.com/simple-login/app/projects/1">Roadmap</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/contact/">Contact Us</a>
|
||||
@ -106,37 +91,9 @@
|
||||
<a class="list-group-item text-white footer-item "
|
||||
href="https://simplelogin.io/docs/">Documentation</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-4 col-lg-2 mb-4">
|
||||
<h3 class="h4 text-white">Comparisons</h3>
|
||||
<ul class="list-group list-group-transparent list-group-white list-group-flush list-group-borderless mb-0 footer-list-group">
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/blog/email-alias-vs-plus-sign/">
|
||||
vs Plus Sign (+) Trick
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/blog/vs-firefox-relay/">
|
||||
vs
|
||||
Firefox Relay
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/blog/vs-burner-mail/">
|
||||
vs
|
||||
Burner Mail
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="list-group-item text-white footer-item"
|
||||
href="https://simplelogin.io/blog/alternative-33mail/">
|
||||
vs
|
||||
33mail
|
||||
</a>
|
||||
<a class="list-group-item text-white footer-item "
|
||||
href="https://forum.simplelogin.io">Forum</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -83,85 +83,92 @@
|
||||
</a>
|
||||
</div>
|
||||
<div class="dropdown-item">
|
||||
<a href="https://github.com/simple-login/app/discussions"
|
||||
<a href="https://github.com/simple-login/app/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
Forum
|
||||
Github repo
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="dropdown-item">
|
||||
<a href="/dashboard/support">Support</a>
|
||||
<div class="dropdown-item">
|
||||
<a href="https://forum.simplelogin.io"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
Forum
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="dropdown-item">
|
||||
<a href="/dashboard/support">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="nav-item">
|
||||
<a href="https://simplelogin.io/docs/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
Docs
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if current_user.should_show_upgrade_button() %}
|
||||
{% else %}
|
||||
<div class="nav-item">
|
||||
<a href="https://simplelogin.io/docs/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
Docs
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if current_user.should_show_upgrade_button() %}
|
||||
|
||||
<div class="nav-item">
|
||||
<a href="{{ url_for('dashboard.pricing') }}"
|
||||
class="btn btn-sm btn-outline-primary">Upgrade</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="dropdown">
|
||||
<a href="#" class="nav-link pr-0 leading-none" data-toggle="dropdown">
|
||||
{% if current_user.profile_picture_id %}
|
||||
<div class="nav-item">
|
||||
<a href="{{ url_for('dashboard.pricing') }}"
|
||||
class="btn btn-sm btn-outline-primary">Upgrade</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="dropdown">
|
||||
<a href="#" class="nav-link pr-0 leading-none" data-toggle="dropdown">
|
||||
{% if current_user.profile_picture_id %}
|
||||
|
||||
<span class="avatar"
|
||||
style="background-image: url('{{ current_user.profile_picture_url() }}')"></span>
|
||||
{% else %}
|
||||
<span class="avatar avatar-blue">{{ current_user.get_name_initial() or "👻" }}</span>
|
||||
{% endif %}
|
||||
<span class="ml-2 d-none d-lg-block">
|
||||
<span class="text-default text-break">{{ current_user.name or current_user.email }}</span>
|
||||
{% if current_user.in_trial() %}
|
||||
|
||||
<small class="text-success d-block mt-1"
|
||||
data-toggle="tooltip"
|
||||
title="When you signed up, you have a free 7-day Premium trial. After that your account will automatically be downgraded to the Free plan. During the trial, the only limit is you can't create more than {{ MAX_NB_EMAIL_FREE_PLAN }} aliases.">
|
||||
Premium expires {{ current_user.trial_end|dt }}
|
||||
<i class="fe fe-info"></i>
|
||||
</small>
|
||||
{% elif current_user.is_premium() %}
|
||||
<small class="text-success d-block mt-1">Premium</small>
|
||||
<span class="avatar"
|
||||
style="background-image: url('{{ current_user.profile_picture_url() }}')"></span>
|
||||
{% else %}
|
||||
<span class="avatar avatar-blue">{{ current_user.get_name_initial() or "👻" }}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
|
||||
<a class="dropdown-item mb-3" href="{{ url_for('dashboard.api_key') }}">
|
||||
<i class="dropdown-icon fa fa-key"></i> API Keys
|
||||
</a>
|
||||
<a class="dropdown-item" href="{{ url_for('auth.logout') }}">
|
||||
<i class="dropdown-icon fe fe-log-out"></i> Sign out
|
||||
<span class="ml-2 d-none d-lg-block">
|
||||
<span class="text-default text-break">{{ current_user.name or current_user.email }}</span>
|
||||
{% if current_user.in_trial() %}
|
||||
|
||||
<small class="text-success d-block mt-1"
|
||||
data-toggle="tooltip"
|
||||
title="When you signed up, you have a free 7-day Premium trial. After that your account will automatically be downgraded to the Free plan. During the trial, the only limit is you can't create more than {{ MAX_NB_EMAIL_FREE_PLAN }} aliases.">
|
||||
Premium expires {{ current_user.trial_end|dt }}
|
||||
<i class="fe fe-info"></i>
|
||||
</small>
|
||||
{% elif current_user.is_premium() %}
|
||||
<small class="text-success d-block mt-1">Premium</small>
|
||||
{% endif %}
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
|
||||
<a class="dropdown-item mb-3" href="{{ url_for('dashboard.api_key') }}">
|
||||
<i class="dropdown-icon fa fa-key"></i> API Keys
|
||||
</a>
|
||||
<a class="dropdown-item" href="{{ url_for('auth.logout') }}">
|
||||
<i class="dropdown-icon fe fe-log-out"></i> Sign out
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#"
|
||||
class="header-toggler d-lg-none ml-3 ml-lg-0"
|
||||
data-toggle="collapse"
|
||||
data-target="#headerMenuCollapse">
|
||||
<span class="header-toggler-icon"></span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#"
|
||||
class="header-toggler d-lg-none ml-3 ml-lg-0"
|
||||
data-toggle="collapse"
|
||||
data-target="#headerMenuCollapse">
|
||||
<span class="header-toggler-icon"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header collapse d-lg-flex p-0" id="headerMenuCollapse">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg order-lg-first">
|
||||
{% include "menu.html" %}
|
||||
<div class="header collapse d-lg-flex p-0" id="headerMenuCollapse">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg order-lg-first">
|
||||
{% include "menu.html" %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -106,7 +106,7 @@
|
||||
</a>
|
||||
</div>
|
||||
<div class="dropdown-item">
|
||||
<a href="https://github.com/simple-login/app/discussions"
|
||||
<a href="https://forum.simplelogin.io/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
Forum
|
||||
|
@ -1,6 +1,7 @@
|
||||
from flask import url_for
|
||||
|
||||
from app import config
|
||||
from app.db import Session
|
||||
from app.models import User, PartnerUser
|
||||
from app.proton.utils import get_proton_partner
|
||||
from tests.api.utils import get_new_user_and_api_key
|
||||
@ -23,6 +24,7 @@ def test_user_in_trial(flask_client):
|
||||
"profile_picture_url": None,
|
||||
"max_alias_free_plan": config.MAX_NB_EMAIL_FREE_PLAN,
|
||||
"connected_proton_address": None,
|
||||
"can_create_reverse_alias": True,
|
||||
}
|
||||
|
||||
|
||||
@ -52,9 +54,24 @@ def test_user_linked_to_proton(flask_client):
|
||||
"profile_picture_url": None,
|
||||
"max_alias_free_plan": config.MAX_NB_EMAIL_FREE_PLAN,
|
||||
"connected_proton_address": partner_email,
|
||||
"can_create_reverse_alias": user.can_create_contacts(),
|
||||
}
|
||||
|
||||
|
||||
def test_cannot_create_reverse_alias(flask_client):
|
||||
user, api_key = get_new_user_and_api_key()
|
||||
user.trial_end = None
|
||||
Session.flush()
|
||||
config.DISABLE_CREATE_CONTACTS_FOR_FREE_USERS = True
|
||||
|
||||
r = flask_client.get(
|
||||
url_for("api.user_info"), headers={"Authentication": api_key.code}
|
||||
)
|
||||
|
||||
assert r.status_code == 200
|
||||
assert not r.json["can_create_reverse_alias"]
|
||||
|
||||
|
||||
def test_wrong_api_key(flask_client):
|
||||
r = flask_client.get(
|
||||
url_for("api.user_info"), headers={"Authentication": "Invalid code"}
|
||||
|
17
app/tests/models/test_alias.py
Normal file
17
app/tests/models/test_alias.py
Normal file
@ -0,0 +1,17 @@
|
||||
from app.db import Session
|
||||
from app.models import Alias, Mailbox, AliasMailbox
|
||||
from tests.utils import create_new_user, random_email
|
||||
|
||||
|
||||
def test_duplicated_mailbox_is_returned_only_once():
|
||||
user = create_new_user()
|
||||
other_mailbox = Mailbox.create(user_id=user.id, email=random_email(), verified=True)
|
||||
alias = Alias.create_new_random(user)
|
||||
AliasMailbox.create(mailbox_id=other_mailbox.id, alias_id=alias.id)
|
||||
AliasMailbox.create(mailbox_id=user.default_mailbox_id, alias_id=alias.id)
|
||||
Session.flush()
|
||||
alias_mailboxes = alias.mailboxes
|
||||
assert len(alias_mailboxes) == 2
|
||||
alias_mailbox_id = [mailbox.id for mailbox in alias_mailboxes]
|
||||
assert user.default_mailbox_id in alias_mailbox_id
|
||||
assert other_mailbox.id in alias_mailbox_id
|
Loading…
x
Reference in New Issue
Block a user